Handlingssett

org.eclipse.ui.actionSets

Dette utvidelsespunktet blir brukt til å legge til menyer, menypunkter og verktøylinjeknapper i fellesområdene i Arbeidsbenk-vinduet. Disse bidragene kalles med en fellesbetegnelse for et handlingssett og blir vist i Arbeidsbenk-vinduet til brukeren som tilpasser perspektivet.

Det er en implementeringsbegrensning som påvirker handlingssettene. Det er viktig å definere hele menystrukturen som det skal refereres til, innen et handlingssett. Hvis for eksempel et annet handlingssett definerer en meny kalt "eksempel", kan du ikke være sikker på at "eksempel" finnes. Du må omdefinere "eksempel"-menyen i hvert handlingssett som ønsker å bruke den.

Aktiveringen og/eller synligheten til en handling kan defineres ved hjelp av elementene enablement og visibility. Disse to elementene inneholder et boolsk uttrykk som blir evaluert for å bestemme aktiveringen og/eller synligheten.

Syntaksen er den samme for elementene enablement og visibility. Begge inneholder bare ett underelement med et boolsk uttrykk. I sin enkleste form vil dette være et element av typen objectClass, objectState, pluginState eller systemProperty. I mer komplekse tilfeller kan elementene and, or og not kombineres for å danne et boolsk uttrykk. Både and- og or-elementet må inneholde to underelementer. Elementet not kan bare inneholde ett underelement.

<!ELEMENT extension (actionSet+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


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

<!ATTLIST actionSet

id          CDATA #REQUIRED

label       CDATA #REQUIRED

visible     (true | false)

description CDATA #IMPLIED>

Dette elementet blir brukt til å definere en gruppe med handlinger og/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|pulldown) "push"

state            (true | false)

pulldown         (true | false)

class            CDATA #IMPLIED

retarget         (true | false)

allowLabelUpdate (true | false)

enablesFor       CDATA #IMPLIED>

Dette elementet definerer en handling som brukeren kan aktivere i brukergrensesnittet.



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

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Dette elementet blir brukt til å definere en ny meny.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Dette elementet blir brukt til å opprette et menyskilletegn på den nye menyen.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Dette elementet blir brukt til å opprette en navngitt gruppe på den nye menyen. Det har ingen visuell fremstilling på den nye menyen, i motsetning til separator-elementet.



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

Dette elementet blir brukt til å bestemme handlingsaktiveringen basert på det gjeldende valget. Blir ignorert hvis enablement-elementet er oppgitt.



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

Elementet blir brukt til å definere aktiveringen for utvidelsen.



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

Elementet blir brukt til å definere synligheten for utvidelsen.



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

Dette elementet representerer en boolsk AND-operasjon på resultatet av evalueringen av de to underelementuttrykkene.



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

Dette elementet representerer en boolsk OR-operasjon på resultatet av evalueringen av de to underelementuttrykkene.



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

Dette elementet representerer en boolsk NOT-operasjon på resultatet av evalueringen av underelementuttrykkene.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Dette elementet brukes til å evaluere klassen eller grensesnittet for hvert objekt i det gjeldende valget. Hvis hvert objekt i valget implementerer oppgitt klasse eller grensesnitt, blir uttrykket evaluert som "true".



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dette elementet brukes til å evaluere attributtstatusen til hvert objekt i det gjeldende valget. Hvis hvert objekt i valget har den oppgitte attributtstatusen, blir uttrykket evaluert som "true". Hvis du skal evaluere denne typen uttrykk, må hvert objekt i valget implementere, eller tilpasses til, org.eclipse.ui.IActionFilter-grensesnittet.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Dette elementet brukes til å evaluere tilstanden til en plugin-modul. Tilstanden til plugin-modulen kan være en av følgende: installed (tilsvarer OSGi-begrepet "behandlet") eller activated (tilsvarer OSGi-begrepet "aktiv").



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dette elementet brukes til å evaluere tilstanden til en systemegenskap. Egenskapsverdien blir hentet fra java.lang.System.



