Snabbmenyer

org.eclipse.ui.popupMenus

Den här utökningspunkten används för att lägga till nya åtgärder på kontextmenyer från andra insticksprogram. Du kan lägga till åtgärder med utgångspunkt i en objekttyp (objectContribution) eller en kontextmeny i en vy- eller redigerardel (viewerContribution). När du använder objectContribution visas tillägget på kontextmenyerna för alla vy-/redigerardelar där objekt av den angivna typen väljs. Om du däremot använder viewerContribution visas tillägget endast på den angivna kontextmenyn för en vy- eller redigerardel, oavsett vad som väljs.

När urvalet är heterogent används tillägget om det registrerats för en gemensam typ i urvalet. Om direkt matchning inte är möjlig görs försök att matcha mot superklasser och supergränssnitt.

Med ett namnfilter kan urvalet begränsas ytterligare. När ett namnfilter används måste alla objekt i urvalet matcha filtret för att tillägget ska kunna tillämpas.

För enskilda åtgärder i ett objekttillägg kan attributet enablesFor användas till att ange vilken typ av urval eller markeringar som åtgärden ska gälla - en enstaka markering, flera markeringar eller någon annan typ av markering.

Om de här filtreringsfunktionerna är otillräckliga kan mekanismen filter användas. I detta fall beskrivs målobjektets attribut som en rad nyckelvärdepar. De attribut som gäller för urvalet är typspecifika och finns inte på arbetsmiljönivå. Filtrering på den här nivån delegeras därmed till själva urvalet eller markeringen.

Aktivering och/eller synlighet för en åtgärd kan definieras med hjälp av de respektive elementen enablement och visibility. Dessa två element innehåller ett booleskt uttryck som utvärderas för att bestämma 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 det något av elementen objectClass, objectState, pluginState eller systemProperty. I det mer komplicerade fallet kombineras elementen and, or och not för att skapa ett booleskt uttryck. Både and och or måste innehålla två underelement. Elementet not får bara innehålla ett underelement.

<!ELEMENT extension (objectContribution , viewerContribution)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT objectContribution (filter* , visibility? , enablement? , menu* , action*)>

<!ATTLIST objectContribution

id          CDATA #REQUIRED

objectClass CDATA #REQUIRED

nameFilter  CDATA #IMPLIED

adaptable   (true | false) "false">

Det här elementet används för att definiera en grupp åtgärder och/eller menyer som ska visas på de kontextmenyer som objekt av den angivna typen har markerats för.



<!ELEMENT viewerContribution (visibility? , menu* , action*)>

<!ATTLIST viewerContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

Det här elementet används för att definiera en grupp åtgärder och/eller menyer som ska visas på kontextmenyn för en viss vy eller en viss redigerardel.



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

<!ATTLIST action

id               CDATA #REQUIRED

label            CDATA #REQUIRED

definitionId     CDATA #IMPLIED

menubarPath      CDATA #IMPLIED

icon             CDATA #IMPLIED

helpContextId    CDATA #IMPLIED

style            (push|radio|toggle|pulldown)

state            (true | false)

class            CDATA #REQUIRED

enablesFor       CDATA #IMPLIED

overrideActionId CDATA #IMPLIED

tooltip          CDATA #IMPLIED>

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



<!ELEMENT filter EMPTY>

<!ATTLIST filter

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 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 utökningens synlighet.



<!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. Om du vill utvärdera den här typen av uttryck måste varje objekt i markeringen implementera eller följa 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:installerat (motsvarar OSGi-begreppet "löst") eller aktiverat (motsvarar OSGi-begreppet "aktivt").



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



<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Ett allmänt rotelement. Elementet kan användas i en utökningspunkt till att definiera enablement-uttrycket för den. De underordnade objekten till ett enablement-uttryck kombineras med hjälp av operatorn and.



<!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>

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



<!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Det här elementet representerar en AND-åtgärd för resultatet från utvärderingen av underelementuttrycken.



<!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Det här elementet representerar en OR-åtgärd för resultatet från utvärderingen av underelementuttrycken.



<!ELEMENT instanceof EMPTY>

<!ATTLIST instanceof

value CDATA #REQUIRED>

Elementet används till att göra en instanceof-kontroll av det aktuella objektet. Uttrycket returnerar EvaluationResult.TRUE om objektstypen är en undertyp till den typ som angavs av attributvärdet. I annat fall returneras EvaluationResult.FALSE.



