Bod rozšíření org.eclipse.ui.popupMenus umožňuje modulu plug-in vkládat do místních nabídek jiných pohledů a editorů.
Akci můžete vložit do určité místní nabídky s použitím jejího jednoznačného identifikátoru (viewerContribution) nebo přiřazením k určitému typu objektu (objectContribution).
Nástroj README definuje obojí. Podívejme se nejprve na příspěvek objektu.
<extension point = "org.eclipse.ui.popupMenus"> <objectContribution id="org.eclipse.ui.examples.readmetool" objectClass="org.eclipse.core.resources.IFile" nameFilter="*.readme"> <action id="org.eclipse.ui.examples.readmetool.action1" label="%PopupMenus.action" icon="icons/ctool16/openbrwsr.png" menubarPath="additions" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate" definitionId="org.eclipse.ui.examples.readmetool.action1" enablesFor="1"> </action> </objectContribution> ...
Akce "Zobrazit akci README" přispívá do třídy objektu IFile. To znamená, že všechny pohledy obsahující objekty IFile zobrazí příspěvek, pokud jsou zvoleny objekty IFile. Je patrné, že kritérium výběru je dále omezeno filtrem názvu (nameFilter="*.readme") a na jednoduché volby (enablesFor="1"). Jak jsme uvedli výše, registrace této nabídky vyvolá spuštění kódu našeho modulu plug-in až po skutečné volbě položky nabídky.
Po volbě položky nabídky pracovní plocha spustí zadanou třídu. Místní nabídka je deklarována jako objectContribution a proto musí zadaná třída implementovat IObjectActionDelegate.
Akce je implementována v PopupMenuActionDelegate.
public void run(IAction action) { MessageDialog.openInformation( this.part.getSite().getShell(), "Readme Example", "Popup Menu Action executed"); }
Vložený prvek místní nabídky se zobrazuje po volbě souboru README v navigátoru prostředků.
Příspěvkem prohlížeče se přispívá do určité místní nabídky pohledu či editoru pomocí jednoznačného identifikátoru. Následuje příklad příspěvku prohlížeče nástroje README:
... <viewerContribution id="org.eclipse.ui.examples.readmetool2" targetID="org.eclipse.ui.examples.readmetool.outline"> <action id="org.eclipse.ui.examples.readmetool.action1" label="%PopupMenus.action" icon="icons/ctool16/openbrwsr.png" menubarPath="additions" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" definitionId="org.eclipse.ui.examples.readmetool.action1" class="org.eclipse.ui.examples.readmetool.ViewActionDelegate"> </action> </viewerContribution> </extension>
Poznámka: Název viewerContribution je poněkud matoucí, protože se netýká prohlížečů JFace. Lepším názvem by byl popupMenuContribution.
Jde-li o rozšíření viewerContribution, musí zadaná třída implementovat rozhraní IEditorActionDelegate nebo IViewActionDelegate v závislosti na skutečnosti, zda se akce vkládá do místní nabídky editoru nebo pohledu.
Identifikátor targetID určuje pohled, jehož místní nabídka má být pozměněna. V tomto případě přidáváme akci do jednoho z pohledů nástroje README, do prohlížeče osnovy. Samotná akce je obdobou již uvedených akcí. Pro naše příspěvek zadáváme id, definitionId, label a icon akce a dále path v místní nabídce. Akce se bude zobrazovat pouze v místní nabídce prohlížeče osnovy nástroje README.
Poznámka: definitionId umožňuje propojení akce s příkazem vytvořeným pomocí rozšíření org.eclipse.ui.commands, který lze používat pro vazby kláves. Viz Příkazy.