Szerkesztőmenük, eszköztárak és tevékenységek

org.eclipse.ui.editorActions

Ez a kiterjesztési pont szolgál a más bedolgozók által bejegyzett szerkesztők legördülő menüjeibe és eszköztáraiba új tevékenységek felvételére.

A szerkesztők kezdeti hozzáadott halmazát egy másik kiterjesztési pont (org.eclipse.ui.editors) határozza meg. Egy tevékenységhalmaz jön létre és ezen osztozik az összes ugyanolyan típusú szerkesztő. Meghívás esetén ezek a tevékenységek az aktív szerkesztőn kerülnek végrehajtásra. Ez a kiterjesztési pont ugyanezt a mintát követi. Minden egyes tevékenységkiterjesztésen, ami létrejön, osztozik az összes ugyanolyan típusú szerkesztő. A tevékenységosztálynak meg kell valósítania az org.eclipse.ui.IEditorActionDelegate felületet. Az aktív szerkesztő az IEditorActionDelegate.setActiveEditor meghívásával kerül átadásra a megbízottnak.

Egy tevékenység engedélyezését vagy láthatóságát az enablement és visibility elemekkel lehet megadni. E két elem egy logikai kifejezést tartalmaz, amelyek kiértékelve meghatározzák az engedélyezést és/vagy láthatóságot.

Az enablement és visibility elemek szintaxisa ugyanaz. Mindkettő egyetlen logikai kifejezés részelemet tartalmazhat. A legegyserűbb esetben ez egy objectClass, objectState, pluginState vagy systemProperty elem. Bonyolultabb esetben az and, or és not elemek is felhasználhatók egy összetettebb logikai kifejezés létrehozására. Az and és or elemek két részelemet kell, hogy tartalmazzanak. A not elem csak egy részelemet tartalmazhat.

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

Ezzel az elemmel adható meg szerkesztőtevékenységek és/vagy menük egy csoportja.



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

Ez az elem a felhasználói felületről a felhasználó által meghívható tevékenységet adja meg.



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

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Ez az elem szolgál egy új menü meghatározására.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Ez az elem szolgál az új menü egy elválasztójának létrehozására.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Ez az elem szolgál az új menü egy megnevezett csoportjának létrehozására. Az új menüben látható módon nem jelenik meg (szemben a separator elemmel).



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

Ez az elem segít annak meghatározásában, milyen tevékenység legyen engedélyezve az aktuális kiválasztás alapján. Figyelmen kívül marad, ha az enablement elem meg van adva.



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

Ez az elem szolgál a kiterjesztés engedélyezésének meghatározására.



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

Ez az elem szolgál a kiterjesztés láthatóságának meghatározására.



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

Az elem egy logikai AND műveletet ábrázol a két részelemként kiértékelt kifejezés eredményén.



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

Az elem egy logikai OR műveletet ábrázol a két részelemként kiértékelt kifejezés eredményén.



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

Az elem egy logikai NOT műveletet ábrázol a részelemként kiértékelt kifejezés eredményén.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Ez az elem használatos az aktuális kijelölésben szereplő egyes objektumok osztályainak vagy felületeinek kiértékelésére. A kifejezés értéke akkor igaz, ha a kijelölés minden egyes objektuma megvalósítja az adott osztályt vagy felületet.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Ez az elem használatos az aktuális kijelölésben szereplő egyes objektumok attribútumállapotainak kiértékelésére. A kifejezés értéke akkor igaz, ha a kijelölés minden egyes objektuma egy adott attribútumállapottal bír. Az ilyen típusú kifejezések kiértékeléséhez a kijelölés minden egyes objektumának meg kell valósítania (vagy alkalmazkodnia kell) az org.eclipse.ui.IActionFilter felületet.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Ez az elem szolgál egy bedolgozó állapotának kiértékelésére. A bedolgozó állapota az alábbi lehet: telepített ("feloldott" OSGi állapotnak felel meg) vagy aktivált ("aktív" OSGi állapotnak felel meg).



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Ez az elem szolgál bizonyos rendszertulajdonságok állapotának kiértékelésére. A tulajdonság értéke a java.lang.System helyről kerül lekérésre.



Az alábbiakban bemutatunk egy példát egy nézetszerkesztő-tevékenységkiterjesztés deklarációjára:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"&amp;XYZ menü"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp; XYZ eszköz futtatása"