<!ELEMENT test EMPTY>

<!ATTLIST test

property CDATA #REQUIRED

args     CDATA #IMPLIED

value    CDATA #IMPLIED>

Elementet används till att utvärdera egenskapsläget för det aktuella objektet. Uppsättningen egenskaper som kan testas kan utökas med hjälp av utökningspunkten för egenskapstestfunktionen. Testuttrycket returnerar EvaluationResult.NOT_LOADED om den aktuella egenskapstestfunktionen inte har lästs in ännu.



<!ELEMENT systemTest EMPTY>

<!ATTLIST systemTest

property CDATA #REQUIRED

value    CDATA #REQUIRED>

Testar en systemegenskap genom att anropa metoden System.getProperty method och jämför resultatet med det värde som angetts via värdeattributet.



<!ELEMENT equals EMPTY>

<!ATTLIST equals

value CDATA #REQUIRED>

Elementet används till att göra en equals-kontroll av det aktuella objektet. Uttrycket returnerar EvaluationResult.TRUE om objektet är detsamma som det värde som tillhandahålls av attributvärdet. I annat fall returneras EvaluationResult.FALSE.



<!ELEMENT count EMPTY>

<!ATTLIST count

value CDATA #REQUIRED>

Elementet används till att testa antalet element i samlingen.



<!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST with

variable CDATA #REQUIRED>

Det här elementet ändrar det objekt som ska kontrolleras för alla underordnade element till det objekt som refereras till av den angivna variabeln. Om variabeln inte kan lösas returnerar uttrycket ExpressionException när det utvärderas. De underordnade objekten till ett with-uttryck kombineras med hjälp av operatorn and.



<!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST resolve

variable CDATA #REQUIRED

args     CDATA #IMPLIED>

Det här elementet ändrar det objekt som ska kontrolleras för alla underordnade element till det objekt som refereras till av den angivna variabeln. Om variabeln inte kan lösas returnerar uttrycket ExpressionException när det utvärderas. De underordnade objekten till ett with-uttryck kombineras med hjälp av operatorn and.



<!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST adapt

type CDATA #REQUIRED>

Det här elementet används till anpassa det aktuella objektet till den typ som angavs av attributtypen. Uttrycket returneras som inte inläst om adaptern eller den refererade typen inte har lästs in än. Det returnerar ett ExpressionException under utvärdering om samma typnamn inte finns alls. De underordnade objekten till ett adapt-uttryck kombineras med hjälp av operatorn and.



<!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST iterate

operator (or|and) >

Det här elementet används till att räkna stegvis över en variabel som är av typen java.util.Collection. Om det aktuella objektet inte är av typen java.util.Collection returneras ExpressionException när uttrycket utvärderas.



Här följer ett exempel på en utökningspunkt för en snabbmeny:

   

<extension point=

"org.eclipse.ui.popupMenus"

>

<objectContribution id=

"com.xyz.C1"

objectClass=

"org.eclipse.core.resources.IFile"

nameFilter=

"*.java"

>

<menu id=

"com.xyz.xyzMenu"

path=

"additions"

label=

"&amp;XYZ Java Tools"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Kör XYZ-verktyget"

style=

"push"

menubarPath=

"com.xyz.xyzMenu/group1"

icon=

"icons/runXYZ.gif"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.XYZToolActionDelegate"

enablesFor=

"1"

/>

</objectContribution>

<viewerContribution id=

"com.xyz.C2"

targetID=

"org.eclipse.ui.views.TaskList"

>

<action id=

"com.xyz.showXYZ"

label=

"&amp;Show XYZ"

style=

"toggle"

state=

"true"

menubarPath=

"additions"

icon=

"icons/showXYZ.gif"

helpContextId=

"com.xyz.show_action_context"

class=

"com.xyz.actions.XYZShowActionDelegate"

/>

</viewerContribution>

</extension>

I ovanstående exempel aktiverar den angivna åtgärden endast en enstaka markering (attributet enablesFor). Vart och ett av objekten i markeringen måste dessutom vara en Java-filresurs och implementera det angivna gränssnittet (IFile). Åtgärden läggs till på den undermeny som skapats tidigare. Tillägget visas i alla vyer med det angivna urvalet.

Som kontrast visas ovanstående tillägg från ett visningsprogram endast på uppgiftsvyns kontextmeny och påverkas inte av markeringen i vyn.