Nedenfor finner du et eksempel på et handlingssett. (Legg merke til underelementene og måten attributtene blir brukt 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 eksempelet over er ikke det oppgitte handlingssettet, kalt "My Actions", synlig til å begynne med i hver perspektiv, fordi visible-attributtet ikke er oppgitt.

XYZ-handlingen blir vist som et menypunkt i en avmerkingsboks, og det er til å begynne med ikke avmerket. Det blir bare aktivert hvis antall valg er 1 og hvis valget inneholder en Java-filressurs.

ABC-handlingen blir vist både på menyen og på verktøylinjen. Den blir bare aktivert hvis valget ikke inneholder noen Java-filressurser. Legg også merke til at dette er en målskiftehandling for en etikett, og at class-attributtet derfor ikke er oppgitt.

Handlingene DEF, GHI og JKL blir vist som menypunkter med valgknapper. De er alltid aktivert, uavhengig av gjeldende valgstatus.

Verdien av class-attributtet må være det fullt kvalifiserte navnet på en klasse som implementerer org.eclipse.ui.IWorkbenchWindowActionDelegate eller org.eclipse.ui.IWorkbenchWindowPulldownDelegate. Den siste skal implementeres i tilfeller der style-attributtet har verdien pulldown. Denne klassen er behandleren som utfører handlingen. Hvis retarget-attributtet er "true", blir dette attributtet ignorert og skal ikke oppgis. Denne klassen blir lastet inn så sent som mulig for å unngå at hele plugin-modulen lastes inn før det er helt nødvendig.

Aktiveringskriteriene for handlingsutvidelsen er først definert av enablesFor, og i tillegg av enten selection eller enablement. Men når det er opprettet en forekomst av handlingsdelegaten, kan den styre handlingsaktiveringstilstanden direkte i selectionChanged-metoden.

Det er viktig å merke seg at arbeidsbenken ikke genererer menyer på vegne av plugin-moduler. Menybaner må referere til menyer som allerede finnes.

Etiketter for handlinger og menyer kan inneholde spesialtegn som koder bokstavvalg i henhold til disse reglene:

  1. Bokstavvalg oppgis ved å sette et et-tegn ('&') foran det valgte tegnet i den oversatte teksten. Siden et-tegn ikke er tillatt i XML-strenger, kan du bruke tegnet &amp;.
Hvis en utvidelse legger til to eller flere handlinger på en meny eller en verktøylinje, vil handlingene bli vist i omvendt rekkefølge av den de har i plugin.xml-filen. Dette er nok ikke særlig intuitivt, men det ble oppdaget etter at APIen for Eclipse-plattformen var frosset. Hvis denne virkemåten endres nå, ødelegger det for alle plugin-moduler som er avhengig av den eksisterende virkemåten.

Elementene selection og enablement utelukker hverandre. Elementet enablement kan erstatte elementet selection ved å bruke underelementene objectClass og objectState. For eksempel kan følgende:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

uttrykkes med:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

Plugin-moduler kan bruke dette utvidelsespunktet for å legge til nye menyer på øverste nivå. Plugin-moduler kan også definere navngitte grupper der andre plugin-moduler kan legge inn handlinger.

Du oppretter menyer på øverste nivå ved å bruke følgende verdier for baneattributtet:

Hvis baneattributtet utelates, blir den nye menyen lagt til i additions-gruppen på menylinjen.

Standardgruppene i et arbeidsbenkvindu er definert i IWorkbenchActionConstants-grensesnittet. Disse konstanten kan brukes i kode for dynamiske bidrag. Verdiene kan også kopieres til en XML-fil for finkornet integrering med arbeidsbenkens eksisterende menyer og verktøylinjer.

Ulike menypunkter og verktøylinjeelementer i et arbeidsbenkvindu blir definert algoritmisk. I disse tilfellene må en egen mekanisme brukes til å utvide vinduet. Hvis du for eksempel legger til en ny arbeidsbenkvisning, fører det til at det blir vist et nytt menypunkt på Perspektiv-menyen. Import-, Eksport- og Nye veivisere-utvidelser blir også automatisk lagt til i vinduet.