Menyer, verktøylinjer og handlinger for redigeringsprogrammer

org.eclipse.ui.editorActions

Dette utvidelsespunktet blir brukt til å legge til handlinger på menyen og verktøylinjen for redigeringsprogrammer som er registrert av andre plugin-moduler.

Det første bidragssettet for et redigeringsprogram er definert av et annet utvidelsespunkt (org.eclipse.ui.editors). Det blir opprettet et enkelt sett med handlinger som deles av alle forekomster av samme type redigeringsprogram. Ved aktivering brukes disse handlingene i det aktive redigeringsprogrammet. Dette utvidelsespunktet følger samme mønster. Hver handlingsutvidelse opprettes og deles av alle forekomster av samme type redigeringsprogram. Handlingsklassen må implementere org.eclipse.ui.IEditorActionDelegate. Det aktive redigeringsprogrammet blir sendt til delegaten ved å aktivere IEditorActionDelegate.setActiveEditor.

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 delelement 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 delelementer. Elementet not kan bare inneholde ett delelement.

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

Dette elementet blir brukt til å definere en gruppe med handlinger og/eller menyer for et redigeringsprogram.



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

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



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

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



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

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



<!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å en handlingsutvidelse for et redigeringsprogram.

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"&amp;XYZ Menu"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"XYZ/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"Run XYZ Tool"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</editorContribution>

</extension>

I eksempelet ovenfor vil den oppgitte handlingen bli vist som et avmerkingsbokselement i den nye menyen på øverste nivå som heter "XYZ Menu", og som en knapp for aktiverings/deaktivering på verktøylinjen. Handlingen blir aktivert hvis valget bare inneholder Java-filressurser.

Nedenfor finner du enda et eksempel på en handlingsutvidelse for et redigeringsprogram.

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"&amp;XYZ2 Menu"

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 eksempelet over blir den oppgitte handlingen vist som et menypunkt på undermenyen "XYZ2 Menu" på øverste nivå på menyen "Rediger". Handlingen blir aktivert hvis valget ikke inneholder Java-filressurser.

Verdien på klasseattributtet må være et fullt kvalifisert navn på en Java-klasse som implementerer org.eclipse.ui.IEditorActionDelegate. Denne klassen blir lastet inn så sent som mulig for å unngå at hele plugin-modulen lastes inn før det er helt nødvendig. Metoden setActiveEditor blir kalt opp hver gang et redigeringsprogram av den oppgitte typen blir aktivert. Det blir bare opprettet ett sett med handlinger og menyer for alle forekomster av den oppgitte redigeringsprogramtypen, uansett hvor mange redigeringsprogramforekomster som for øyeblikket er åpne på arbeidsbenken.

Dette utvidelsespunktet kan brukes til å bidra med handlinger på menyer som tidligere er opprettet av målredigeringsprogrammet. I tillegg kan det legges inn menyer og handlinger i Arbeidsbenk-vinduet. IDene for handlinger og hovedgrupper i Arbeidsbenk-vinduet er definert i org.eclipse.ui.IWorkbenchActionConstants. Disse skal brukes som et referansepunkt når det legges til nye 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.

Handlinger og menyer som legges til i disse banene, blir bare vist når det tilknyttede redigeringsprogrammet er aktivt. Når redigeringsprogrammet lukkes, blir menyer og handlinger fjernet.

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.

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

Arbeidsbenken har et innebygd "Standard tekstredigeringsprogram". Plugin-moduler kan bidra til dette standardredigeringsprogrammet eller redigeringsprogrammer levert av andre plugin-moduler.