eclipse-rcp - kepler - eclipse oxygen download
¿Cómo puedo agregar un enlace de clave para un menú rápido similar al menú contextual "Refactorizar" en JDT? (2)
Quiero agregar un acceso directo a mi complemento eclipse para mostrar un menú rápido con enlaces existentes. Debería funcionar como el menú rápido "Refactor" en JDT.
Acceso directo para el menú rápido en JDT:
Menú rápido de JDT:
Ya agregué un enlace y un comando, pero parece que falta algo. La entrada Eliminar algo también funciona para el menú contextual, solo falta el acceso directo al menú rápido. ¿Alguien sabe cómo hacer esto?
<extension point="org.eclipse.ui.bindings">
<key
commandId="myplugin.refactoring.actions.DeleteSomething"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+5">
</key>
<key
commandId="myplugin.refactoring.quickMenu"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+9">
</key>
<extension point="org.eclipse.ui.commands">
<command
categoryId="myplugin.category.refactor"
description="Delete Something"
id="myplugin.refactoring.actions.DeleteSomething"
name="Extract Method">
</command>
<command
categoryId="myplugin.category.refactor"
id="myplugin.refactoring.quickMenu"
name="Show Refactor Quick Menu">
</command>
<category
id="myplugin.category.refactor"
name="Refactor">
</category>
Puedes echarle un vistazo a cómo JDT implementa lo mismo. Por ejemplo, al mirar el código fuente de Eclipse 3.8.2, verá un método interesante:
org.eclipse.jdt.ui.actions.RefactorActionGroup.installQuickAccessAction()
que se llama cuando se abre el editor de Java. Esta es una asociación de controlador programático con el editor actual.
Para resumir cómo se hace en JDT:
Primero, tienen una declaración de comando en plugin.xml:
<command name = "% ActionDefinition.refactorQuickMenu.name" description = "% ActionDefinition.refactorQuickMenu.description" categoryId = "org.eclipse.jdt.ui.category.refactoring" id = "org.eclipse.jdt.ui.edit. text.java.refactor.quickMenu ">
Ellos declaran un enlace de clave:
<key sequence = "M2 + M3 + T" commandId = "org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu" schemeId = "org.eclipse.ui.defaultAcceleratorConfiguration" />
Asocian este comando con un controlador una vez que se crea el editor. El manejador en sí (
org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator
) se ocupa de llenar el menú rápido con elementos.
No tiene que asociar un comando con un controlador mediante programación: otra opción es usar el punto de extensión org.eclipse.ui.handlers .
También puedes hacerlo así:
Agregue un comando para el menú rápido y configure un controlador predeterminado.
<command
defaultHandler="myplugin.refactoring.QuickmenuHandler"
id="myplugin.refactoring.quickMenu"
name="Show Refactor Quick Menu">
</command>
El controlador debe ser capaz de crear el menú. Algo como esto:
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
...
Menu menu = new Menu(some parent);
new MenuItem(menu, SWT.PUSH).setText("...");
menu.setVisible(true);
return null;
}
Agregue un acceso directo al comando (como lo hizo):
<key
commandId="myplugin.refactoring.quickMenu"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+9">
</key>
Finalmente unir todo esto en el punto de extensión del menú:
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="popup:ch.arenae.dnp.frame.popup?after=additions">
<menu
commandId="myplugin.refactoring.quickMenu"
label="Refactor">
<command
commandId="<first refactoring command>"
style="push">
</command>
</menu>
...
</menuContribution>
El punto importante es el atributo commandId en el elemento de menú. Se usa para mostrar el atajo de teclado en el menú.