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.
org.eclipse.ui
által közreadott elem például a következőképpen nevezhető el:
org.eclipse.ui.item1
.<!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.
org.eclipse.ui
által közreadott menü például a következőképpen nevezhető el:
org.eclipse.ui.menu1
.<!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.
org.eclipse.ui
által közreadott csoport például a következőképpen nevezhető el:
org.eclipse.ui.group1
.<!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.
org.eclipse.ui
által közreadott felületi elem például a következőképpen nevezhető
el: org.eclipse.ui.widget1
.IWorkbenchWidget
elemet. Az ügyfelek használhatják az alapértelmezett AbstractWorkbenchTrimWidget
megvalósítást.
Ez a megvalósítás kezeli az 'init' metódust és gyorsítótárban tárolja az
eredményeket a getWorkbenchWindow
metóduson keresztüli
használathoz.<!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.
false
.false
.<!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.
menu
vagy
trim
értékek egyike lehet. A menü kiegészítésekor az elemhez szülőként egy
felületi elem szerkezet kerül hozzárendelésre. Általánosságban ennek jelentése az, hogy a
felületi elemek használatának nincs sok értelme, és egy elem parancsához nem szükséges
szigorúan egy ikon. Az alapértelmezett érték a menu
.
Ha a trim
elemhez járul hozzá, akkor általában nincs
szükség parancsokra vagy ikonokra, hanem elég azt egy olyan felületi
elemmel kitölteni, amely megjeleníti a szegélyinformációkat.
A szegélyen belül a munkaterület öt általános csoportot határoz meg, amelyek különböző, ablakok körüli pozícióknak felelnek meg:
vertical1
oldalával szemközt található.'/'
jelet használja elválasztó
karakterként.<!ATTLIST class
class CDATA #REQUIRED>
Végrehajtható fájl kiterjesztés elemzési szintaxist widget
és
dynamic
elemekhez egyaránt támogató osztályelem.
IExecutableExtension
elemként betöltendő osztály.<!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.
true
, akkor nem lehetnek
jelen részelemek. Ez egyszerűen ellenőrzi a parancs engedélyezett állapotát és a
megegyező elemet láthatóvá teszi, ha a parancs engedélyezett.<!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.
Ez az attribútum a következő értékeket fogadja el: start
(elem
elhelyezése a tároló elejére); end
(az elem elhelyezése a tárolójának
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ó.
Ütközés esetén az Eclipse tetszőleges sorrendet fog választani. Csak az garantálja, hogy ütközés esetén a sorrend ugyanaz marad, ha a következők fennállnak:
position
értéke before
vagy after
.<!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>
IWorkbenchPartSite.registerContextMenu
metódusokat.
Copyright (c) 2005 IBM Corporation és mások.
Minden jog fenntartva. Jelen program és annak kísérőanyagai a csomaghoz
tartozó, illetve a
http://www.eclipse.org/legal/epl-v10.html
címen is elérhető Eclipse Public License 1.0 verziójának hatálya alatt lettek
közzétéve.