Bod rozšíření org.eclipse.ui.popupMenus umožňuje modulu plug-in vkládat do rozevíracích nabídek jiných pohledů a editorů.
Akci můžete vložit do určité rozevírací 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" 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. Rozevírací 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 rozevírací 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é rozevírací 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" 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 rozevírací nabídky editoru nebo pohledu.
Identifikátor targetID určuje pohled, jehož rozevírací 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 náš příspěvek zadáváme id, štítek a ikonu akce a dále cestu z rozevírací nabídky Akce se bude zobrazovat pouze v rozevírací nabídce prohlížeče osnovy nástroje README.