Menu's, werkbalken en acties van editors

org.eclipse.ui.editorActions

Dit extensiepunt wordt gebruikt om acties toe te voegen aan het menu en de werkbalk van editors die door andere plugins zijn geregistreerd.

De oorspronkelijke geleverde set van een editor wordt door een ander extensiepunt gedefinieerd (org.eclipse.ui.editors). Een set acties wordt door alle instances van hetzelfde editortype gemaakt en gedeeld. Wanneer deze wordt opgeroepen, wordt de actie uitgevoerd op de actieve editor. Dit extensiepunt volgt hetzelfde model. Elke actieextensie wordt door alle instances van hetzelfde editortype gemaakt en gedeeld. Vereist is dat de actieklasse org.eclipse.ui.IEditorActionDelegate implementeert. De actieve editor wordt aan de gemachtigde doorgegeven door het oproepen van IEditorActionDelegate.setActiveEditor.

U kunt het inschakelen of zichtbaar maken van een actie definiëren met de elementen enablement en visibility. Deze twee elementen bevatten een booleaanse expressie die wordt geëvalueerd om de inschakeling en/of zichtbaarheid vast te stellen.

De syntaxis is voor de elementen enablement en visibility dezelfde. Beide bevatten slechts één booleaanse expressie als subelement. In het eenvoudigste geval is dit een element van het type objectClass, objectState, pluginState of systemProperty. In ingewikkelder gevallen kunnen de elementen and, or en not worden gecombineerd tot booleaanse expressie. De elementen and en or moeten twee subelementen bevatten. Het element not mag slechts één subelement bevatten.

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

Dit element wordt gebruikt om een groep editoracties en/of -menu's te definiëren.



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

Met dit element wordt de actie gedefinieerd die de gebruiker in de gebruikersinterface kan oproepen.



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

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Dit element wordt gebruikt om een nieuw menu te definiëren.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Dit element wordt gebruikt om een menuscheidingsteken in het nieuwe menu te maken.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Dit element wordt gebruikt om een benoemde groep in het nieuwe menu te maken. Er is geen visuele voorstelling in het nieuwe menu, in tegenstelling tot het element separator.



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

Dit element wordt gebruikt om vast te stellen of de actie wordt ingeschakeld op basis van de huidige selectie. Wordt genegeerd als het element enablement is opgegeven.



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

Dit element wordt gebruikt om het inschakelen voor de extensie te definiëren.



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

Dit element wordt gebruikt om de zichtbaarheid voor de extensie te definiëren.



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

Dit element is een booleaanse AND-bewerking, de evaluatie van twee subelementexpressies.



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

Dit element is een booleaanse OR-bewerking, de evaluatie van twee subelementexpressies.



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

Dit element is een booleaanse NOT-bewerking, de evaluatie van de subelementexpressies.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Dit element wordt gebruikt om de klasse of interface van alle objecten in de huidige selectie te evalueren. Als ieder object in de selectie de opgegeven klasse of interface implementeert, wordt de expressie als waar (true) beschouwd.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dit element wordt gebruikt om de kenmerkstatus van alle objecten in de huidige selectie te evalueren. Als ieder object in de selectie de opgegeven kenmerkstatus heeft, wordt de expressie als waar (true) beschouwd. Om dit type expressie te evalueren, moet elk object in de selectie de interface org.eclipse.ui.IActionFilter implementeren of eraan aangepast zijn.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Dit element wordt gebruikt om de status van een plugin te evalueren. Een plugin kan een van de volgende statussen hebben: installed (equivalent van het OSGi-concept "resolved") of activated (equivalent van het OSGi-concept "active").



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Dit element wordt gebruikt om de status van een systeemeigenschap te evalueren. De waarde van de eigenschap wordt opgehaald uit java.lang.System.



Dit is een voorbeeld van de extensie editorActions:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"Menu &amp;XYZ"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"XYZ-tool uitvoe&amp;ren"

menubarPath=

