Redigerarmenyer, verktygsfält och åtgärder

org.eclipse.ui.editorActions

Den här utökningspunkten används för att lägga till åtgärder på menyn och i verktygsfältet för redigerare som registrerats av andra insticksprogram.

Den initiala bidragsuppsättningen för en redigerare definieras av en annan utökningspunkt (org.eclipse.ui.editors). En åtgärdsuppsättning skapas och delas av alla förekomster av samma redigerartyp. Vid anrop agerar dessa åtgärder enligt aktiv redigerare. Utökningspunkten följer samma mönster. Varje åtgärdsutökning skapas och delas av alla förekomster av samma redigerartyp. Åtgärdsklassen krävs för att implementera org.eclipse.ui.IEditorActionDelegate. Den aktiva redigeraren överförs till delegaten genom att IEditorActionDelegate.setActiveEditor anropas.

Aktivering och/eller synlighet för en åtgärd kan definieras med hjälp av elementen enablement respektive visibility. Dessa två element innehåller ett booleskt uttryck som utvärderas för att fastställa aktivering och/eller synlighet.

Syntaxen är densamma för elementen enablement och visibility. Båda innehåller endast ett underelement med ett booleskt uttryck. I det enklaste fallet är detta något av elementen objectClass, objectState, pluginState eller systemProperty. I det mer komplicerade fallet kombineras elementen and, or och not så att ett booleskt uttryck skapas. Både and och or måste innehålla två underelement. Elementet not får bara innehålla ett underelement.

