Door middel van het extensiepunt org.eclipse.ui.actionSets kunt u met plugins menu's en menu- en werkbalkitems toevoegen aan de menu's en de werkbalk van de workbench. Om te voorkomen dat alle menu-items gelijktijdig worden afgebeeld en de workbench onoverzichtelijk wordt, worden de items gegroepeerd op basis van actiesets die door de gebruiker kunnen worden ingesteld.
U kunt de toegevoegde actiesets opvragen via
Venster > Perspectief aanpassen... in het workbenchmenu. Er wordt vervolgens een dialoogvenster geopend, waarin de actiesets als groepen opdrachten worden afgebeeld. Als er een vinkje staat in het vakje naast een opdrachtengroep, zijn de menu- en werkbalkacties zichtbaar in de workbench. Als u op de naam van een groep klikt, wordt aan de rechterkant een lijst met beschikbare menu- en werkbalkacties afgebeeld. Op de onderstaande afbeelding ziet u de lijst met beschikbare groepen opdrachten in een voorbeeldworkbench. (Hoe uw workbench er uitziet, hangt af van de plugins die geïnstalleerd zijn en het perspectief dat actief is.)
De readme-tool gebruikt een actieset voor het toevoegen van diverse acties voor het openen van de readme-browser aan het menu van de workbench. (Een vergelijkbare actie is toegevoegd aan het voorgrondmenu van de resourcenavigator.) De markup is als volgt:
<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" definitionId="org.eclipse.ui.examples.readmetool.readmeAction" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"> </selection> </action> ... </actionSet> </extension>
Nu wordt stap voor stap ingegaan op de bovenstaande code. Eerst volgt een uitleg van de eerste actie.
De actieset wordt eerst gedeclareerd en van een label voorzien. Het label "Readme-acties" (gedefinieerd voor de sleutel %ActionSet.name in het eigenschappenbestand van de plugin) wordt gebruikt om de actieset te definiëren in het bovenstaande dialoogvenster. Omdat het kenmerk visible waar is, wordt de actieset in eerste instantie aangevinkt en zijn de acties zichtbaar.
Het overige gedeelte van de declaratie van de actieset heeft betrekking op de definitie van het menu voor de acties en de acties zelf.
Het label van het menu verschijnt in de menubalk van de workbench. Het pad van het menu (path) geeft aan dat het nieuwe menu in de groep additions van het menu window moet worden geplaatst. (Raadpleeg Paden van menu's en werkbalken voor meer informatie over menu- en werkbalklocaties.) Ook worden enkele groepen gedefinieerd in het nieuwe menu, zodat acties op die specifieke locaties kunnen worden ingevoegd.
Op basis van deze markup kan het menu worden afgebeeld in het menu Venster van de workbench.
Nu zijn de acties aan de beurt.
De definitie van de actie (ID (id), label, pictogram (icon), klasse (class)) is vergelijkbaar met eerder besproken actiedefinities in views, editors en voorgrondmenu's. Nu wordt uitgelegd waar het verschil zit en waar de acties worden geplaatst. Om de positie aan te geven, kunt u menubarPath en toolbarPath gebruiken. Eerst geeft u het menubalkpad (menubarPath) op, zodat u de actie kunt toevoegen aan een groep in het zojuist gedefinieerde menu ( window/org_eclipse_ui_examples_readmetool/slot1).
U geeft vervolgens een werkbalkpad (toolbarPath) op om de acties aan de werkbalk van de workbench toe te voegen. U hebt een nieuw werkbalkpad opgegeven, "readme" en dus zal de workbench de relatieve positie vaststellen ten opzichte van andere werkbalkitems die door plugins zijn toegevoegd.
Wat gebeurt er zodra de actie wordt gekozen? De actie wordt geïmplementeerd door de klasse uit het kenmerk class. Door de actieklasse (class) moet IWorkbenchWindowActionDelegate of IWorkbenchWindowPulldownDelegate worden geïmplementeerd. U moet de laatste gebruiken als u de actie als keuzeknop-item wilt weergeven op de werkbalk. Omdat dit nu niet het geval is, implementeert u WindowActionDelegate. Deze klasse is vergelijkbaar met ObjectActionDelegate. De klasse wordt gebruikt om een dialoogvenster te openen met de secties uit een REAMDE-bestand. (Raadpleeg Toepassingsdialoogvensters voor meer informatie over het sectiesdialoogvenster.)
Voor de actie zijn ook voorwaarden verstrekt wanneer deze ingeschakeld mag zijn als menu-item en als werkbalkknop. De menu- en werkbalkacties zijn alleen ingeschakeld als één README-bestand is geselecteerd (enablesFor="1" en selectionClass="org.eclipse.core.resources.IFile" name="*.readme"). De menu- en werkbalkitems van deze actie zijn ingeschakeld vanwege de markup uit het bestand plugin.xml. De plugincode wordt pas uitgevoerd wanneer de actie wordt gekozen en de actieklasse (class) wordt uitgevoerd door de workbench.
Het definitionId zorgt dat de actie wordt gekoppeld aan een opdracht die is gemaakt door de extensie org.eclipse.ui.commands, die kan worden gebruikt toetskoppelingen. Alle actions in een actionSets moeten worden gekoppeld aan een opdracht, ofwel aan een bestaande opdracht uit de workbench ofwel aan een opdracht die door de extra plugin wordt geleverd. Zie Opdrachten.
Later wordt ingegaan op de andere twee acties in de context van herbruikbare acties.