Tevékenységkészletek

org.eclipse.ui.actionSets

Ez a kiterjesztési pont menüket, menüpontokat és eszköztár-gombokat ad hozzá a Munkaterület ablak közös területeihez. Ezeket a hozzáadásokat együttesen tevékenységkészletnek hívjuk, és megjelnnek a Munkaterület ablakban, ha a felhasználó személyre szabja a perspektívát.

Létezik egy megvalósítási korlátozás, amely pillanatnyilag a tevékenységkészleteket befolyásolja. Fontos meghatározni a tevékenységkészleten belülről hivatkozandó teljes menüszerkezetet. Így például, ha egy másik tevékenységkészlet meghatároz egy "példa" nevű menüt, akkor nem lehet a meglévő "példa" menüre támaszkodni. A "példa" menü átdefiniálása szükséges minden tevékenységkészletben, amely használni kívánja azt.

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 legegyszerűbb esetben ez egy objectClass, objectState, pluginState vagy systemProperty elem. Bonyolultabb esetben az and, or és not elemek kombinálhatók egy logikai kifejezés létrehozása érdekében. Az and és or elemnek egyaránt 2 részelemet kell tartalmaznia. A not elem csak 1 részelemet tartalmazhat.

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

Ez az elem egy tevékenység- és/vagy menücsoportot ad meg.



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

Ez az elem egy tevékenységet ad meg, amelyet a felhasználó meghívhat a felhasználói felületen.



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

Az elem létrehoz egy menüelválasztót az új menüben.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Ez az elem az új menüben létrehoz egy megnevezett csoportot. 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 szolgál 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. Ilyen típusú kifejezés kiértékeléséhez a kijelölés minden objektumának meg kell valósítania, vagy adaptálódnia kell az org.eclipse.ui.IActionFilter felülethez.



<!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 a tevékenységkészletre látható példa (figyelje meg a részelemeket, és az attribútumok használatát):

    

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

A fenti példában a "Saját tevékenységek" nevű megadott tevékenységkészlet kezdetben nem látható minden perspektívában, mivel a visible attribútum nincs megadva.

Az XYZ tevékenység jelölőnégyzet menüpontként jelenik meg, és kezdetben nincs bejelölve. Ez csak akkor engedélyezett, ha a kijelölési szám 1, és ha a kiterjesztés tartalmaz Java fájlerőforrásokat.

Az ABC tevékenység a menüben és az eszköztáron is megjelenik. Csak akkor engedélyezett, ha a kijelölés nem tartalmaz Java fájlerőforrásokat. Ne feledje el, hogy ez egy címkeáttervezési tevékenység, azért nem biztosít class attribútumot.

A DEF, GHI és JKL tevékenység választógomb-menüpontként jelenik meg. Ezek az aktuális kijelölési állapottól függetlenül mindig engedélyezve vannak.

A class attribútum értékének az org.eclipse.ui.IWorkbenchWindowActionDelegate vagy org.eclipse.ui.IWorkbenchWindowPulldownDelegate elemet megvalósító osztály teljes képzésű nevének kell lennie. Az utóbbit akkor kell megvalósítani, ha a style attribútum értéke pulldown. Ez az osztály a kezelő, amely a tevékenység végrehajtásáért felelős. Ha a retarget attribútum értéke true, akkor az attribútumot figyelmen kívül kell hagyni és nem biztosítható. 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 tevékenységkiterjesztés engedélyezési feltételeit kezdetben az enablesFor, és a selection vagy enablement elem adja meg. 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.

Fontos megjegyezni, hogy a munkaterület nem állít elő menüket a bedolgozó helyett. A menü elérési utaknak már létező menükre kell mutatniuk.

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 bedolgozók ezen kiterjesztési pontok segítségével adhatnak hozzá új felsőszintű menüket. A bedolgozók megnevezett csoportokat is megadhatnak, amelyekhez más bedolgozók hozzáadhatják a tevékenységeiket.

Felső szintű menük a path attribútum alábbi értékeivel hozhatók létre:

Az elérési út attribútum kihagyása hatására az új menü a kiegészítések menüsor-csoporthoz kerül hozzáadásra.

A munkaterület ablak alapértelmezett csoportjai az IWorkbenchActionConstants felületen vannak megadva. Ezek a konstansok dinamikus közreadások kódjában használhatók. Az értékek az XML fájlba is átmásolhatók a meglévő munkaterület-menükkel és -eszköztárakkal való finoman szabályozható integráció érdekében.

A munkaterület ablak különböző menü- és eszköztárelemei algoritmussal vannak megadva. Ezekben az esetekben egy külön mechanizmust kell használni az ablak kiterjesztéséhez. Új munkaterület nézet hozzáadása hatására egy új menüpont jelenik meg a Perspektíva menüben. Az importálás, exportálás és új varázslók kiterjesztés automatikusan hozzáadásra kerül az ablakhoz.