<!ELEMENT extension (editorContribution+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT editorContribution (menu* , action*)>

<!ATTLIST editorContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

Det här elementet används för att definiera en grupp redigeraråtgärder och/eller menyer.



<!ELEMENT action (selection* | enablement?)>

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

accelerator   CDATA #IMPLIED

definitionId  CDATA #IMPLIED

menubarPath   CDATA #IMPLIED

toolbarPath   CDATA #IMPLIED

icon          CDATA #IMPLIED

disabledIcon  CDATA #IMPLIED

hoverIcon     CDATA #IMPLIED

tooltip       CDATA #IMPLIED

helpContextId CDATA #IMPLIED

style         (push|radio|toggle) "push"

state         (true | false)

class         CDATA #REQUIRED

enablesFor    CDATA #IMPLIED

actionID      CDATA #IMPLIED>

Med det här elementet definieras en åtgärd som kan anropas i användargränssnittet.



<!ELEMENT menu (separator+ , groupMarker*)>

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Elementet används för att definiera en ny meny.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Elementet används till att skapa en menyavgränsare på den nya menyn.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Elementet används till att skapa en namngiven grupp på den nya menyn. Den har ingen visuell representation på den nya menyn, i motsats till elementet separator.



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

Elementet används för att hjälpa till att bestämma aktivering av åtgärden, baserat på aktuellt urval. Ignoreras om elementet enablement anges.



<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Elementet används för att definiera aktivering av utökningen.



<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Elementet används för att definiera synligheten för utökningen.



<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Elementet representerar ett booleskt AND-uttryck för resultatet från utvärderingen av de två underelementuttrycken.



<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Elementet representerar ett booleskt OR-uttryck för resultatet från utvärderingen av de två underelementuttrycken.



<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Elementet representerar ett booleskt NOT-uttryck för resultatet från utvärderingen av underelementuttrycken.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Elementet används för att utvärdera klassen eller gränssnittet för varje objekt i det aktuella urvalet. Om varje objekt i urvalet implementerar angiven klass eller angivet gränssnitt utvärderas uttrycket till sant.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Elementet används för att utvärdera attributläget för varje objekt i det aktuella urvalet. Om varje objekt i urvalet har angivet attributläge utvärderas uttrycket till sant. För att utvärdera den här typen av uttryck måste varje objekt i urvalet implementera eller anpassas till gränssnittet org.eclipse.ui.IActionFilter.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Elementet används för att utvärdera insticksprogrammets läge. Läget för insticksprogrammet kan vara ett av följande:installed (motsvarar OSGi-begreppet "löst") eller activated (motsvarar OSGi-begreppet "aktiv").



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Elementet används för att utvärdera läget för vissa systemegenskaper. Egenskapsvärdet hämtas från java.lang.System.



Följande är ett exempel på en utökning av en redigeraråtgärd:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"&amp;XYZ-meny"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Kör XYZ-verktyget"

menubarPath=

"XYZ/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"Kör XYZ-verktyget"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</editorContribution>

</extension>

I ovanstående exempel visas angiven åtgärd som ett kryssruteobjekt på den nya menyn på högsta nivån som heter "XYZ-meny" samt som en av/på-knapp i verktygsfältet. Åtgärden aktiveras om urvalet bara innehåller Java-filsresurser.

Följande är ett annat exempel på en utökning av en redigeraråtgärd:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"&amp;XYZ2-meny"

path=

"edit/additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;Run XYZ2 Tool"

menubarPath=

"edit/XYZ2/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"Run XYZ2 Tool"

helpContextId=

"com.xyz.run_action_context2"

class=

"com.xyz.actions.RunXYZ2"

>

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<not>

<objectState name=

"extension"

value=

"java"

/>

</not>

</and>

</enablement>

</action>

</editorContribution>

</extension>

I ovanstående exempel visas angiven åtgärd som ett menyalternativ på undermenyn med namnet "XYZ-meny" på högsta Redigera-menyn. Åtgärden aktiveras om urvalet inte innehåller några Java-filresurser.

Värdet på klassattributet måste vara ett fullständigt namn på en Java-klass som implementerar org.eclipse.ui.IEditorActionDelegate. Klassen läses in så sent som möjligt för att undvika inläsning av hela insticksprogrammet, innan det verkligen behövs. Metoden setActiveEditor anropas varje gång en redigerare av angiven typ aktiveras. Bara en uppsättning åtgärder och menyer skapas för alla förekomster av angiven redigerartyp, oavsett hur många redigerarförekomster som för tillfället är öppnade i arbetsmiljön.

Utökningspunkten kan användas till att bidra åtgärder till menyer som tidigare skapats av målredigeraren. Dessutom kan menyer och åtgärder tillhandahållas till arbetsmiljöfönstret. ID:n för åtgärder och huvudgrupper inom arbetsmiljöfönstret definieras i org.eclipse.ui.IWorkbenchActionConstants. Dessa bör användas som en referenspunkt för tillägg av nya åtgärder. Menyer på den översta nivån skapas med hjälp av följande värden för attributet path:

Om attributet path utelämnas resulterar det i att den nya menyn läggs till i menyradsgruppen additions.

Åtgärder och menyer som läggs till på dessa sökvägar visas bara så länge associerad redigerare är aktiv. När redigeraren stängs tas menyerna och åtgärderna bort.

Aktiveringsvillkoret för en åtgärdsutökning definieras initialt med enablesFor och antingen selection eller enablement. När en förekomst har skapats av åtgärdsdelegaten kan den styra åtgärdens aktiveringsläge direkt inom dess selectionChanged-metod.

Åtgärds- och menyetiketter kan innehålla specialtecken för kodning av snabbtangenter med hjälp av följande regler:

  1. Snabbtangenter anges med hjälp av et-tecknet ('&') före ett valt tecken i översatt text. Eftersom et-tecknet inte tillåts i XML-strängar används teckenentiteten &amp;.
Om två eller flera åtgärder läggs till på en meny eller i ett verktygsfält av en enda utökning, visas åtgärderna i motsatt ordning till hur de visas i filen plugin.xml. Det här funktionssättet är inte särskilt intuitivt, det medges. Det upptäcktes emellertid sedan koden för Eclipse-plattformens API hade avslutats. Om funktionen nu skulle ändras innebär det att varje insticksprogram, som förlitar sig på befintliga funktioner, bryts.

Elementen selection och enablement utesluter varandra. Elementet enablement kan ersätta elementet selection med hjälp av underelementen objectClass och objectState. Till exempel följande:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

kan uttryckas med:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

Arbetsmiljön tillhandahåller en inbyggd "standardtextredigerare". Insticksprogram kan lägga till i den här standardredigeraren eller till redigerare som tillhandahålls av andra insticksprogram.