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.
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.
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) { } } |
Si ejecuta el complemento ahora, aparecerá lo siguiente.