"XYZ/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"XYZ-tool uitvoeren"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</editorContribution>

</extension>

In bovenstaand voorbeeld verschijnt de opgegeven actie als selectievakje-optie in het nieuwe toplevelmenu met de naam "Menu XYZ" en als wisselknop in de werkbalk. De actie wordt ingeschakeld als de selectie alleen Java-bestandsresources bevat.

Dit is nog een voorbeeld van de extensie editorActions:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"Menu &amp;XYZ2"

path=

"edit/additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;XYZ2-tool uitvoeren"

menubarPath=

"edit/XYZ2/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"XYZ2-tool uitvoeren"

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>

In bovenstaand voorbeeld verschijnt de opgegeven actie als menuoptie in het submenu "Menu XYZ2" in het toplevelmenu "Bewerken". De actie wordt ingeschakeld als de selectie geen Java-bestandsresources bevat.

Het kenmerk class moet de volledig gekwalificeerde naam zijn van een Java-klasse die org.eclipse.ui.IEditorActionDelegate implementeert. Deze klasse wordt zo laat mogelijk geladen om te voorkomen dat de gehele plugin wordt geladen voordat het nodig is. De methode setActiveEditor wordt iedere keer dat een editor van het opgegeven type wordt geactiveerd, aangeroepen. Slechts een set acties en menu's wordt gemaakt voor alle instances van het opgegeven editortype, onafhankelijk van het aantal editors dat op dat moment in de workbench geopend is.

Dit extensiepunt kan worden gebruikt voor het aanleveren van acties in menu's die eerder door de doeleditor zijn gemaakt. Bovendien kunnen menu's en acties worden aangeleverd aan het workbenchvenster. De ID's voor acties en hoofdgroepen binnen het workbenchvenster worden gedefinieerd in org.eclipse.ui.IWorkbenchActionConstants. Deze worden gebruikt als referentiepunt voor het toevoegen van nieuwe acties. Toplevelmenu's worden gemaakt met behulp van de volgende waarden voor het padkenmerk:

Als dit padkenmerk wordt weggelaten, wordt het nieuwe menu in de menubalkgroep toevoegingen toegevoegd.

Acties en menu's die aan deze paden zijn toegevoegd, worden alleen afgebeeld wanneer de bijbehorende editor actief is. Wanneer de editor wordt gesloten, worden de menu's en acties verwijderd.

De inschakelingscriteria van een actie-extensie worden in eerste instantie gedefinieerd door enablesFor en verder door selection of enablement. Als de gemachtigde van de actie echter is geïnstantieerd, kan deze de inschakelingsstatus van de actie beheren in de methode selectionChanged.

Labels van acties en menu's kunnen speciale tekens bevatten die als keuzeletter fungeren volgens de volgende regels:

  1. Keuzeletters worden opgegeven door het en-teken ('&') voor het geselecteerde teken te plaatsen in de vertaalde tekst. Omdat het en-teken niet is toegestaan in XML-reeksen, moet u de tekencode &amp; gebruiken.
Als er twee of meer acties aan een menu of werkbalk zijn aangeleverd door één extensie, worden de acties afgebeeld in de omgekeerde volgorde van hoe ze in het bestand plugin.xml zijn opgenomen. Dit gedrag werkt niet erg intuïtief. Dit werd echter pas ontdekt nadat geen wijzigingen meer konden worden doorgevoerd in de API van het Eclipse-platform. Als u nu het gedrag wijzigt, levert dit problemen op voor alle plugins die op het bestaande gedrag zijn gebaseerd.

De elementen selection en enablement zijn onderling uitwisselbaar. Het element enablement kan het element selection vervangen als u de subelementen objectClass en objectState gebruikt. De code

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

kan bijvoorbeeld worden gecodeerd als:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

De workbench levert een ingebouwde "Standaard teksteditor". Plugins kunnen bijdragen leveren aan deze standaardeditor of aan editors die door andere plugins zijn geleverd.