Menük

org.eclipse.ui.menus

3.2

Ez a kiterjesztési pont lehetővé teszi a bedolgozófejlesztő számára menük, elválasztók, logikai csoportok és menüpontok meghatározását, amelyek bárhol megjelenhetnek az alkalmazáson belül az állapotsoroktól az előugró menükig. Ezen kívül lehetővé teszi kiegészítések halmazainak (például tevékenységkészletek) meghatározását; ezeket a tevékenységkészleteket a végfelhasználó ki- vagy bekapcsolhatja. Röviden, a menük kiterjesztési pont tartalmazza az összes megjelenítési elemet (az ikonokat kivéve) tetszőleges menü vagy szegélyterület hozzáadásához az Eclipse-ben.

A kiterjesztési ponton belül minden elem egy egyedi azonosítót kap. Ezekre az elemekre bárhonnan lehet hivatkozni az elem újbóli megadása nélkül. Az azonosító szükséges lehet például rendezéshez vagy egy tevékenységkészlet meghatározásához. Ezen kívül lehetővé teszi harmadik féltől származó bedolgozók fejlesztői számára ezen elemek igény szerinti új helyre helyezését a felületen.

MEGJEGYZÉS: 3.2 változat esetén a kiterjesztési mechanizmus csak azon része kerül megvalósításra, amelyhez 'trim' kiegészítések vannak rendelve. Elemek, menük, eszköztárak vagy állapotsor-bejegyzések hozzáadására tett kísérlet NO-OP-ként fog működni.

<!ELEMENT extension (item* , menu* , group* , widget*)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT item (parameter* , location* , visibleWhen?)>

<!ATTLIST item

id        CDATA #REQUIRED

commandId CDATA #REQUIRED

menuId    CDATA #IMPLIED>

Egy elem lehet menüpont vagy szegélyelem, az elhelyezkedéstől függően. Az elemhez társított szöveget és képet a parancs fogja kirajzolni.



<!ELEMENT menu (location* , visibleWhen?)>

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #IMPLIED>

A menü megjelenhet egy eszközelemhez csatlakoztatva, illetve egy nézet menün, előugró menün vagy felső szintű menüsoron belül. A bedolgozó fejlesztője feltételezheti, hogy minden nézethez létezik menü és eszköztár valamint a felső szintű menüsor. Az előugró menüket a programból kell regisztrálni használatba vételük előtt (lásd: API információk).

Egy menü csak csoportokat tartalmazhat.



<!ELEMENT group (location*)>

<!ATTLIST group

id                CDATA #REQUIRED

separatorsVisible (true | false) "true">

Egy logikai csoport. Ez lehet látható (például az elválasztók igény szerint megrajzolhatók az elemek elé és mögé) vagy láthatatlan. A logikai csoportok alapértelmezésben láthatók.

Egy csoport menüket, elemeket és más csoportokat tartalmazhat.



<!ELEMENT widget (location* , class? , visibleWhen? , layout?)>

<!ATTLIST widget

id    CDATA #REQUIRED

class CDATA #REQUIRED>

Menü- vagy szegélyelemek, amelyek közvetlen hozzáféréssel rendelkeznek a felületi elemekhez. Segítségükkel megjeleníthető például egy legördülő lista. Sajnos ez azt jelenti, hogy a felületi elem láthatóvá válása a felhasználói felületen a bedolgozó betöltéséhez vezet. Ezt az elemet elővigyázatosan használja, mivel teljesítményproblémákat okozhat. Más esetekben is problémákat okozhat, mint például a makrók támogatása, parancsfájlkezelés és számos más parancsalapú mechanizmus. Ha a felületi elemet szegélyelemként használja, akkor a bedolgozó csak akkor kerül betöltésre, amikor a felhasználói felületen láthatóvá válik.



<!ELEMENT layout EMPTY>

<!ATTLIST layout

fillMajor (true | false)

fillMinor (true | false) >

