Med hjälp av den här utökningspunkten kan insticksprogramsutvecklare definiera menyer, avgränsare, logiska grupper och menyalternativ i hela tillämpningen, från statusrader till kontextmenyer. Det är även möjligt att definiera uppsättningar av sådana tillägg (dvs. åtgärdsuppsättningar). De här åtgärdsuppsättningarna kan aktiveras och avaktiveras av slutanvändaren. Sammanfattningsvis innehåller menyutökningspunkten alla visningselement (utom ikonerna) för tillägg i menyer eller trimningsområden i Eclipse.
Varje element i utökningspunkten har ett unikt ID. På så vis kan de elementen refereras till på andra platser objekt utan att elementet måste upprepas. Till exempel kan ID:t krävas för sortering eller definition av en åtgärdsuppsättning. Det gör det även möjligt för utvecklare av tredjepartsinsticksprogram att placera elementen på valfria platser i gränssnittet.
Obs! För 3.2 är den del som gäller trimningstillägg den enda delen av den här utökningsmekanismen som har implementerats. Försök att lägga till objekt, menyer, verktygsfält eller statusradsobjekt ger resultatet NO-OP.
<!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>
Ett objekt kan vara ett menyalternativ eller ett trimningobjekt, beroende på var det placeras. Den text och den bild som är associerade med objektet tas från kommandot.
org.eclipse.ui
kallas org.eclipse.ui.item1
.<!ELEMENT menu (location* , visibleWhen?)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #IMPLIED>
En meny kan visas antingen kopplad till ett verktygsobjekt eller någonstans på en vymeny eller kontextmeny eller i menyfältet på den översta nivån. Insticksprogramsutvecklaren kan, utan kostnad, anta att det finns ett menyfält och verktygsfält för varje vy och att menyfältet på den översta nivån finns. Kontextmenyer måste registreras programmeringsbaserat innan de kan användas (se API-information).
En meny kan bara innehålla grupper.
org.eclipse.ui
kallas org.eclipse.ui.menu1
.<!ATTLIST group
id CDATA #REQUIRED
separatorsVisible (true | false) "true">
En logisk grupp. Den kan vara antingen synlig (till exempel anges avgränsare före och efter, enligt behov) eller osynlig. Som standard är logiska grupper synliga.
En grupp kan innehålla menyer, objekt och andra grupper.
org.eclipse.ui
kallas org.eclipse.ui.group1
.<!ELEMENT widget (location* , class? , visibleWhen? , layout?)>
<!ATTLIST widget
id CDATA #REQUIRED
class CDATA #REQUIRED>
Ett meny- eller trimningselement som har direkt åtkomst till gränssnittskontroller. Det kan till exempel användas till att skapa en kombinationsruta. Tyvärr innebär det att om ett gränssnittskontrollselement blir synligt i användargränssnittet leder det till att insticksprogrammet läses in. Använd det här elementet med urskiljning eftersom det kan orsaka prestandaproblem. Det orsakar även problem med till exempel makrofunktioner, skript och de flesta andra kommandobaserade mekanismer. När gränssnittskontrollen används som trimning orsakar den bara att insticksprogrammet läses in när det visas i användargränssnittet.
org.eclipse.ui
kallas org.eclipse.ui.widget1
.IWorkbenchWidget
. Klienter kan välja att använda standardimplementeringen, AbstractWorkbenchTrimWidget
. Den här implementeringen hanterar metoden 'init' och cachelagrar resultatet för användning via metoden getWorkbenchWindow
.<!ELEMENT layout EMPTY>
<!ATTLIST layout
fillMajor (true | false)
fillMinor (true | false) >
Det här elementet kan användas till att ange olika layoutalternativ för element som lagts till på trim
-platser.
false
.false
.<!ELEMENT location (order? , (bar | part | popup))>
<!ATTLIST location
mnemonic CDATA #IMPLIED
imageStyle CDATA #IMPLIED>
En plats där en meny
, en grupp
, ett objekt
eller en gränssnittskontroll
kan visas. Det här elementet används till att kontrollera platsspecifik information.
<!ELEMENT bar EMPTY>
<!ATTLIST bar
type (menu|trim)
path CDATA #IMPLIED>
Ett lövelement på en plats. Det kan vara menyfältet eller trimningsområdet. Om det inte har något värde betyder det att det är menyfältet eller trimningen på översta nivån. Om värdet är ett delelement
betyder det att det är menyn eller trimningen för den delen.
meny
eller trimning
. Om tillägget görs på menyn blir det ett underordnat objekt till en gränssnittskontrollsstruktur. I allmänhet innebär det att det inte är någon poäng med att använda gränssnittskontrollselement och att det inte är helt nödvändigt med ikoner för objektkommandon. Standardvärdet är menu
.
Vid tillägg till trimningen
krävs vanligen inte ett kommando eller en ikon för fältet. En gränssnittskontroll som visar trimningsinformationen bör läggas till.
Inom trimningen definieras fem allmänna grupper i arbetsmiljön som motsvarar olika positioner i fönstret:
vertical1
i arbetsmiljön.'/'
som avgränsningstecken.<!ATTLIST class
class CDATA #REQUIRED>
Ett klasselement som fungerar med tolkningssyntaxen för den körbara utökningen för både gränskontrollselement
och dynamiska
element.
IExecutableExtension
.<!ELEMENT visibleWhen (not | or | and | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>
<!ATTLIST visibleWhen
checkEnabled (true | false) "false">
Kontrollerar synligheten för det angivna elementet.
true
ska det inte finnas några underordnade element. Kontrollerar bara om kommandot är i aktiverat läge och gör motsvarande element synligt om kommandot är aktiverat.<!ATTLIST part
id CDATA #IMPLIED
class CDATA #IMPLIED>
Ett element på en plats. Det här gör det möjligt att hänvisa till en viss del i arbetsmiljön från platsen. Det kan vara antingen en vy eller ett redigerare. I kvalificeringen kan antingen klassnamnet för delen (inklusive arv) eller ID:t för vyn eller redigeraren användas.
Endast ett av attributen id
eller class
kan anges.
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name CDATA #REQUIRED
value CDATA #REQUIRED>
En parameter antingen till en körbar utökning eller ett kommando - bereonde på var i utökningen den visas.
<!ELEMENT order EMPTY>
<!ATTLIST order
position (start|end|before|after)
relativeTo CDATA #IMPLIED>
Kontrollerar positionen för en meny, en grupp, ett objekt eller en gränssnittskontroll på en viss plats.
Följande värden kan anges för attributet: start
(placera elementet i början av behållaren), end
(placera elementet i slutet av behållaren), after
(placera elementet efter det element på samma nivå vars ID överensstämmer med ref
) och before
(placera elementet före ett element på samma nivå vars ID överensstämmer med ref
). Relativ ordningsföljd kan användas för alla typer av menyelement.
Om en konflikt uppstår används en slumpmässig ordningsföljd. Vid en konflikt är den enda garantin att ordningsföljden inte ändras så länge följande gäller:
position
är before
eller after
.<!ELEMENT popup EMPTY>
<!ATTLIST popup
id CDATA #IMPLIED
path CDATA #IMPLIED>
Del av en plats. Det anger att menyn, gruppen, objektet eller gränssnittskontrollen ska visas i listrutan.
<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Ett allmänt rotelement. Elementet kan användas i en utökningspunkt till att definiera enablement-uttrycket för den. De underordnade objekten till ett enablement-uttryck kombineras med hjälp av operatorn and.
<!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>
Elementet representerar ett NOT-uttryck för resultatet från utvärderingen av underelementsuttrycken.
<!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Det här elementet representerar en AND-åtgärd för resultatet från utvärderingen av underelementuttrycken.
<!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
Det här elementet representerar en OR-åtgärd för resultatet från utvärderingen av underelementuttrycken.
<!ELEMENT instanceof EMPTY>
<!ATTLIST instanceof
value CDATA #REQUIRED>
Elementet används till att göra en instanceof-kontroll av det aktuella objektet. Uttrycket returnerar EvaluationResult.TRUE om objektstypen är en undertyp till den typ som angavs av attributvärdet. I annat fall returneras EvaluationResult.FALSE.
<!ELEMENT test EMPTY>
<!ATTLIST test
property CDATA #REQUIRED
args CDATA #IMPLIED
value CDATA #IMPLIED>
Elementet används till att utvärdera egenskapsläget för det aktuella objektet. Uppsättningen egenskaper som kan testas kan utökas med hjälp av utökningspunkten för egenskapstestfunktionen. Testuttrycket returnerar EvaluationResult.NOT_LOADED om den aktuella egenskapstestfunktionen inte har lästs in ännu.
<!ELEMENT systemTest EMPTY>
<!ATTLIST systemTest
property CDATA #REQUIRED
value CDATA #REQUIRED>
Testar en systemegenskap genom att anropa metoden System.getProperty method och jämför resultatet med det värde som angetts via värdeattributet.
<!ELEMENT equals EMPTY>
<!ATTLIST equals
value CDATA #REQUIRED>
Elementet används till att göra en equals-kontroll av det aktuella objektet. Uttrycket returnerar EvaluationResult.TRUE om objektet är detsamma som det värde som tillhandahålls av attributvärdet. I annat fall returneras EvaluationResult.FALSE.
<!ELEMENT count EMPTY>
<!ATTLIST count
value CDATA #REQUIRED>
Elementet används till att testa antalet element i samlingen.
<!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST with
variable CDATA #REQUIRED>
Det här elementet ändrar det objekt som ska kontrolleras för alla underordnade element till det objekt som refereras till av den angivna variabeln. Om variabeln inte kan lösas returnerar uttrycket ExpressionException när det utvärderas. De underordnade objekten till ett with-uttryck kombineras med hjälp av operatorn and.
<!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST resolve
variable CDATA #REQUIRED
args CDATA #IMPLIED>
Det här elementet ändrar det objekt som ska kontrolleras för alla underordnade element till det objekt som refereras till av den angivna variabeln. Om variabeln inte kan lösas returnerar uttrycket ExpressionException när det utvärderas. De underordnade objekten till ett with-uttryck kombineras med hjälp av operatorn and.
<!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST adapt
type CDATA #REQUIRED>
Det här elementet används till anpassa det aktuella objektet till den typ som angavs av attributtypen. Uttrycket returneras som inte inläst om adaptern eller den refererade typen inte har lästs in än. Det returnerar ett ExpressionException under utvärdering om samma typnamn inte finns alls. De underordnade objekten till ett adapt-uttryck kombineras med hjälp av operatorn and.
<!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>
<!ATTLIST iterate
operator (or|and) >
Det här elementet används till att räkna stegvis över en variabel som är av typen java.util.Collection. Om det aktuella objektet inte är av typen java.util.Collection returneras ExpressionException när uttrycket utvärderas.
En allmän menydefinition ser ut på följande sätt.
<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>
I det här exemplet lägger insticksprogramsutvecklaren till i alla delar som är underklass till eller implementerar den angivna typen. Det gör till exempel att vissa tillägg kan göras i alla textredigerare.
<menu id=
"com.mycompany.myplugin.textEditorMenu"
label=
"Textkommandon"
>
<location mnemonic=
"X"
>
<part class=
"AbstractTextEditor"
>
<popup id=
"#RulerContext"
path=
"rest"
/>
</part>
</location>
</menu>
Det går att koppla hjälp till en meny.
<menu id=
"com.mycompany.myplugin.RunWithConfigurationAction"
label=
"Kör med konfiguration"
helpContextId=
"run_with_configuration_context"
>
<location>
<bar />
</location>
</menu>
Det går att definiera logiska grupper på en meny. De här logiska grupperna kan vara antingen synliga (till exempel anges avgränsare före och efter, enligt behov) eller osynliga. Som standard är logiska grupper synliga.
<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>
Det går att placera menyer, grupper, objekt och gränssnittskontroller på flera platser.
<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>
Om listruteelementet anges utan ID och överordnat delelement används det i alla kontextmenyer som registreras i arbetsmiljön. Det här fungerar på liknande sätt som de tidigare objektstilläggen. På liknande sätt påverkar ett listruteelement på översta nivån med ett ID alla kontextmenyer som registrerats med det angivna namnet.
<item id=
"com.mycompany.myplugin.ObjectContribution"
commandId=
"com.mycompany.myplugin.ObjectContribution"
>
<location>
<popup path=
"additions"
/>
</location>
</item>
Ibland kanske du vill kontrollera synligheten för ett objekt. Även om det vanligen är bäst att upprätthålla stabilitet i layouten för menyer och verktygsfält kan det ibland vara önskvärt att dölja objekt som inte är direkt relevanta för sammanhanget. Det gäller i synnerhet för kontextmenyer, där utrymmet är begränsat. I sådana fall kan du definiera ett visibleWhen
-element. Det elementet är nästan identiskt med elementen activeWhen
och enabledWhen
som definieras i hanterarutökningspunkten.
<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=
"inställning"
>
<iterate operator=
"and"
>
<not>
<instanceof value=
"IWatchExpression"
/>
</not>
<instanceof value=
"IExpression"
/>
</iterate>
</with>
</visibleWhen>
</item>
Vanligen görs helt enkelt något synligt när hanteraren aktiveras. Det hanteras med ett visst mått av sockrad syntax. Det finns ett checkEnabled
-attribut för visibleWhen
-elementet.
<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>
I alla objekt som är kopplade till ett kommando kan parametervärden ingå. Om parametern för det angivna ID:t inte är definierat är det ett fel. Om objektet inte har något kommando är även det ett fel.
<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>
Det går att ange relativ ordningsföljd. Det gör du genom att använda sorteringsattributet för platselementet. Följande värden kan anges för sorteringsattributet: start
(placera elementet i början av behållaren), end
(placera elementet i slutet av behållaren), after
(placera elementet efter det element på samma nivå vars ID överensstämmer med ref
) och before
(placera elementet före ett element på samma nivå vars ID överensstämmer med ref
). Relativ ordningsföljd kan användas för alla typer av menyelement.
<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>
Om du vill ha direkt åtkomst till gränssnittskontrollerna (till exempel för att skapa en kombinationsruta) kan du använda ett widget
-element. Tyvärr innebär det att om ett gränssnittskontrollselement blir synligt i användargränssnittet leder det till att insticksprogrammet läses in.
<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>
Du kan även använda gränssnittskontroller till att lägga till objekt i arbetsmiljötrimningen. I följande exempel definieras en ny HeapStatus-gränssnittskontroll som bör placeras, som standard, direkt efter statusradstrimningen (dvs. längst ned i arbetsmiljöfönstret). Mer information om fördefinierade grupper finns i beskrivningen till element 'bar'.
Lägg märke till att trimningsgrupper kan flyttas till andra trimningsområden. Med relativeTo
för platsinformationen antas att den grupp som referensen gäller finns på sin standardplats när platsen för den nya trimningen anges. I allmänhet förväntas att bidragare av den här typen skapar sin egen grupp som värd för den nya gränssnittskontrollen, vilket gör det möjligt att flytta trimningselementet oberoende av de andra trimningselementen. En anmärkningsvärt undantag är gruppen status.
<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
.
Copyright (c) 2005 IBM Corporation and others.
All rights reserved. This program and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which accompanies
this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html