Expressions booléennes et filtres d'actions

Lorsqu'un plug-in ajoute une action à l'interface utilisateur du plan de travail à l'aide d'un point d'extension de menu, il peut spécifier les conditions dans lesquelles l'option est visible et/ou activée dans le menu. Par ailleurs, outre les conditions d'activation simples, telles que le nombre et les classes de sélection, les plug-ins peuvent utiliser des expressions booléennes pour une plus grande flexibilité au moment de déterminer la visibilité ou l'activation d'une action.

Expressions booléennes d'activation

Les expressions booléennes peuvent contenir des opérateurs booléens (NOT, AND, OR) combinés à des syntaxes prédéfinies pour évaluer certaines conditions. Un grand nombre de ces conditions testent un objet en particulier. L'identité de l"object cible" (l'objet testé) dépend du contexte spécifique de l'expression d'intégration :

La valeur à tester selon l'une de ces expressions doit être une chaîne, excepté lorsque les conversions suivantes sont possibles :

Vous trouverez une définition complète de la syntaxe d'intégration XML dans la documentation de référence concernant les points d'extension pour toute extension définissant un élément enablement, comme org.eclipse.ui.popupMenus.

Ces expressions booléennes généralisées sont disponibles seulement depuis la version R3.0. Les expressions prédéfinies qui suivent ont été utilisées pour évaluer certaines conditions sans avoir à générer une expression générale. Notons que toutes ces expressions peuvent être à présent exprimées avec la syntaxe plus généralisée. Les expressions prédéfinies peuvent toujours être utilisées comme suit :

Par exemple, les fragments de code suivants représentent des expressions d'activation pouvant être utilisées pour une action supposée d'un ensemble d'actions :

<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> 

Consultez la documentation de référence concernant les points d'extension pour les exemples plus élaborés de ces expressions et pour une description complète du langage XML.

Le tableau suivant répertorie les points d'extension ajoutant des actions et illustre comment des expressions booléennes et des attributs de code XML peuvent être utilisés pour décider de l'activation.

Nom du point d'extension

Attributs influençant l'activation

Expressions booléennes

viewActions,

editorActions,

actionSets

enablesFor - indique le nombre de sélections devant exister pour l'action à activer.

selection class - la classe que les objets sélectionnés doivent sous-classer ou implémenter afin d'activer l'action.

selection name - un filtre générique pouvant s'appliquer aux objets dans la sélection.

visibility - une expression booléenne. Contrôle si l'option de menu est visible.

enablement - une expression booléenne. Contrôle si l'option de menu est activée. Les attributs enablesFor, selection class et name doivent être appliqués avant l'expression d'activation.

popupMenus

(uniquement pour les contributions d'objets.)

objectClass - indique la classe que les objets dans la sélection doivent sous-classer ou implémenter.

(pour les contributions d'objets et d'afficheurs)

enablesFor - indique le nombre de sélections devant exister pour l'action à activer.

selection class - la classe que les objets sélectionnés doivent sous-classer ou implémenter pour activer l'action.

selection name - un filtre générique pouvant s'appliquer aux objets dans la sélection.

 

(pour les contributions d'objets et d'afficheurs)

visibility - une expression booléenne. Contrôle si l'option de menu est visible.

enablement - une expression booléenne. Contrôle si l'option de menu est activée. Les attributs enablesFor, selection class et name doivent être appliqués avant l'expression d'activation.

Utilisation d'objectState avec les types de contenu

La possibilité de définir des types de contenu (reportez-vous à la section Types de contenu) peut être combinée avec des expressions booléennes afin de définir des conditions d'activation ou d'affichage spécifiques en fonction du type de contenu d'une ressource. Par exemple, le fragment de code ci-dessous affiche une menu contextuel uniquement si le contenu du fichier sélectionné correspond aux types de contenu spécialisés du plug-in.

<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'attribut contentTypeId peut être utilisé dans une expression objectState pour vérifier le type de contenu du fichier XML sélectionné. Cela permet à un plug-in d'appliquer une vérification très spécifique avant d'activer ou d'afficher des actions de menu associées à des types de fichier spécifiques. Pour plus d'informations sur l'extension de type de contenu, reportez-vous à la section Types de contenu.