Booleska uttryck och åtgärdsfilter

När en insticksmodul bidrar med en åtgärd till arbetsmiljöns UI med en av utökningspunkterna, kan de ange under vilka villkor menyalternativ ska visas och/eller vara aktiverat på menyn. Förutom att tillhandahålla enkla aktiveringsvillkor, t.ex. markeringantal och markeringsklasser, kan insticksmoduler använda booleska uttryck för mer flexibilitet i fastställandet av när en åtgärd ska visas eller vara aktiverad.

Booleska aktiveringsuttryck

Booleska uttryck kan innehålla de booleska operatorerna (NOT, AND, OR) kombinerade med en fördefinierad syntax för utvärdering av vissa villkor. Många av dessa villkor testar ett visst objekt. Identiteten för "objektet i fokus" (det objekt som testas) beror på den specifika kontexten för aktiveringsuttrycket:

När ett värde anges som ska testas mot ett av dessa uttryck, antas värdet vara en sträng utom när följande omvandlingar har lyckats:

En fullständig definition av aktiverande XML-syntax finns i referensdokumentation för en utökningspunkt för en utökning som definierar ett enablement-element, t.ex. org.eclipse.ui.popupMenus.

Innan R3.0, var dessa generaliserade booleska uttryck inte tillgängliga. Följande fördefinierade uttryck användes till att utvärdera vissa villkor utan att ett allmänt uttryck byggdes. Lägg märke till att vilket som helst av dessa uttryck nu kan uttryckas med den mer generaliserade syntaxen. De fördefinierade uttrycken kan fortfarande användas enligt följande:

Ett exempel: följande kodstycken betecknar aktiveringsuttryck som kan användas för en hypotetisk åtgärd i en åtgärdsuppsättning:

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

Se utökningspunkternas referensdokumentation för mer utvecklade exempel på dessa uttryck och en fullständig beskrivning av XML-koden.

I följande tabell anges utökningspunkter som bidrar med åtgärder och summeras hur XML-kodattribut och booleska uttryck kan användas till att påverka aktiveringen.

Utökningspunktens namn

Attribut som påverkar aktiveringen

Booleska uttryck

viewActions,

editorActions,

actionSets

enablesFor - anger det urvalsantal som måste uppfyllas för att åtgärden ska aktiveras

selection class - den klass som de markerade objekten måste ha som underklass eller implementera för att åtgärden ska aktiveras

selection name - ett jokerteckenfilter som kan tillämpas på objekten i urvalet.

visibility - ett booleskt uttryck.  Styr huruvida menyalternativet visas på menyn.

enablement - ett booleskt uttryck.  Styr huruvida menyalternativet är aktiverat på menyn.  Attributet enablesFor och selection class och name, måste vara uppfyllda innan aktiveringsuttrycket tillämpas.

popupMenus

(Endast för objektbidrag.)

objectClass - anger den klass som objekt i urvalet måste ha som underklass eller implementera

(För både objekt- och visningsbidrag)

enablesFor - anger det urvalsantal som måste uppfyllas för att åtgärden ska aktiveras

selection class - den klass som de markerade objekten måste ha som underklass eller implementera för att aktivera åtgärden

selection name - ett jokerteckenfilter som kan tillämpas på objekten i urvalet.

 

(För både objekt- och visningsbidrag)

visibility - ett booleskt uttryck.  Styr huruvida menyalternativet visas på menyn.

enablement - ett booleskt uttryck.  Styr huruvida menyalternativet är aktiverat på menyn.  Attributet enablesFor och selection class och name, måste vara uppfyllda innan aktiveringsuttrycket tillämpas.

Använda objectState med innehållstyper

Möjligheten att definiera innehållstyper (se Innehållstyper) kan kombineras med booleska uttryck till att definiera väldig specifika aktiverings- eller synlighetsvillkor baserat på innehållstypen för en resurs. Ett exempel: följande kodstycke gör ett snabbmenyobjekt synligt endast om den markerade filens innehåll matchar insticksmodulens specialiserade innehållstyper.

<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"
         ...
Attributet contentTypeId kan användas i ett objectState-uttryck till att kontrollera innehållstypen för den markerade xml-filen. Detta innebär att en insticksmodul kan tillämpa väldigt specifik innehållskontroll innan den aktiverar eller visar menyåtgärder relaterade till visa typer av filer. Se Innehållstyper för mer utförlig information om innehållstypsutökningen.