Ez az elem használható különböző elrendezésbeállítások megadására a trim helyekhez adott elemekhez.



<!ELEMENT location (order? , (bar | part | popup))>

<!ATTLIST location

mnemonic   CDATA #IMPLIED

imageStyle CDATA #IMPLIED>

Egy hely, amelyen egy menü, csoport, elem vagy felületi elem megjelenhet. Ez az elem a helyspecifikus információk felügyeletére használható.



<!ELEMENT bar EMPTY>

<!ATTLIST bar

type (menu|trim)

path CDATA #IMPLIED>

Levélelem egy helyen belül. Ez menüsor vagy a szegélyterület lehet. Minősítés nélkül ez a felső szintű menüsort vagy szegélyt jelzi. Ha egy part elem minősíti, akkor ez az adott rész elem menüjét vagy szegélyét jelzi.



<!ELEMENT class (parameter*)>

<!ATTLIST class

class CDATA #REQUIRED>

Végrehajtható fájl kiterjesztés elemzési szintaxist widget és dynamic elemekhez egyaránt támogató osztályelem.



<!ELEMENT visibleWhen (not | or | and | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>

<!ATTLIST visibleWhen

checkEnabled (true | false) "false">

Az adott elem láthatóságát vezérli.



<!ELEMENT part (popup | bar)>

<!ATTLIST part

id    CDATA #IMPLIED

class CDATA #IMPLIED>

Egy elem a helyen belül. Képessé teszi a helyet arra, hogy az egy bizonyos munkaterületrészre hivatkozzon. Ez egy nézet vagy egy szerkesztő lehet. A képesítés használhatja a rész osztálynevét (beleértve az öröklést) vagy hivatkozhat a nézet illetve szerkesztő azonosítójára.

Csak az id vagy class adható meg, mindkettő nem.



<!ELEMENT parameter EMPTY>

<!ATTLIST parameter

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Egy végrehajtható kiterjesztés vagy parancs paramétere -- attól függően, hogy hol jelenik meg a kiterjesztésben.



<!ELEMENT order EMPTY>

<!ATTLIST order

position   (start|end|before|after)

relativeTo CDATA #IMPLIED>

Egy menü, csoport vagy felületi elem pozícióját vezérli egy adott helyen.



<!ELEMENT popup EMPTY>

<!ATTLIST popup

id   CDATA #IMPLIED

path CDATA #IMPLIED>

A hely része. Jelzi, hogy a menünek, csoportnak, elemnek vagy felületi elemnek meg kell-e jelennie az előugró menüben.



<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Általános gyökérelem. Az elem kiterjesztési pontokon belül használható a hozzá tartozó enablement kifejez meghatározására. Az enablement kifejezések leszármazottai az and operátorral kombinálhatók.



<!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>

Ez az elem egy NOT műveletet képvisel a részelemeként kiértékelt kifejezés eredményén.



<!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Ez az elem egy AND műveletet képvisel a részelemeként kiértékelt összes kifejezés eredményén.



<!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

Ez az elem egy OR műveletet képvisel a részelemeként kiértékelt összes kifejezés eredményén.



<!ELEMENT instanceof EMPTY>

<!ATTLIST instanceof

value CDATA #REQUIRED>

Ezzel az elemmel végezhető el a fókuszban lévő objektum instanceof ellenőrzése. A kifejezés az EvaluationResult.TRUE értékkel tér vissza, ha az objektum típusa a value attribútumban megadott típus altípusa. Ellenkező esetben EvaluationResult.FALSE kerül visszaadásra.



<!ELEMENT test EMPTY>

<!ATTLIST test

property CDATA #REQUIRED

args     CDATA #IMPLIED

value    CDATA #IMPLIED>

Ezzel az elemmel értékelhető ki a fókuszban lévő objektum tulajdonságának állapota. A tesztelhető tulajdonságok halmaza a tulajdonságtesztelő kiterjesztési ponton terjeszthető ki. A tesztelési kifejezés EvaluationResult.NOT_LOADED értéket ad vissza, ha a tényleges tesztelést végző tulajdonságtesztelő még nincs betöltve.



<!ELEMENT systemTest EMPTY>

<!ATTLIST systemTest

property CDATA #REQUIRED

value    CDATA #REQUIRED>

Megvizsgál egy rendszertulajdonságot a System.getProperty metódus meghívásával, és összehasonlítja az eredményt a value attribútumban megadott értékkel.



<!ELEMENT equals EMPTY>

<!ATTLIST equals

value CDATA #REQUIRED>

Ezzel az elemmel végezhető el a fókuszban lévő objektum egyenlőségi ellenőrzése. A kifejezés az EvaluationResult.TRUE értékkel tér vissza, ha az objektum egyenlő a value attribútumban megadott értékkel. Ellenkező esetben EvaluationResult.FALSE kerül visszaadásra.



<!ELEMENT count EMPTY>

<!ATTLIST count

value CDATA #REQUIRED>

Ezzel az elemmel vizsgálható megy egy kollekció elemszáma.



<!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST with

variable CDATA #REQUIRED>

Az elem módosítja a leszármazott elemek tekintetében megvizsgálandó objektumot az adott változó által hivatkozott objektumra. Ha a változó nem oldható fel, akkor a kifejezés a kiértékelés során ExpressionException kivételt ad. A with kifejezések leszármazottai az and operátorral kombinálhatók.



<!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST resolve

variable CDATA #REQUIRED

args     CDATA #IMPLIED>

Az elem módosítja a leszármazott elemek tekintetében megvizsgálandó objektumot az adott változó által hivatkozott objektumra. Ha a változó nem oldható fel, akkor a kifejezés a kiértékelés során ExpressionException kivételt ad. A with kifejezések leszármazottai az and operátorral kombinálhatók.



<!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST adapt

type CDATA #REQUIRED>

Ezzel az elemmel adaptálható a fókuszban lévő objektum a type attribútummal megadott típusra. A kifejezés "nincs betöltve" értéket ad vissza, ha a hivatkozott adapter vagy típus még nincs betöltve. ExpressionException kivételt ad a kiértékelés során, ha a típus neve egyáltalán nem létezik. Az adapt kifejezések leszármazottai az and operátorral kombinálhatók.



<!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST iterate

operator (or|and) >

Ezzel az elemmel iterálhatók a java.util.Collection típusú változók. Ha a fókuszban lévő objektum nem java.util.Collection típusú, akkor a kifejezés kiértékelése ExpressionException kivételt ad.



Egy alapvető menümeghatározás a következőképpen néz ki:

<menu id=

"com.mycompany.myplugin.projection"

label=

"%Folding.label"

>

<location mnemonic=

"%Folding.label.mnemonic"

>

<part id=

"AntEditor"

>

<popup id=

"#RulerContext"

path=

"rest"

/>

</part>

</location>

</menu>

Ebben a példában a bedolgozó fejlesztője az összes részt közreadja, amelyek továbbszármaztatják vagy megvalósítják az adott típust. Ez például lehetővé teszi néhány kiegészítés hozzáadását minden szövegszerkesztőhöz.

<menu id=

"com.mycompany.myplugin.textEditorMenu"

label=

"Text Commands"

>

<location mnemonic=

"X"

>

<part class=

"AbstractTextEditor"

>

<popup id=

"#RulerContext"

path=

"rest"

/>

</part>

</location>

</menu>

A menühöz súgót lehet társítani.

<menu id=

"com.mycompany.myplugin.RunWithConfigurationAction"

label=

"Run With Configuration"

helpContextId=

"run_with_configuration_context"

>

<location>

<bar />

</location>

</menu>

Egy menün belül logikai csoportokat lehet meghatározni. Ezek a logikai csoportok lehetnek láthatók (például az elválasztók igény szerint megrajzolhatók az elemek elé és mögé) vagy láthatatlanok. A logikai csoportok alapértelmezésben láthatók.

<group id=

"com.mycompany.myplugin.stepGroup"

>

<location>

<bar path=

"org.eclipse.ui.run"

/>

</location>

</group>

<group id=

"com.mycompany.myplugin.stepIntoGroup"

separatorsVisible=

"false"

>

<location>

<bar path=

"org.eclipse.ui.run"

/>

</location>

</group>

Menük, csoportok, elemek és felületi elemek több helyen is elhelyezhetők.

<item id=

"com.mycompany.myplugin.ToggleStepFilters"

commandId=

"com.mycompany.myplugin.ToggleStepFilters"

>

<location mnemonic=

"%mnemonic"

>

<bar path=

"org.eclipse.ui.run/emptyStepGroup"

/>

</location>

<location>

<part id=

"org.eclipse.debug.ui.DebugView"

>

<bar type=

"trim"

path=

"renderGroup"

/>

</part>

</location>

<location mnemonic=

"%mnemonic"

>

<part id=

"org.eclipse.debug.ui.DebugView"

>

<popup path=

"renderGroup"

/>

</part>

</location>

</item>

Ha az előugró elem id és parent part elem nélkül van megadva, akkor az a munkaterületen regisztrált összes előugró menüre érvényes. Ez hasonló a régi objektumkiegészítések viselkedéséhez. Hasonlóképpen egy azonosítóval rendelkező felső szintű előugró elem az adott névvel regisztrált összes előugró menüre hatással van.

<item id=

"com.mycompany.myplugin.ObjectContribution"

commandId=

"com.mycompany.myplugin.ObjectContribution"

>

<location>

<popup path=

"additions"

/>

</location>

</item>

Bizonyos esetekben szükséges lehet egy elem láthatóságának vezérlése. Míg normális esetben a menük és eszköztárak elrendezésében a stabilitás fenntartása előnyben részesítendő, néhány esetben kívánatos olyan elemek elrejtése, amelyek nem lényegesek azonnal. Ez különösen igaz előugró menük esetén, ahol a terület korlátozott. Ebben az esetben egy visibleWhen elem meghatározása szükséges. Ez az elem majdnem azonos a kezelők kiterjesztési pontban meghatározott activeWhen és enabledWhen elemekkel.

<item id=

"com.mycompany.myplugin.ConvertToWatchExpression"

commandId=

"com.mycompany.myplugin.ConvertToWatchExpression"

>

<location mnemonic=

"%mnemonic"

>

<part id=

"org.eclipse.debug.ui.DebugView"

>

<popup path=

"additions"

/>

</part>

</location>

<visibleWhen>

<with variable=

"selection"

>

<iterate operator=

"and"

>

<not>

<instanceof value=

"IWatchExpression"

/>

</not>

<instanceof value=

"IExpression"

/>

</iterate>

</with>

</visibleWhen>

</item>

A legáltalánosabb eset egy elem láthatóvá tétele, ha annak kezelője engedélyezett. Ez szintaktikai édesítőszerekkel történhet. A visibleWhen elem rendelkezik egy checkEnabled attribútummal.

<item id=

"com.mycompany.myplugin.compareWithPatch"

commandId=

"com.mycompany.myplugin.compareWithPatch"

>

<location mnemonic=

"%mnemonic"

>

<part id=

"MyPart"

>

<popup path=

"additions"

/>

</part>

</location>

<visibleWhen checkEnabled=

"true"

/>

</item>

A parancshoz társított bármely elem tartalmazhat paraméterértékeket. Ha az adott azonosító paramétere nincs meghatározva, KKOE az hibának számít. Ha az elem nem rendelkezik paranccsal, az szintén hiba.

<item id=

"com.mycompany.myplugin.RunHistory"

commandId=

"com.mycompany.myplugin.RunHistory"

>

<location>

<bar path=

"org.eclipse.ui.run"

/>

</location>

<parameter name=

"index"

value=

"1"

/>

</item>

relatív sorrend is megható. Ez általában a hely elem rendezés attribútumának segítségével kerül megvalósításra. A rendezés attribútum a következő értékeket fogadja el: start (elem elhelyezése a tároló elejére); end (elem elhelyezése a tároló végére); after (elem elhelyezése azon testvéreleme után, amely azonosítója megegyezik a ref értékével); és before ( elem elhelyezése azon testvéreleme elé, amely azonosítója megegyezik a ref értékével). A relatív rendezés tetszőleges típusú menüelemre alkalmazható.

<item id=

"com.mycompany.myplugin.MyFirstItem"

commandId=

"com.mycompany.myplugin.MyFirstCommand"

>

<location>

<order position=

"start"

/>

<bar path=

"org.eclipse.ui.run"

/>

</location>

</item>

<item id=

"com.mycompany.myplugin.MySecondItem"

commandId=

"com.mycompany.myplugin.MySecondCommand"

>

<location>

<order position=

"after"

relativeTo=

"com.mycompany.myplugin.MyFirstItem"

/>

<bar path=

"org.eclipse.ui.run"

/>

</location>

</item>

Ha közvetlen hozzáférést igényel a felületi elemekhez (például egy legördülő lista megjelenítéséhez), akkor használhatja a widget elemet. Sajnos ez azt jelenti, hogy a felületi elem láthatóvá válása a felhasználói felületen a bedolgozó betöltéséhez vezet.

<widget id=

"com.mycompany.myplugin.MyComboBoxSimple"

class=

"com.mycompany.myplugin.MyComboBox"

>

<location>

<bar type=

"trim"

path=

"myGroup"

/>

</location>

</widget>

<widget id=

"com.mycompany.myplugin.MyComboBoxParameterized1"

class=

"com.mycompany.myplugin.MyComboBox:a,b,c"

>

<location>

<bar type=

"trim"

path=

"myGroup"

/>

</location>

</widget>

<widget id=

"com.mycompany.myplugin.MyComboBoxParameterized2"

>

<class class=

"com.mycompany.myplugin.MyComboBox"

>

<parameter name=

"list"

value=

"a,b,c"

/>

<parameter name=

"selected"

value=

"c"

/>

<parameter name=

"editable"

value=

"false"

/>

</class>

<location>

<bar type=

"trim"

path=

"myGroup"

/>

</location>

</widget>

Ezen kívül a felületi elemekkel a munkaterület szegélye is kiegészíthető. A következő példa egy új 'HeapStatus' felületi elemet határoz meg, amely alapértelmezésben azonnal az állapotsor szegély után helyezendő el (azaz a munkaterület-ablak alján). Az előre meghatározott csoportokkal kapcsolatos információkért tekintse meg a 'bar' elem leírását.

Ne feledje el, hogy a 'szegélycsoportok' más szegélyterületekre is áthelyezhetők. A helyinformációk relativeTo értéke feltételezi, hogy a hivatkozott csoport az alapértelmezett pozíciójában van az új szegély helyének meghatározásakor. Általánosságban feltételezett, hogy ezen típus közreadói létrehozzák saját csoportjukat a felületi elem kiszolgálása érdekében, lehetővé téve a szegélyelem áthelyezését a többi szegélyelemtől függetlenül. Egy megemlítendő kivétel a 'status' csoport.

   

<extension point=

"org.eclipse.ui.menus"

>

<group id=

"TestTrimAPI.heapStatusGroup"

separatorsVisible=

"true"

>

<location>

<bar type=

"trim"

/>

<order position=

"after"

relativeTo=

"status"

/>

</location>

</group>

<widget class=

"HeapStatusWidget"

id=

"TestTrimAPI.HeapStatus"

>

<location>

<bar path=

"heapStatusGroup"

type=

"trim"

/>

</location>

<layout fillMajor=

"false"

fillMinor=

"true"

/>

</widget>

</extension>

Előugró menü regisztrálásához használja az IWorkbenchPartSite.registerContextMenu metódusokat.