Funktionssæt

org.eclipse.ui.actionSets

Dette udvidelsespunkt bruges til at tilføje menuer, menupunkter og knapper på værktøjslinjen i de generelle områder i arbejdsbænkvinduet. Det kaldes samlet et funktionssæt og vises i arbejdsbænkvinduet af den bruger, der tilpasser et perspektiv.

Der er en implementeringsbetingelse, der aktuelt påvirker funktionssæt. Det er vigtigt at definere hele menustrukturen, der skal henvises til i funktionssættet. Så hvis f.eks. et andet funktionssæt definerer en menu ved navn "eksempel", er det ikke muligt at stole på, at "eksempel" findes. Det er nødvendigt at gendefinere menuen "eksempel" i hvert handlingssæt, der vil bruge den.

En funktions aktivering og/eller synlighed kan defineres ved hjælp af elementerne enablement og visibility. Disse to elementer indeholder et boolesk udtryk, der evalueres for at bestemme aktiveringen og/eller synligheden.

Syntaksen er den samme for elementerne enablement og visibility. De indeholder begge kun et underelement til et boolesk udtryk. I de mest enkle tilfælde vil det være et af følgende elementer: objectClass, objectState, pluginState eller systemProperty. I mere komplekse tilfælde kan elementerne and, or og not kombineres, så de danner et boolesk udtryk. Både elementet and og or skal indeholde to underelementer. Elementet not må kun indeholde et underelement.

<!ELEMENT extension (actionSet+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

navn  CDATA #IMPLIED>


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

<!ATTLIST actionSet

id          CDATA #REQUIRED

label       CDATA #REQUIRED

visible     (true | false)

description CDATA #IMPLIED>

Dette element bruges til at definere en gruppe funktioner og/eller menuer.



<!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|pulldown) "push"

state            (true | false)

pulldown         (true | false)

class            CDATA #IMPLIED

retarget         (true | false)

allowLabelUpdate (true | false)

enablesFor       CDATA #IMPLIED>

Dette element definerer en funktion, som brugeren kan starte i brugergrænsefladen.



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

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Dette element bruges til at definere en ny menu.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Dette element bruges til at oprette en menuseparator på den nye menu.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Dette element bruges til at oprette en navngiven gruppe på den nye menu. Den har ingen visuel repræsentation på den nye menu i modsætning til elementet separator.



<!ELEMENT selection EMPTY>

<!ATTLIST selection

klasse CDATA #REQUIRED

navn  CDATA #IMPLIED>

Dette element bruges til at hjælpe med at bestemme funktionsaktiveringen på basis af det aktuelle valg. Ignoreres, hvis elementet enablement er angivet.



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

Dette element bruges til at definere aktiveringen af udvidelsen.



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

Dette element bruges til at definere synligheden for udvidelsen.



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

Dette element repræsenterer en boolesk AND-funktion på resultatet af evalueringen af dets to underelementudtryk.



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

Dette element repræsenterer en boolesk OR-funktion på resultatet af evalueringen af dets to underelementudtryk.



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

Dette element repræsenterer en boolesk NOT-funktion på resultatet af evalueringen af dets to underelementudtryk.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Dette element bruges til at evaluere klassen eller grænsefladen for hvert objekt i det aktuelle valg. Hvis hvert objekt i valget implementerer den angivne klasse eller grænseflade, evalueres udtrykket som true.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dette element bruges til at evaluere attributtilstanden for hvert objekt i det aktuelle valg. Hvis hvert objekt i valget har den angivne attributtilstand, evalueres udtrykket som true. For at evaluere denne type udtryk skal hvert objekt i valget implementere eller tilpasse dig grænsefladen org.eclipse.ui.IActionFilter.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Dette element bruges til at evaluere tilstanden for plugin. Tilstanden for plugin kan være en af følgende: installed (svarer til OSGi-konceptet "resolved") eller activated (svarer til OSGi-konceptet "active").



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dette element bruges til at evaluere tilstanden for visse systemegenskaber. Egenskabsværdien hentes fra java.lang.System.



Det følgende er et eksempel på et funktionssæt (bemærk underelementerne og den måde, attributterne benyttes på):

    

<extension point =

"org.eclipse.ui.actionSets"

>

<actionSet id=

"com.xyz.actionSet"

label=

"My Actions"

>

< menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

<separator name=

"option1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

style=

"toggle"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/group1"

icon=

"icons/runXYZ.gif"

tooltip=

"Run XYZ Tool"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

enablesFor=

"1"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

<action id=

"com.xyz.runABC"

label=

"&amp;Run ABC Tool"

style=

"push"

menubarPath=

"com.xyz.xyzMenu/group1"

toolbarPath=

"Normal/XYZ"

icon=

"icons/runABC.gif"

tooltip=

"Run ABC Tool"

helpContextId=

"com.xyz.run_abc_action_context"

retarget=

"true"

allowLabelUpdate=

"true"

>

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<not>

<objectState name=

"extension"

value=

"java"

