Menük, eszköztárak és tevékenységek

org.eclipse.ui.viewActions

Ez a kiterjesztési pont szolgál a más bedolgozók által bejegyzett nézetek legördülő menüjeibe és eszköztáraiba új tevékenységek felvételére. Minden nézetnek van egy saját legördülő menüje, amelyet normál esetben a jobb felső háromszög gombbal lehet előhívni. Más bedolgozók almenükkel és tevékenységekkel bővíthetik ezt a menüt. A bedolgozók hozzáadhatnak tevékenységeket a nézet eszköztárához is. Elsőként a nézetek tulajdonosai tölthetik fel ezeket a területeket. Más bedolgozók kiegészítései hozzáfűzésre kerülnek.

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

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


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

<!ATTLIST viewContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

Ezzel az elemmel adható meg nézettevékenységek és/vagy menük egy csoportja.



<!ELEMENT action (selection* | enablement?)>

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

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>

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 bemutatunk egy példát egy nézet-tevékenységkiterjesztés deklarációjára:

   

<extension point=

"org.eclipse.ui.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"com.xyz.xyzMenu/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>

</viewContribution>

</extension>

A fenti példában a megadott tevékenység csak egyetlen kiválasztást enged (enablesFor attribútum). Ezen felül a kijelölt objektum egy Java fájl erőforrás kell, hogy legyen.

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

   

<extension point=

"org.eclipse.ui.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

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

menubarPath=

"com.xyz.xyzMenu/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>

</viewContribution>

</extension>

A fenti példában a megadott tevékenység egy menüpontként jelenik meg. 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.IViewActionDelegate 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.

Az org.eclipse.ui.IViewActionDelegate felület az org.eclipse.ui.IActionDelegate osztályt bővíti és felvesz egy további metódust, amely lehetővé teszi, hogy a megbízott inicializálja a nézetpéldányt, amelyhez hozzájárul.

Ez a kiterjesztési pont használható a cél nézet által korábban létrehozott menük tevékenységekkel bővítésére. A menüútvonal attribútum kihagyása esetén az új menü vagy tevékenység a legördülő menü legvégére kerül.

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.

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>

Minden nézetnek normális esetben tartalmaz sor elemet a legördülő menüben és a helyi eszköztárban. A további bedolgozók kiegészítései a normál elemek mellé kerülnek felvételre.