Editormenuer, -værktøjslinjer og -funktioner

org.eclipse.ui.editorActions

Dette udvidelsespunkt bruges til at tilføje funktioner til menuen og værktøjslinjen for editorer, der er registreret af andre plugins.

Det indledende bidragssæt for en editor er defineret af et andet udvidelsespunkt (org.eclipse.ui.editors). Et sæt af funktioner oprettes og deles af alle forekomster af samme editortype. Når disse funktioner startes, fungerer de på den aktive editor. Dette udvidelsespunkt følger samme mønster. Alle funktionsudvidelser oprettes og deles af alle forekomster af samme editortype. Funktionsklassen kræves for at implementere org.eclipse.ui.IEditorActionDelegate. Den aktive editor overføres til den delegerede ved at starte IEditorActionDelegate.setActiveEditor.

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 (editorContribution+)>

<!ATTLIST-udvidelse

point CDATA #REQUIRED

id    CDATA #IMPLIED

navn  CDATA #IMPLIED>


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

<!ATTLIST editorContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

Dette element bruges til at definere en gruppe editorfunktioner 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) "push"

state         (true | false)

class         CDATA #REQUIRED

enablesFor    CDATA #IMPLIED

actionID      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

navn  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

navn  CDATA #REQUIRED

value CDATA #REQUIRED>

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



Her er et eksempel på et udvidelsespunkt til en editorfunktion:

   

<udvidelsespunkt=

"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 ovenstående eksempel bliver den angivne funktion vist som et afkrydsningsfelt i den nye menu på øverste niveau, der har navnet "XYZ-menu", og som en aktivér/deaktivér-knap på værktøjslinjen. Funktionen aktiveres, hvis valget kun indeholder Java-filressourcer.

Her er et andet eksempel på et udvidelsespunkt til en editorfunktion:

   

<udvidelsespunkt=

"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;Udfør XYZ2-værktøj"

menubarPath=

"Redigér/XYZ2/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"Udfør XYZ2-værktøj"

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 ovenstående eksempel bliver den angivne funktion vist som et menupunkt på menuen "XZY2-menu", der er en undermenu til menuen "Redigér" på øverste niveau. Funktionen aktiveres, hvis valget ikke indeholder nogen Java-filressourcer.

Værdien af klasseattributten skal være et fuldstændigt navn på en Java-klasse, der implementerer org.eclipse.ui.IEditorActionDelegate. Denne klasse indlæses så sent som muligt for at undgå, at hele plugin indlæses, før det er nødvendigt. Metoden setActiveEditor kaldes, hver gang en editor af den angivne type aktiveres. Der oprettes kun ét sæt funktioner og menuer for alle forekomster af den angivne editortype, uanset hvor mange editorforekomster der er åbnet på arbejdsbænken.

Udvidelsespunktet kan bruges til at tilføre funktioner til menuer, der tidligere er oprettet af måleditoren. Desuden kan der tilføjes menuer og funktioner til arbejdsbænksvinduet. Id'erne til funktioner og større grupper i arbejdsbænksvinduet defineres i org.eclipse.ui.IWorkbenchActionConstants. Disse skal anvendes som referencepunkt ved tilføjelse af nye funktioner. 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.

Funktioner og menuer, der tilføjes i disse stier, vises kun, mens den tilknyttede editor er aktiv. Når editoren lukkes, fjernes menuer og funktioner.

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.

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>

Arbejdsbænken indeholder en indbygget "standardteksteditor". Plugins kan bidrage til denne standardeditor eller editorer, leveret af andre plugins.