Här följer ett exempel på filtreringsfunktionen. I det här fallet visas åtgärden endast för IMarkers som har slutförts och som har hög prioritet.

   

<extension point=

"org.eclipse.ui.popupMenus"

>

<objectContribution id=

"com.xyz.C3"

objectClass=

"org.eclipse.core.resources.IMarker"

>

<filter name=

"done"

value=

"true"

/>

<filter name=

"priority"

value=

"2"

/>

<action id=

"com.xyz.runXYZ"

label=

"High Priority Completed Action Tool"

icon=

"icons/runXYZ.gif"

class=

"com.xyz.actions.MarkerActionDelegate"

>

</action>

</objectContribution>

</extension>

Här följer ett ytterligare ett exempel på hur synlighetselementet kan användas:

   

<extension point=

"org.eclipse.ui.popupMenus"

>

<viewerContribution id=

"com.xyz.C4"

targetID=

"org.eclipse.ui.views.TaskList"

>

<visibility>

<and>

<pluginState id=

"com.xyz"

value=

"activated"

/>

<systemProperty name=

"ADVANCED_MODE"

value=

"true"

/>

</and>

</visibility>

<action id=

"com.xyz.showXYZ"

label=

"&amp;Show XYZ"

style=

"push"

menubarPath=

"additions"

icon=

"icons/showXYZ.gif"

helpContextId=

"com.xyz.show_action_context"

class=

"com.xyz.actions.XYZShowActionDelegate"

>

</action>

</viewerContribution>

</extension>

I ovanstående exempel visas den angivna åtgärden som ett menyalternativ på uppgiftsvyns kontextmeny, men endast om insticksprogrammet "com.xyz" är aktivt och värdet på den angivna systemegenskapen är true.

Värdet på åtgärdsattributet class måste vara ett fullständigt namn på en Java-klass som implementerar org.eclipse.ui.IObjectActionDelegate för objekttillägg, org.eclipse.ui.IViewActionDelegate för tillägg på kontextmenyer för vyer eller org.eclipse.ui.IEditorActionDelegate för tillägg på kontextmenyer för redigerare. Klassen läses in så sent som möjligt för att undvika inläsning av hela insticksprogrammet, innan det verkligen behövs.

Obs! För bakåtkompatibilitet krävs implementering av org.eclipse.ui.IActionDelegate för objekttillägg.

Utökning av kontextmenyer inom en del kan endast göras i de fall där en meny för utökningen publiceras i måldelen. Detta rekommenderas eftersom produktens utökningsmöjligheter förbättras. För att åstadkomma detta måste varje del publicera alla kontextmenyer som definieras med anrop av IWorkbenchPartSite.registerContextMenu. När det är genomfört infogas alla befintliga åtgärdsutökningar automatiskt.

Ett meny-ID måste tillhandahållas för varje registrerad meny. För enhetlighetens skull måste följande strategi användas av alla delimplementeringsfunktioner.

Kontextmenyer som registrerats i arbetsmiljön ska även innehålla en standardinsättningspunkt med följande ID: IWorkbenchActionConstants.MB_ADDITIONS. Andra insticksprogram använder värdet som referenspunkt för infogning. Insättningspunkten kan anges genom att du lägger till en GroupMarker till menyn där insättningspunkten ska vara.

Ett objekt i arbetsmiljön som utgörs av ett val på en kontextmeny kan definiera org.eclipse.ui.IActionFilter. Detta är en filtreringsstrategi för typspecifik filtrering. Arbetsmiljön hämtar det aktuella filtret genom att testa om det implementerar IActionFilter. Om testet misslyckas efterfrågas ett filter via IAdaptable.

Åtgärds- och menyetiketter kan innehålla specialtecken som kodats med hjälp av et-tecknet (&') framför det valda tecknet i den översatta texten. 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 av en enda utökning, visas åtgärderna i omvänd ordning mot 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 ändras i nuläget skulle det innebära 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>

I arbetsmiljövyerna finns inbyggda kontextmenyer som redan innehåller en rad åtgärder. Med hjälp av insticksprogram kan fler alternativ läggas till på menyerna. Om visningsprogrammet har reserverade och publika platser för sådana tillägg, kan platsernas namn användas som sökvägar. I annat fall läggs åtgärder och undermenyer till i slutet av snabbmenyn.