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.
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 :
objectClass - true si chaque objet dans la sélection sous-classe ou implémente la classe.
objectState - true si l'attribut nommé équivaut à la valeur spécifiée. IActionFilter participe à l'évaluation de l'expression. Un filtre d'action calcule de façon dynamique les critères d'activation pour une action basée sur la sélection cible et la valeur des attributs nommés.
systemProperty - true si la propriété système équivaut à la valeur spécifiée.
pluginState - indique si le plug-in spécifié (par ID) doit être installé ou activé.
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 |
---|---|---|
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. |
|
(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. |
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.