Er kunnen voorwaarden worden toegewezen aan acties die met behulp van een van de menu-extensiepunten door plugins worden aangeleverd voor de workbenchgebruikersinterface, zodat de menu-items alleen onder bepaalde omstandigheden zichtbaar en/of beschikbaar zijn in de menu's. Naast het opgeven van eenvoudige voorwaarden (zoals selectieaantallen en -klassen), kunt u plugins ook samen met booleaanse expressies gebruiken, zodat u over meer flexibiliteit beschikt.
Booleaanse expressies bestaan uit een booleaanse operator (NOT, AND, OR) en een vooraf gedefinieerde syntaxis voor het evalueren van bepaalde voorwaarden. Vaak zijn de voorwaarden van toepassing op bepaalde objecten. De identiteit van het geteste object hangt af van de specifieke context van de expressie:
Waarden voor booleaanse expressies worden als tekenreeks beschouwd, tenzij de volgende conversies slagen:
Een volledige definitie van de XML-syntaxis voor het inschakelen van items kunt u vinden in de documentatie van extensiepunten waarin het element enablement wordt gedefinieerd, zoals org.eclipse.ui.popupMenus.
Deze gegeneraliseerde booleaanse expressies zijn pas vanaf versie 3.0 beschikbaar. Vóór versie 3.0 werden de volgende vooraf gedefinieerde expressies gebruikt voor het evalueren van bepaalde voorwaarden zonder een algemene expressie te bouwen. Merk op dat u deze expressies nu zou kunnen uitdrukken met de meer gegeneraliseerde syntaxis. De vooraf gedefinieerde expressies kunt u nog steeds gebruiken:
objectClass - waar als elk object in de selectie een subklasse is van de klasse of de klasse implementeert.
objectState - waar als het benoemde kenmerk overeenkomt met de opgegeven waarde. IActionFilter helpt bij het evalueren van de epxressie. De beschikbaarheidsvoorwaarden worden door een actiefilter dynamisch berekend op basis van de doelselectie en de waarde van benoemde kenmerken.
systemProperty - waar als de benoemde systeemeigenschap overeenkomt met de opgegeven waarde.
pluginState - geeft aan of de opgegeven plugin (op id) moet worden geïnstalleerd of geactiveerd.
De onderstaande fragmenten bevatten voorbeelden van beschikbaarheidsvoorwaarden voor een hypothetische actie in een actieset:
<action id="org.eclipse.examples.actionEnablement.class" label="Rood element" menubarPath="additions" class="org.eclipse.examples.actionEnablement.ObjectTestAction"> <enablement> <and> <objectClass name="org.eclipse.examples.actionEnablement.TestElement"/> <objectState name="naam" value="rood"/> </and> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.property" label="Eigenschap" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PropertyTestAction"> <enablement> <systemProperty name="MijnTesteigenschap" value="puppy"/> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.pluginState" label="Geïnstalleerd" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PluginTestAction"> <enablement> <pluginState id="x.y.z.nogEenPlugin" value="geïnstalleerd"/> </enablement> </action>
Raadpleeg de documentatie bij de extensiepunten voor meer uitgewerkte voorbeelden van deze expressies en een volledige XML-beschrijving.
De volgende tabel bevat een overzicht van extensiepunten waarmee acties worden aangeleverd en geeft aan hoe XML-markupkenmerken en booleaanse expressies kunnen worden gebruikt voor het in- of uitschakelen van items.
Naam extensiepunt |
Beschikbaarheidskenmerken |
Booleaanse expressies |
---|---|---|
enablesFor - het selectieaantal waaraan moet worden voldaan om de actie in te schakelen. selection class - de klasse die de geselecteerde objecten als subklasse moeten gebruiken of moeten implementeren om de actie in te schakelen. selection name - een filter met jokertokens die kan worden toegepast op de objecten in de selectie. |
visibility - een booleaanse expressie. Geeft aan of het menu-item zichtbaar is in het menu. enablement - een booleaanse expressie. Geeft aan of het menu-item ingeschakeld is in het menu. De kenmerken enablesFor, selection class en name moeten worden opgegeven voordat de beschikbaarheidsexpressie kan worden toegepast. |
|
(Alleen objectaanleveringen) objectClass - de klasse die de objecten in de selectie als subklasse moeten gebruiken of moeten implementeren. (Object- en vieweraanleveringen) enablesFor - het selectieaantal waaraan moet worden voldaan om de actie in te schakelen. selection class - de klasse die de geselecteerde objecten als subklasse moeten gebruiken of moeten implementeren om de actie in te schakelen. selection name - een filter met jokertokens die kan worden toegepast op de objecten in de selectie.
|
(Object- en vieweraanleveringen) visibility - een booleaanse expressie. Geeft aan of het menu-item zichtbaar is in het menu. enablement - een booleaanse expressie. Geeft aan of het menu-item ingeschakeld is in het menu. De kenmerken enablesFor, selection class en name moeten worden opgegeven voordat de beschikbaarheidsexpressie kan worden toegepast. |
U kunt contenttypen (zie Contenttypen) met booleaanse expressies combineren om zeer specifieke beschikbaarheidsvoorwaarden te definiëren op basis van het contenttype van resources. Het voorgrondmenu uit het onderstaande fragment wordt bijvoorbeeld alleen zichtbaar als de content van het geselecteerde bestand overeenkomt met de gespecialiseerde contenttypen van de 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" ...U kunt het kenmerk contentTypeId gebruiken in een expressie met objectState om het contenttype van het geselecteerde XML-bestand op te vragen. Zo kunt u met plugins zeer specifieke contentverificatie toepassen voordat menu-acties voor specifieke bestandstypen worden ingeschakeld of afgebeeld. Raadpleeg Contenttypen voor meer informatie over de contenttype-extensie.