menubarPath=

"XYZ/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"XYZ eszköz futtatása"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</editorContribution>

</extension>

A fenti példában a megadott tevékenység egy jelölőnégyzet-elemként jelenik meg az új, "XYZ menü" nevű, felső szintű menüben, valamint váltókapcsolóként az eszköztárban. A tevékenység akkor engedélyezett, ha a kijelölés csak Java fájl erőforrásokat tartalmaz.

Az alábbiakban bemutatunk még egy példát egy nézetszerkesztő-tevékenységkiterjesztés deklarációjára:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"&amp;XYZ2 menü"

path=

"edit/additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp; XYZ2 eszköz futtatása"

menubarPath=

"edit/XYZ2/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"XYZ2 eszköz futtatása"

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>

A fenti példában a megadott tevékenység egy menüelemként jelenik meg a felső szintű "Szerkesztés" menü "XYZ2 menü" nevű almenüjében. A tevékenység akkor engedélyezett, ha a kijelölés nem tartalmaz Java fájl erőforrásokat.

A class attribútum értéke az org.eclipse.ui.IEditorActionDelegate felületet megvalósító Java osztály teljes képzésű neve kell, hogy legyen. Ez az osztály a lehető legkésőbb töltődik be, hogy ne kelljen a teljes bedolgozót betölteni addig, amíg nem feltétlenül szükséges. A setActiveEditor metódus minden egyes alkalommal meghívásra kerül, amikor az adott típusú szerkesztő aktiválódik. Az adott szerkesztőtípushoz csak egy tevékenység- és menühalmaz készül, függetlenül attól, hogy a szerkesztő hány példánya van megnyitva a munkaterületen.

Ez a kiterjesztési pont használható a cél szerkesztő által korábban létrehozott menük tevékenységekkel bővítésére. Ezenfelül a munkaterület ablaka is bővíthető menükkel és tevékenységekkel. A munkaterület ablak tevékenységeinek és főbb csoportjainak azonosítói az org.eclipse.ui.IWorkbenchActionConstants helyen vannak meghatározva. Ezek szolgálnak referenciaként az új tevékenységek elhelyezéséhez. Felső szintű menük a path attribútum alábbi értékeivel hozhatók létre:

Az útvonalattribútum kihagyása esetén az új menü a menüsorcsoport legvégére kerül.

Az ezen útvonalakba felvett tevékenységek és menük csak akkor jelennek meg, ha a hozzájuk tartozó szerkesztő aktív. A szerkesztő bezárása esetén a menük és tevékenységek is eltávolításra kerülnek.

A tevékenységkiterjesztés engedélyezési feltételeket kezdetben az enablesFor határozza meg, valamint vagy a selection vagy az enablement. Miután azonban a tevékenység megbízottja példányosításra került, az közvetlenül is vezérelheti az állapotot a saját selectionChanged metódusával.

A tevékenységek és a menücímkék hívóbetűket kódoló speciális karaktereket is tartalmazhatnak, az alábbi szabályoknak megfelelően:

  1. A hívóbetűket úgy lehet megadni, hogy egy '&' (és-jel) karaktert kell írni a lefordított szöveg megfelelő karaktere elé. Mivel XML karaktersorozatokban az és-jel nem engedélyezett, használja a &amp; kódot.
Ha egy kiterjesztés két vagy több tevékenységgel bővíti a menüt vagy eszköztárat, akkor a tevékenységek a plugin.xml fájlban felsorolthoz képest pont fordítva jelennek meg. Ez a viselkedés kétségkívül szerencsétlen. Ezt azonban az Eclipse API rögzítése után fedeztük fel. Ha most megváltoztatjuk a viselkedést, akkor tönkreteszünk minden olyan bedolgozót, amelyik a meglévő viselkedésen alapul.

A selection és enablement elemek kölcsönösen kizárják egymást. Az enablement helyettesítheti a selection elemet az objectClass és objectState részelemek használatával. Például az alábbi kód:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

kifejezhető így is:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

A munkaterületnek része egy beépített "Alapértelmezett szövegszerkesztő". A bedolgozók hozzátehetnek ehhez az alapértelmezett szerkesztőhöz, vagy a más bedolgozók által biztosított szerkesztőkhöz.