/>

</not>

</and>

</enablement>

</action>

<action id=

"com.xyz.runDEF"

label=

"&amp;Run DEF Tool"

style=

"radio"

state=

"true"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runDEF.gif"

tooltip=

"Run DEF Tool"

class=

"com.xyz.actions.RunDEF"

helpContextId=

"com.xyz.run_def_action_context"

>

</action>

<action id=

"com.xyz.runGHI"

label=

"&amp;Run GHI Tool"

style=

"radio"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runGHI.gif"

tooltip=

"Run GHI Tool"

class=

"com.xyz.actions.RunGHI"

helpContextId=

"com.xyz.run_ghi_action_context"

>

</action>

<action id=

"com.xyz.runJKL"

label=

"&amp;Run JKL Tool"

style=

"radio"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runJKL.gif"

tooltip=

"Run JKL Tool"

class=

"com.xyz.actions.RunJKL"

helpContextId=

"com.xyz.run_jkl_action_context"

>

</action>

</actionSet>

</extension>

I eksemplet ovenfor er det angivne funktionssæt med navnet "My Actions" ikke først synligt inden for hvert enkelt perspektiv, fordi attributten visible ikke er angivet.

XYZ-funktionen vises som afkrydsningsfelt (menupunkt), der ikke først er valgte. Den aktiveres kun, hvis valgtællingen er 1, og hvis valget indeholder en Java-filressource.

ABC-funktionen vises både på menuen og på værktøjslinjen. Den aktiveres kun, hvis valget ikke indeholder nogen Java-filressourcer. Bemærk også, at dette er en etiket-retarget-funktion, derfor leverer den ikke en class-attribut.

Funktionerne DEF, GHI og JKL vises som valgknapper (menupunkter). De aktiveres hele tiden, uafhængigt af den aktuelle valgtilstand.

Værdien for class-attributten skal være et fuldstændigt navn på en klasse, der implementerer org.eclipse.ui.IWorkbenchWindowActionDelegate eller org.eclipse.ui.IWorkbenchWindowPulldownDelegate. Den sidstnævnte skal implementeres i de tilfælde, hvor attributten style har værdien pulldown. Denne klasse er den behandler, der er ansvarlig for at udføre funktionen. Hvis attributten retarget er true, ignoreres denne attribut og skal ikke leveres. Denne klasse indlæses så sent som muligt for at undgå, at hele plugin indlæses, før det er nødvendigt.

Aktiveringskriterierne for en funktionsudvidelse defineres først af enablesFor og også af enten selection eller enablement. Men når der er oprettet en forekomst af den funktionsdelegerede, kan den styre aktiveringstilstanden direkte i metoden selectionChanged.

Bemærk, at arbejdsbænken ikke genererer menuer på en plugins vegne. Menustier skal referere til menuer, der allerede findes.

Funktions- og menuetiketter kan indeholde specialtegn, der koder valgbogstaver ved hjælp af følgende regler:

  1. Valgbogstaver angives ved hjælp af og-tegnet ('&') foran et valgt tegn i den oversatte tekst. Da og-tegnet ikke kan bruges i XML-strenge, skal du bruge tegnenheden &amp;.
Hvis to eller flere funktioner leveres til en menu eller en værktøjslinje via en enkelt udvidelse, vises funktionerne i omvendt rækkefølge i forhold til den måde, de vises i plugin.xml-filen på. Denne funktionsmåde er ikke-intuitiv. Men den er blevet opdaget, efter at Eclipse Platform API'et er blevet fastfrosset. Hvis funktionsmåden ændres nu, vil det forstyrre de plugin, der anvender den eksisterende funktionsmåde.

Elementerne selection og enablement udelukker gensidigt hinanden. Elementet enablement kan erstatte elementet selection ved brug af underelementerne objectClass og objectState. For eksempel kan følgende:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

udtrykkes ved hjælp af:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

Plugin kan bruge dette udvidelsespunkt til at tilføje nye menuer på øverste niveau. Plugin kan også definere navngivne grupper, som gør det muligt for andre plugin at levere deres funktioner til dem.

Menuer på øverste niveau oprettes ved hjælp af følgende værdier til stiattributten:

Hvis du udelader stiattributten, medfører det, at den nye menu føjes til den tilføjede menulinjegruppe.

Standardgrupperne i arbejdsbænkvinduet defineres i grænsefladen IWorkbenchActionConstants. Disse konstanter kan bruges i kode til dynamisk levering. Værdierne kan også kopieres til en XML-fil til finkornet integrering med de eksisterende menuer og værktøjslinjer på arbejdsbænken.

Forskellige menu- og værktøjslinjepunkter i arbejdsbænkvinduet defineres algoritmisk. I de tilfælde skal der bruges en separat mekanisme til at udvide vinduet. Hvis du f.eks. tilføjer en ny arbejdsbænkoversigt, vises et nyt menupunkt på menuen Perspektiv. Udvidelser til import, eksport og nye guider føjes også automatisk til vinduet.