Vi har sett en rekke handlingsbidrag som oppgir banen der handlingen er plassert. La oss se nærmere på hva disse banene innebærer.
Vi skal først se nærmere på menybaner ved å se på arbeidsbenkens Hjelp-meny.
Plasseringene for innsetting av nye menyer og menypunkter defineres ved hjelp av navngitte grupper. En navngitt gruppe er et spor eller en plassholder som gjør det mulig å sette inn menypunkter på bestemte steder på en menylinje eller rullegardinmeny.
Arbeidsbenken definerer alle gruppespornavn i klassene IWorkbenchActionConstants og IIDEActionConstants. (Det brukes to ulike klasser siden ressursrelaterte menypunkter faktoriseres fra den generiske arbeidsbenken.) For hver arbeidsbenkmeny plasseres navngitte grupper på menyen på steder der det forventes at plugin-moduler setter inn nye handlinger.
Følgende beskrivelse av hjelpemenyen er hentet fra klassedefinisjonen IWorkbenchActionConstants.
Standard Help menu actions Start group - HELP_START - "start" End group - HELP_END - "end"
Den hjelpemenyen som er standard i arbeidsbenken, definerer en navngitt gruppe som heter "start," etterfulgt av en navngitt gruppe som heter "end,". Gjennom å definere to grupper får plugin-modulene mer kontroll over hvor de oppgitte elementene blir plassert på hjelpemenyen. Når du definerer en meny, kan du definere så mange spor som du vil ha. Ved å legge til flere spor, får andre plugin-moduler mer kontroll over hvor bidragene vises i forhold til eksisterende bidrag.
Plugin-moduler som legger til et menypunkt på hjelpemenyen, kan bruke disse gruppenavnene til å angi hvor menypunktene skal plasseres. For eksempel legger plugin-modulen for jukselapper til et handlingssett som inneholder menyen "Jukselapper...", i arbeidsbenken. Her ser du kodetypen fra plugin.xml for plugin-modulen org.eclipse.ui.cheatsheets.
<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 nye hjelpehandlingen plasseres på hjelpemenyen i gruppen helpStart.
En fullstendig menybane er helt enkelt "menynavn/gruppenavn." De fleste menynavnene for arbeidsbenken defineres i IWorkbenchActionConstants. (Ressursrelaterte menynavn defineres i IIDEActionConstants.) Hvis vi søker etter navnet på hjelpemenyen i denne klassen, vil vi se at det fullt kvalifiserte banenavnet for hjelpehandlingen er "help/helpEnd."
Noen menyer har nestede undermenyer. Det er i denne forbindelse det er aktuelt med lengre baner. Hvis hjelpemenyen har definert en undermeny som heter "submenu", med en navngitt gruppe som heter "submenuStart," er den fullt kvalifiserte menybanen for en handling på den nye undermenyen "help/submenu/submenuStart."
Eksempelet ovenfor viser en metode som gjør strenger som vises i brukergrensesnittet, eksterne. Slike strenger brukes for å forenkle oversettelsen av plugin-modulens brukergrensesnitt til andre språk. Vi kan gjøre strengene eksterne i plugin.xml-filene ved å erstatte strengen med en nøkkel (%CHEAT_SHEETS_MENU) og opprette oppføringer i filen plugin.properties med formatet:
CHEAT_SHEETS_MENU = Cheat Sheets...
Filen plugin.properties kan oversettes til ulike språk og plugin.xml trenger ikke å endres.
I en rekke av eksemplene vi har sett på til nå, er handlingene som er bidratt av eksempelet på plugin-moduler lagt til i eksisterende navngitte grupper på menyene.
Utvidelsespunktene actionSets, viewActions, editorActions og popupMenus lar deg også definere nye menyer og grupper i bidraget. Dette betyr at du kan definere nye undermenyer eller mye rullegardinmenyer og bidra med handlingene på disse menyene. I så fall vil banen for den nye handlingen inneholde navnet på den nydefinerte menyen.
Vi så denne teknikken da readme-verktøyet definerte en ny meny for handlingssettet. La oss se på kodetypen en gang til nå som vi har sett nærmere på menybanene.
<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 har lagt til en ny meny, "org_eclipse_ui_examples_readmetool", med en etikett som er definert av nøkkelen "%ActionSet.name" i egenskapsfilen. På denne menyen definerer vi tre navngitte grupper "slot1," "slot2 " og "slot3." Vi legger til den nye menyen i banen "window/additions."
Hvis vi går tilbake til IWorkbenchActionConstants, ser vi denne definisjonen på vindusmenyen i Javadoc:
* <h3>Standard Window menu actions</h3> * <ul> * <li>Extra Window-like action group (<code>WINDOW_EXT</code>)</li>
Hvis vi ser nærmere på klassedefinisjonen, finner vi disse beslektede definisjonene:
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.
På bakgrunn av denne informasjonen kan vi sette sammen banen for å legge til noe på arbeidsbenkmenyen "Vindu". Selve menyen heter "window" og definerer ett spor som heter "additions." Vi bruker banen "window/additions" for å legge til den nye menyen.
I handlingssettdeklarasjonen legger vi til en handling i den nydefinerte menyen med banen "window/org_eclipse_ui_examples_readmetool/slot1."
Andre plugin-moduler kan legge til en egen meny på menyen ved å bruke den samme banen (eller eventuelt et av de andre sporene).
I eksempelet med readme-verktøyet bruker vi attributtet separator til å identifisere gruppenavnene. Dette resulterer i at det blir vist en skillelinje mellom disse gruppene når de inneholder elementer. Vi kan også skille mellom gruppene ved å bruke attributtet groupMarker for å definere en navngitt gruppe uten å vise skilletegn på menyen.
Verktøylinjebaner fungerer på samme måte som menybaner.
Arbeidsbenkens verktøylinje består av verktøylinjer fra andre plugin-moduler, blant annet selve arbeidsbenken. På enhver bestemt verktøylinje er det navngitte grupper eller spor som kan brukes til å sette inn nye verktøylinjepunkter.
Følgende beskrivelse av arbeidsbenkens verktøylinjer er hentet fra klassedefinisjonen 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 sin enkleste form kan en plugin-modul bidra med et verktøylinjepunkt på sin egen verktøylinje. For eksempel får readme-verktøyets handlinger som er oppgitt på menyen, også en bane til verktøylinjen:
<action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" ...
Siden det ikke er noen referanse til arbeidsbenkens verktøylinjebaner eller grupper, vises readme-handlingene i en egen gruppe på verktøylinjen. Hvis du angir følgende bane, plasseres elementet på verktøylinjens fil (file) i lagringsgruppen (save):
... <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="org.eclipse.ui.workbench.file/save.group" ...
Det kan refereres til banene som er definert i IWorkbenchActionConstants, i verktøylinjebanene for andre plugin-moduler.
Hva skjer hvis det er behov for bedre integrering mellom verktøylinjepunktene for en plugin-modul og handlingene fra en annen plugin-modul? La oss se hvordan plugin-modulen for de eksterne verktøyene (org.eclipse.ui.externaltools) integrerer handlingen med verktøylinjen for feilsøking. Feilsøkeren (org.eclipse.debug.ui) definerer verktøylinjehandlingene på denne måten:
<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> ...
Akkurat på samme måte som med readme-verktøyet, definerer plugin-modulen for feilsøking sin egen verktøylinjebane, noe som betyr at verktøylinjepunktene vil havne på verktøylinjen i arbeidsbenken. Hva gjør plugin-modulen for eksterne verktøy?
<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>
Merk deg bruken av handlingssett-IDen for feilsøkeren i verktøylinjebanen. Ved å bruke en handlingssett-ID i banen angis det at verktøylinjeelementet skal plasseres på verktøylinjen ved hjelp av handlingssettet som det refereres til. I en verktøylinjegruppe ordnes elementene etter handlingssett-ID. I eksempelet vårt blir handlingene for de eksterne verktøyene vist etter feilsøkingshandlingene.
Når et handlingssett legges til på verktøylinjen, kan det også defineres nye grupper. Hvis plugin-modulen for de eksterne verktøyene definerte toolbarpath som "org.eclipse.debug.ui.launchActionSet/external", blir det opprettet en ny gruppe for handlingen på verktøylinjen. På samme måte som med menyer, holdes verktøylinjegrupper atskilt ved hjelp av skilletegn.
Det er vanligvis ikke en god løsning å bidra med en meny eller verktøylinje fra en annen plugin-modul ved å avlede banenavnet fra plugin.xml, med mindre det er spesifikt angitt at den er tilgjengelig for klienter. Det er mulig at en senere versjon av plugin-modulen kan endre navnene på banene. To vanlige måter å merke plugin-modulens handlingssett-IDer og baner som tilgjengelige på, er: