Espressioni booleane e filtri di azione

Quando un plugin fornisce un'azione all'interfaccia utente del workbench utilizzando uno dei punti di estensione di menu, può specificare le condizioni in base alle quali la voce di menu viene attivata (o visualizzata) nel menu. Oltre a fornire semplici condizioni di attivazione, ad esempio conteggi delle selezioni e classi delle selezioni, i plugin possono utilizzare espressioni booleane per una maggiore flessibilità nel determinare quando un'azione deve essere visibile o attivata.

Espressioni di attivazione booleane

Le espressioni booleane possono contenere gli operatori booleani (NOT, AND, OR) combinati con una sintassi predefinita per la valutazione di determinate condizioni. Molte di queste condizioni verificano un particolare oggetto. L'identità dell'oggetto attivo (l'oggetto da verificare) dipende dal contesto specifico dell'espressione di attivazione:

Quando si specifica un valore da verificare con una di queste espressioni, si assume che il valore sia una stringa, tranne quando sono effettuate correttamente le seguenti conversioni:

Una definizione completa della sintassi di attivazione XML si trova nella documentazione di riferimento del punto di estensione, per qualsiasi estensione che definisce un elemento enablement, come org.eclipse.ui.popupMenus.

Prima della versione 3.0, queste espressioni booleane generalizzate non erano disponibili. Le espressioni predefinite riportate di seguito erano utilizzate per valutare determinate condizioni senza generare un'espressione generale. Si noti che alcune di queste espressioni possono ora essere espresse con una sintassi più generalizzata. Le espressioni predefinite possono ancora essere utilizzate nel modo seguente:

Ad esempio, i frammenti riportati di seguito rappresentano espressioni di attivazione che è possibile utilizzare per un'azione ipotetica di un insieme di azioni:

<action id="org.eclipse.examples.actionEnablement.class" 
       label="Red Element" 
       menubarPath="additions" 
       class="org.eclipse.examples.actionEnablement.ObjectTestAction"> 
       <enablement> 
	 <and>
	   <objectClass name="org.eclipse.examples.actionEnablement.TestElement"/> 
           <objectState name="name" value="red"/> 
	 </and>
       </enablement> 
</action>
<action id="org.eclipse.examples.actionEnablement.property" 
       label="Property" 
       menubarPath="additions" 
       class="org.eclipse.examples.actionEnablement.PropertyTestAction"> 
       <enablement> 
           <systemProperty name="MyTestProperty" value="puppy"/> 
       </enablement> 
</action> 
<action id="org.eclipse.examples.actionEnablement.pluginState" 
       label="Installed" 
       menubarPath="additions" 
       class="org.eclipse.examples.actionEnablement.PluginTestAction"> 
       <enablement> 
           <pluginState id="x.y.z.anotherPlugin" value="installed"/> 
       </enablement> 
</action> 

Per ulteriori esempi di questo tipo di espressioni e per una descrizione completa dell'XML, fare riferimento alla documentazione sui punti di estensione.

Nella tabella seguente sono elencati i punti di estensione che aggiungono azioni e sono illustrate le modalità di utilizzo delle espressioni booleane e degli attributi di tag XML per l'attivazione.

Nome del punto di estensione

Attributi che influenzano l'attivazione

Espressioni booleane

viewActions,

editorActions,

actionSets

enablesFor - specifica il conteggio delle selezioni che è necessario raggiungere per attivare l'azione

selection class - la classe che gli oggetti selezionati devono suddividere in classi secondarie o implementare per attivare l'azione

selection name - un filtro con caratteri jolly che può essere applicato agli oggetti selezionati.

visibility - un'espressione booleana.  Controlla se la voce di menu è visibile nel menu.

enablement - un'espressione booleana.  Controlla se la voce di menu è abilitata nel menu.  È necessario specificare l'attributo enablesFor e selection class e name prima di applicare l'espressione di attivazione.

popupMenus

(Solo per i contributi relativi agli oggetti.)

objectClass - specifica la classe che gli oggetti selezionati devono suddividere in classi secondarie o implementare

(Per i contributi relativi agli oggetti e ai visualizzatori)

enablesFor - specifica il conteggio delle selezioni che è necessario raggiungere per attivare l'azione

selection class - la classe che gli oggetti selezionati devono suddividere in classi secondarie o implementare per attivare l'azione

selection name - un filtro con caratteri jolly che può essere applicato agli oggetti selezionati.

 

(Per i contributi relativi agli oggetti e ai visualizzatori)

visibility - un'espressione booleana.  Controlla se la voce di menu è visibile nel menu.

enablement - un'espressione booleana.  Controlla se la voce di menu è abilitata nel menu.  È necessario specificare l'attributo enablesFor e selection class e name prima di applicare l'espressione di attivazione.

Utilizzo di objectState con tipi di contenuto

La capacità di definire i tipi di contenuto (fare riferimento alla sezione Tipi di contenuto) può essere unita alle espressioni booleane per definire condizioni molto specifiche di abilitazione o visibilità, basate sul tipo di contenuto di una risorsa. Ad esempio, il frammento di seguito riportato costituisce una voce di menu a comparsa visibile solo se il contenuto del file selezionato corrisponde ai tipi di contenuto specifici del plugin.

<extension point="org.eclipse.ui.popupMenus">
   <objectContribution
      id="com.example.objectContributions"
      objectClass="org.eclipse.core.resources.IFile"
      nameFilter="*.xml">
         <visibility>
            <or>
               <objectState
                  name="contentTypeId"
                  value="com.example.employeeRecordContentType"/>
               <objectState
                  name="contentTypeId"
                  value="com.example.customerRecordContentType"/>
            </or>
         </visibility>
         <action id="com.example.action1"
         ...
L'attributo contentTypeId può essere utilizzato in un'espressione objectState per verificare il tipo di contenuto del file xml selezionato. Ciò consente ad un plugin di applicare una verifica del contenuto molto specifica, prima di abilitare o di visualizzare le azioni del menu relative a specifici tipi di file. Per ulteriori dettagli sull'estensione del tipo di contenuto, fare riferimento alla sezione Tipi di contenuto.