Menu di scelta rapida

Identificativo: org.eclipse.ui.popupMenus

Descrizione: questo punto di estensione consente di aggiungere nuove azioni ai menu di scelta rapida di altri plug-in.  L'azione potrebbe contribuire a un tipo specifico di oggetto (objectContribution) o a uno specifico menu di scelta rapida. Se registrata per un tipo di oggetto, il contributo sarà visualizzato in tutti i visualizzatori dove risultano selezionati gli oggetti di quel tipo. Al contrario, una registrazione su un menu di scelta rapida sarà visualizzata soltanto in quello specifico menu, indipendentemente dalla selezione.

Quando la selezione è eterogenea, il contributo viene applicato se registrato su un tipo comune della selezione. In assenza di una corrispondenza diretta, sarà tentata la corrispondenza a superclassi e superinterfacce.

È possibile limitare ulteriormente la selezione utilizzando il filtro del nome. Quando viene utilizzato un filtro, tutti gli oggetti della selezione devono corrispondere al filtro per poter essere applicati al contributo.

Le singole azioni in un contributo oggetto possono utilizzare l'attributo enablesFor per specificare se debbano essere applicate soltanto a una o più selezioni o ad altri tipi di selezione.

Se questi meccanismi di filtro dovessero risultare insufficienti, è possibile utilizzare il meccanismo filter.  In questo caso gli attributi dell'oggetto di destinazione sono descritti in una serie di coppie di valore chiave.   Gli attributi che si applicano alla selezione sono di un tipo specifico e diverso rispetto al dominio del workbench, in modo che il filtro a questo livello venga delegato dal workbench alla selezione corrente.

Tag di configurazione:

   <!ELEMENT objectContribution (filter | menu | action)*>
   <!ATTLIST objectContribution
      id          CDATA #REQUIRED
      objectClass CDATA #REQUIRED
      nameFilter  CDATA #IMPLIED
   >

   <!ELEMENT viewerContribution (menu | action)*>
   <!ATTLIST viewerContribution
      id        CDATA #REQUIRED
      targetID  CDATA #REQUIRED
   >    <!ELEMENT filter EMPTY>
   <!ATTLIST filter
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT menu (separator)+>
   <!ATTLIST menu
      id         CDATA #REQUIRED
      label      CDATA #REQUIRED
      path       CDATA #IMPLIED
   >    <!ELEMENT separator EMPTY>
   <!ATTLIST separator
      name       CDATA #REQUIRED
   >
  • name - il nome del separatore a cui si può in seguito fare riferimento come ultimo token nel percorso dell'azione. Pertanto, i separatori fungono da gruppi denominati in cui è possibile aggiungere azioni.
  •    <!ELEMENT action EMPTY>
       <!ATTLIST action
          id                NMTOKEN #REQUIRED
          label             CDATA #REQUIRED
          menubarPath       CDATA #IMPLIED
          icon              CDATA #IMPLIED
          helpContextId     CDATA #IMPLIED
          state             (true | false) #IMPLIED
          class             CDATA #REQUIRED
          enablesFor        CDATA #IMPLIED
       > I criteri di abilitazione per l'estensione di un'azione vengono definiti inizialmente da enablesFor e selection.  Tuttavia, dopo aver creato l'istanza di gestione dell'azione, è possibile controllare lo stato di abilitazione dell'azione utilizzando direttamente il relativo metodo selectionChanged.

    L'utente può includere nelle etichette delle azioni e dei menu caratteri speciali, che codificano tasti di scelta e tasti di scelta rapida, utilizzando le seguenti regole:

    1. I tasti di scelta vengono specificati mediante il carattere e commerciale ('&') davanti al carattere selezionato nel testo tradotto. Dal momento che il carattere e commerciale non è supportato nelle stringhe XML, utilizzare il carattere &amp;.
    2. I tasti di scelta rapida facoltativi vengono specificati alla fine della stringa del nome, utilizzando '@' seguito da una serie di modificatori e il carattere di scelta rapida finale (ad esempio, &amp;Save@Ctrl+S). I tasti di scelta rapida con più di un modificatore sono ottenuti dall'unione dei modificatori tramite il simbolo '+' come il delimitatore (ad esempio, @Ctrl+Shift+S).
    Esempi:

    di seguito è riportato un esempio di punto di estensione per un menu di scelta rapida:

       <extension point="org.eclipse.ui.popupMenus">
          <objectContribution
             id="com.xyz.C1"
             objectClass="org.eclipse.core.resources.IFile"
             nameFilter="*.java">
             <menu id="com.xyz.xyzMenu"
                   path="additions"
                   label="&amp;XYZ Java Tools">
                <separator name="group1"/>
             </menu>
             <action id="com.xyz.runXYZ"
                  label="&amp;Run XYZ Tool"
                  menubarPath="com.xyz.xyzMenu/group1"
                  icon="icons/runXYZ.gif"
                  helpContextId="com.xyz.run_action_context"
                  class="com.xyz.actions.XYZToolActionDelegate"
                  enablesFor="1">
              </action>
            </objectContribution>
            <viewerContribution
               id="com.xyz.C2"
               targetID="org.eclipse.ui.views.TaskList">
               <action id="com.xyz.showXYZ"
                       label="&amp;Show XYZ"
                       menubarPath="additions"
                       icon="icons/showXYZ.gif"
                       helpContextId="com.xyz.show_action_context"
                       class="com.xyz.actions.XYZShowActionDelegate">
               </action>
            </viewerContribution>
         </extension>

    Nell'esempio sopra riportato, l'azione specificata viene abilitata per una sola selezione (attributo enablesFor). Inoltre, ogni oggetto della selezione deve implementare l'interfaccia specificata (IFile) e deve essere un file Java. L'azione viene aggiunta a un sottomenu creato in precedenza. Questo contributo sarà valido su tutte le visualizzazioni caratterizzate dalla selezione richiesta.

    Al contrario, il contributo al visualizzatore sopra riportato verrà mostrato soltanto nella visualizzazione Attività e non sarà influenzato dalla selezione effettuata nella visualizzazione.

    Di seguito viene riportato un esempio del meccanismo del filtro.  In questo caso l'azione sarà visualizzata soltanto per gli IMarkers completi caratterizzati da elevata priorità.

       <extension point="org.eclipse.ui.popupMenus">
          <objectContribution
             id="com.xyz.C1"
             objectClass="org.eclipse.core.resources.IMarker">
             <filter name="done" value="true"/>
             <filter name="priority" value="2"/>
             <action id="com.xyz.runXYZ"
                  label="High Priority Completed Action Tool"
                  icon="icons/runXYZ.gif"
                  class="com.xyz.actions.MarkerActionDelegate">
              </action>
            </objectContribution>
         </extension>

    Informazione API:  il valore dell'attributo class dell'azione deve costituire un nome completo di una classe Java che implementa org.eclipse.ui.IObjectActionDelegate in caso di contributo oggetto, org.eclipse.ui.IViewActionDelegate per contributi a visualizzatori che appartengono a visualizzazioni o org.eclipse.ui.IEditorActionDelegate per contributi a visualizzatori che appartengono a editor.  In tutti i casi, la classe di implementazione viene caricata il più tardi possibile per evitare di caricare l'intero plug-in prima che sia effettivamente necessario.

    Nota: per garantire la compatibilità con il pregresso, è possibile implementare org.eclipse.ui.IActionDelegate in caso di contributi oggetti.

    È possibile estendere un menu di scelta rapida all'interno di una parte soltanto quando la parte di destinazione pubblica un menu per estensione.  Si consiglia di effettuare questa operazione per ottenere un miglioramento della capacità di estensione del prodotto.  Ogni parte deve pubblicare tutti i menu di scelta rapida che vengono definiti richiamando IWorkbenchPartSite#registerContextMenu.  Alla fine di questa operazione, il workbench inserirà automaticamente le estensioni presenti delle azioni.

    È necessario fornire un id per ciascun menu registrato.  Perché vi sia coerenza tra le parti, è necessario che la seguente strategia sia adottata da tutti gli implementatori di parti.

    Tutti i menu di scelta rapida registrati con il workbench dovrebbero contenere anche un punto di inserzione standard con id IWorkbenchActionConstants.MB_ADDITIONS.  Gli altri plug-in utilizzeranno questo valore come riferimento per il relativo inserimento.  Il punto di inserimento potrebbe essere definito mediante l'aggiunta di GroupMarker al menu in una posizione appropriata per l'inserimento.

    Un oggetto del workbench che costituisce la selezione in un menu di scelta rapida può definire un org.eclipse.ui.IActionFilter.  Si tratta di una strategia di filtro per eseguire il filtraggio in base al tipo.  Il workbench recupererà il filtro per la selezione verificando che implementi IActionFilter.  In caso contrario, il workbench richiederà un filtro attraverso il meccanismo IAdaptable.

    Implementazione fornita: nella visualizzazione del workbench sono incorporati menu di scelta rapida che hanno in dotazione un certo numero di azioni. I plug-in possono contribuire a questi menu. Se un visualizzatore è fornito di slot riservati a questi contributi, i nomi degli slot possono essere utilizzati come percorsi al momento della relativa pubblicazione. In caso contrario, le azioni e i sottomenu vengono aggiunti alla fine del menu di scelta rapida.

    Copyright IBM Corp. 2000, 2001. Tutti i diritti riservati.