Programmazione:Java/Eclipse RCP/Override tasti funzione nell'applicazione

Da WikiSitech.
Vai alla navigazioneVai alla ricerca

<< Back to Eclipse RCP

Per fare il binding dei tasti nell'applicazione bisogna utilizzare i seguenti ExtensionPoint, censendo il command, il keybinding e l'handler da richiamare <plugin>

  <extension
        point="org.eclipse.ui.bindings">
     <key
           commandId="com.netsitech.sample.action.command.exit"
           contextId="org.eclipse.ui.contexts.window"
           schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
           sequence="ESC">
     </key>
  </extension>
  <extension
        point="org.eclipse.ui.commands">
     <command
           categoryId="org.eclipse.ui.category.views"
           id="com.netsitech.sample.action.command.exit"
           name="Esci">
     </command>
  </extension>
  <extension
        point="org.eclipse.ui.handlers">
     <handler
           class="com.netsitech.sample.action.binding.InternalKeyBindingHandler"
           commandId="com.netsitech.sample.action.command.exit">
     </handler>
  </extension>

</plugin>

Utilizzando il tag enabledWhen è possibile limitare la visibilità del binding

<extension

  point="org.eclipse.ui.handlers">
  <handler
     class="com.netsitech.sample.action.binding.InternalKeyBindingHandler"
     commandId="com.netsitech.sample.action.command.exit">
     <enabledWhen>
        <with
           variable="activePartId">
           <equals
              value="ID_DELLA_VISTA">
           </equals>
        </with>
     </enabledWhen>
  </handler>

</extension>

Nell'handler poi bisogna gestire il command definito import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException;

public class InternalKeyBindingHandler extends AbstractHandler {

  protected static String INTERNAL_COMMAND_EXIT = "com.netsitech.sample.action.command.exit"; //$NON-NLS-1$
  public Object execute(ExecutionEvent event) throws ExecutionException {
     if (INTERNAL_COMMAND_EXIT.equals(event.getCommand().getId())) {
        // Gestione evento associato all'ESC
     }
     return null;
  }

}