Categorías
Rich Client Platform(RCP)

Tutorial de Eclipse RCP: agregar un menú emergente al contexto del editor

1. ¿Cómo se ve el menú emergente en un editor de eclipse?
Este tutorial muestra cómo agregar un elemento de menú emergente a un contexto de editor. En este ejemplo, se agrega un elemento de menú llamado «ShowIFile» como el siguiente:

2. Pasos para agregar el menú emergente en el contexto del editor
Las siguientes son instantáneas de cada paso involucrado al crear un menú emergente usando PDE.

rcp-menú-emergente-1

rcp-menú-emergente-2

rcp-menú-emergente-3

rcp-menú-emergente-4

La parte más importante es el siguiente archivo xml. El archivo plug-in.xml debe cambiarse a lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            objectClass="org.eclipse.ui.IEditorInput"
            nameFilter="*.*"
            id="SimplePopupMenu.contribution1">
         <menu
               label="ShowIFile"
               path="additions"
               id="SimplePopupMenu.menu1">
            <separator
                  name="group1">
            </separator>
         </menu>
         <action
               label="SimpleMessageAction"
               class="simplepopupmenu.popup.actions.SimpleMessageAction"
               menubarPath="SimplePopupMenu.menu1/group1"
               enablesFor="1"
               id="SimplePopupMenu.newAction">
         </action>
      </objectContribution>
   </extension>
</plugin>

ObjectContribution hace que el menú aparezca en un menú emergente para vistas o editores. En este ejemplo, objectClass = «org.eclipse.ui.IEditorInput» hace que el menú emergente aparezca en un editor.

Cuando ejecuta el complemento ahora, se muestra la instantánea que se muestra al principio.

Como está configurado en el archivo xml anterior, cuando se hace clic en el elemento del menú, el banco de trabajo ejecutará la clase especificada: SimpleMessageAction. Debido a que la ventana emergente se declara como objectContribution, la clase proporcionada debe implementar IObjectActionDelegate. En este complemento de ejemplo, debería mostrar un mensaje simple.

3. Obtenga la selección del editor

En lugar de no hacer nada útil, cambiemos la clase SimpleMessageAction.java y hagamos que haga algo útil.

  Tutorial de Eclipse GEF - GEF MVC

Consigamos la información de selección de texto.

package simplepopupmenu.popup.actions;
 
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.texteditor.AbstractTextEditor;
 
 
import simplepopupmenu.Activator;
 
 
public class SimpleMessageAction implements IObjectActionDelegate {
	private Shell shell;
 
	public SimpleMessageAction() {
		super();
	}
 
	@Override
	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
		shell = targetPart.getSite().getShell();
	}
 
 
	@Override
	public void run(IAction action) {
		try {
			//get editor
			IEditorPart editorPart = Activator.getDefault().getWorkbench()
					.getActiveWorkbenchWindow().getActivePage()
					.getActiveEditor();
 
			if (editorPart instanceof AbstractTextEditor) {
				int offset = 0;
				int length = 0;
				String selectedText = null;
				IEditorSite iEditorSite = editorPart.getEditorSite();
				if (iEditorSite != null) {
					//get selection provider
					ISelectionProvider selectionProvider = iEditorSite
							.getSelectionProvider();
					if (selectionProvider != null) {
						ISelection iSelection = selectionProvider
								.getSelection();
						//offset
						offset = ((ITextSelection) iSelection).getOffset();
						if (!iSelection.isEmpty()) {
							selectedText = ((ITextSelection) iSelection)
									.getText();
							//length
							length = ((ITextSelection) iSelection).getLength();
							System.out.println("length: " + length);
							 MessageDialog.openInformation(
							         shell,
							         "Do Something Menu",
							         "Length: " + length + "    Offset: " + offset);
						}
					}
				}
 
			}
		} catch (Exception e) {		}
	}
 
 
	@Override
	public void selectionChanged(IAction action, ISelection selection) {
	}
 
}
  Diseño de Eclipse RCP: SWT GridLayout

Si ejecuta el complemento ahora, aparecerá lo siguiente.

selección-de-texto-en-editor-eclipse

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *