Vi har sett många åtgärdsbidrag som anger sökvägen till och platsen för deras åtgärd. Låt oss ta en närmare titt på vad dessa sökvägar betyder.
Vi tar först en titt på menysökvägar genom att titta på menyn Hjälp i arbetsmiljön.
Platserna för infogning av nya menyer och menyalternativ definieras med namngivna grupper. Du kan tänka på en namngiven grupp som en plats eller platshållare som gör det möjligt att infoga dina menyobjekt på särskilda platser på en menyrad eller snabbmeny.
Arbetsmiljön definierar alla dess grupplatsnamn i klasserna IWorkbenchActionConstants och IIDEActionConstants. (Två olika klasser används eftersom resursrelaterade menyobjekt erhålls från den generiska arbetsmiljön). För varje meny i arbetsmiljön placeras namngivna grupper på menyn på de platser det förväntas att insticksprogram ska infoga nya åtgärder.
Följande beskrivning av hjälpmenyn har hämtats från klassdefinitionen IWorkbenchActionConstants.
Standardåtgärder för menyn Hjälp Startgrupp - HELP_START - "start" Slutgrupp - HELP_END - "end"
Den hjälpmeny som används som standard i arbetsmiljön definierar en namngiven grupp som heter"start," följt av en namngiven grupp som kallas "end,". Genom att definiera två grupper får insticksprogram lite mer kotnroll över var deras bidragna objekt placeras på hjälpmenyn. När du definierar en meny kan du definiera så många platser du vill. Genom att lägga till fler platser från andra insticksprogram mer kontroll över var deras bidrag visas i förhållande till befintliga bidrag.
Insticksprogram som lägger till ett menyobjekt på hjälpmenyn kan använda dessa gruppnamn till att avgöra var deras menyobjekt placeras. Ett exempel: lathundssinsticksprogrammet lägger till en åtgärdsuppsättning som innehåller menyn "Cheat Sheets" i arbetsmiljön. Här är koden från insticksprogrammet org.eclipse.ui.cheatsheets plugin.xml-fil.
<extension point="org.eclipse.ui.actionSets"> <actionSet label="%CHEAT_SHEETS" visible="true" id="org.eclipse.ui.cheatsheets.actionSet"> <action label="%CHEAT_SHEETS_MENU" class="org.eclipse.ui.internal.cheatsheets.actions.CheatSheetHelpMenuAction" menubarPath="help/helpStart" id="org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction"> </action> </actionSet> </extension>
Den nya hjälpåtgärden placeras på hjälpmenyn, inuti gruppen helpStart.
En fullständig menysökväg är helt enkelt "menynamn/gruppnamn." De flesta menynamn för arbetsmiljön definieras i IWorkbenchActionConstants. (Resursrelaterade menynamn definieras iIIDEActionConstants.) Om vi söker efter namnet på hjälpmenyn i den här klassen ser vi att det fullständigt kvalificerade sökvägsnamnet för vår hjälpåtgärd är"help/helpEnd."
Vissa menyer har kapslade undermenyer. Det är här som längre sökvägar kommer till användning. Om hjälpmenyn har definierat en undermeny med namnet "submenu" med en namngiven grupp som kallas "submenuStart," blir den fullständigt kvalificerade menysökvägen för en åtgärd på den nya undermenyn "help/submenu/submenuStart."
Exemplet ovan demonstrerade en teknik för externalisering av strängar som visas i användargränssnittet. Externaliserade strängar används till att förenkla översättningen av insticksprogrammets användargränssnitt till andra språk. Vi kan externalisera strängarna i våra plugin.xml-filer genom att ersätta strängen med en nyckel (%CHEAT_SHEETS_MENU) och skapa poster i filenplugin.properties med formatet:
CHEAT_SHEETS_MENU = Lathundar
Filen plugin.properties kan översättas för olika språk och plugin.xml behöver inte ändras.
I många av exemplen vi sett hittills har de åtgärder som bidragits av exempelinsticksprogram lagts till i befintliga namngivna grupper på menyer.
Utökningspunkterna actionSets, viewActions, editorActions och popupMenus gör det även möjligt att definiera nya menyer och grupper i ditt bidrag. Det betyder att du kan definiera nya undermenyer eller nya snabbmenyer och bidra med åtgärder till dessa nya menyer. I det här fallet innehåller sökvägen för din nya åtgärd namnet på den nydefinierade menyn.
Vi såg denna teknik när readme-verktyget definierade en ny meny för dess åtgärdsuppsättning. Låt oss ta en titt på den koden en gång till nu när vi tittat på menysökvägar mer i detalj.
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="org_eclipse_ui_examples_readmetool_actionSet" label="%ActionSet.name" visible="true"> <menu id="org_eclipse_ui_examples_readmetool" label="%ActionSet.menu" path="window/additions"> <separator name="slot1"/> <separator name="slot2"/> <separator name="slot3"/> </menu> <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeAction.label" tooltip="%ReadmeAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.png" class="org.eclipse.ui.examples.readmetool.WindowActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"> </selection> </action> ...
Vi lade till en ny meny med namnet "org_eclipse_ui_examples_readmetool" vars etikett definieras i nyckeln "%ActionSet.name" i egenskapsfilen. Inom denna meny definierar vi tre namngivna grupper: "slot1," "slot2" och "slot3." Vi lägger till denna nya meny i sökvägen "window/additions."
Om vi går tillbaka till IWorkbenchActionConstants, ser vi denna definition av fönsternamnet i javadoc:
* <h3>Standardåtgärder för menyn Fönster</h3> * <ul> * <li>Extra fönsterlik åtgärdsgrupp (<code>WINDOW_EXT</code>)</li>
Om du tittar ytterligare på klassdefinitionen ser vi dessa relaterade definitioner:
public static final String MENU_PREFIX = ""; ... public static final String M_WINDOW = MENU_PREFIX+"window"; ... public static final String MB_ADDITIONS = "additions"; // Group. ... public static final String WINDOW_EXT = MB_ADDITIONS; // Group.
Från denna information kan vi sätta samman sökvägen för att lägga till något på menyn "Fönster" i arbetsmiljön. Själva menyn kallas "window" och den definierar en plats som kallas "additions." Vi använder sökvägen "window/additions" till att lägga till vår nya meny.
I åtgärdsuppsättningsdeklarationen lägger vi till en åtgärd på vår nydefinierade meny med sökvägen "window/org_eclipse_ui_examples_readmetool/slot1."
Andra insticksprogram kan lägga till en egen meny på vår meny genom att använda samma sökväg (eller kanske på en av de andra platserna).
I exemplet med readme-verktyget använder vi attributet separator till att identifiera gruppnamnen. Detta leder till att en avrgänsarlinje visas mellan dessa grupper när de innehåller objekt. Vi kan istället använda attributetgroupMarker om vi vill definiera en namngiven grupp utan att visa avgränsningslinjer på menyn mellan grupperna.
Sökvägar för verktygsfält fungerar på ungefär samma sätt som menysökvägar.
Arbetsmiljöns verktygsfält består av verktygsfält som bidragits av olika insticksprogram, inklusive själva arbetsmiljön. På ett visst verktygsfält finns det namngivna grupper eller platser som kan användas till att infoga nya verktygsfältsobjekt.
Följande beskrivning av arbetsmiljöns verktygsfält har hämtats från klassdefinitionen IWorkbenchActionConstants.
// Workbench toolbar ids public static final String TOOLBAR_FILE = "org.eclipse.ui.workbench.file" public static final String TOOLBAR_NAVIGATE = "org.eclipse.ui.workbench.navigate"; // Workbench toolbar group ids. To add an item at the beginning of the group, // use the GROUP id. To add an item at the end of the group, use the EXT id. public static final String PIN_GROUP = "pin.group"; public static final String HISTORY_GROUP = "history.group"; public static final String NEW_GROUP = "new.group"; public static final String SAVE_GROUP = "save.group"; public static final String BUILD_GROUP = "build.group";
I det enklaste fallet kan ett insticksprogram bidra med ett verktygsfältsobjekt på sitt eget verktygsfält. Ett exempel: readme-verktygets åtgärder som bidragits till menyn ges även en sökväg till verktygsfältet:
<action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" ...
Eftersom det inte finns någon referens till sökvägarna för arbetsmiljöns verktygsfält eller grupper, visas readme-åtgärderna i sin egen grupp på verktygsfältet. Om du anger följande sökväg placeras objekten istället på verktygsfältet file (Arkiv) i gruppen save (Spara):
... <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="org.eclipse.ui.workbench.file/save.group" ...
De sökvägar som definieras i IWorkbenchActionConstants kan användas i andra insticksprograms sökvägar till verktygsfält.
Anta att ett insticksprogram vill att dess verktygsfältsobjekt ska integreras bättre med åtgärder från ett annat insticksprogram? Låt oss ta en titt på hur insticksprogrammet för externa verktyg (org.eclipse.ui.externaltools) integrerar sin åtgärd med verktygsfältet för felsökning. Felsökningsprogrammet (org.eclipse.debug.ui) definierar sina verktygsfältsåtgärder på följande sätt:
<extension point="org.eclipse.ui.actionSets"> <actionSet label="%LaunchActionSet.label" visible="false" id="org.eclipse.debug.ui.launchActionSet"> ... <action toolbarPath="debug" id="org.eclipse.debug.internal.ui.actions.RunDropDownAction" hoverIcon="icons/full/ctool16/run_exc.png" class="org.eclipse.debug.internal.ui.actions.RunToolbarAction" disabledIcon="icons/full/dtool16/run_exc.png" icon="icons/full/etool16/run_exc.png" helpContextId="run_action_context" label="%RunDropDownAction.label" pulldown="true"> </action> ...
Precis som readme-verktyget definierar insticksprogrammet för felsökning sitt eget verktygsfält, vilket betyder att dess verktygsfältsobjekt hamnar inuti det egna verktygsfältet i arbetsmiljön. Vad gör insticksprogrammet för externa verktyg?
<extension point="org.eclipse.ui.actionSets"> <actionSet id="org.eclipse.ui.externaltools.ExternalToolsSet" label="%ActionSet.externalTools" visible="true"> ... <action id="org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar" definitionId= "org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar" label="%Action.externalTools" toolbarPath="org.eclipse.debug.ui.launchActionSet/debug" disabledIcon="icons/full/dtool16/external_tools.png" icon="icons/full/etool16/external_tools.png" hoverIcon="icons/full/ctool16/external_tools.png" tooltip="%Action.externalToolsTip" pulldown="true" class="org.eclipse.ui.externaltools.internal.menu.ExternalToolMenuDelegate"> </action> </actionSet> </extension>
Lägg märke till åtgärdsuppsättningens ID för felsökningsprogrammet i sökvägen till verktysgfältet. Om du använder ett ID för åtgärdsuppsättningen i sökvägen anger du att verktygsfältsobjektet ska placeras på verktygsfältet som används av den hänvisade åtgärdsuppsättningen. I en verktygsfältsgrupp ordnas objekten efter åtgärdsuppsättningens ID. I vårt exempel visas då de externa verktygens åtgärd efter felsökningsprogrammet åtgärder.
När du lägger till på en åtgärdsuppsättnings verktygsfält kan du även definiera nya grupper. Om de externa verktygens insticksprogram definierat sin toolbarpath som "org.eclipse.debug.ui.launchActionSet/external" skapas en ny grupp för åtgärden på verktygsfältet. Precis som med menyer, avskiljs verktygsfältsgrupper med linjer.
I allmänhet är det inte god sed att bidra till ett annat insticksprogram meny eller verktygsfält genom att hämta sökvägsnamnet från plugin.xml såvida den inte har markerats som specifikt tillgänglig för klienter. Det är möjligt att en kommande version av insticksprogrammet kan ändra namnen på sökvägarna. Två vanliga sätt att markera insticksprogrammets åtgärdsuppsättnings-IDn och -sökvägar som lovligt villebråd är att: