Utökningspunkten org.eclipse.ui.popupMenus gör det möjligt för ett insticksprogram att bidra till snabbmenyerna i andra vyer och redigerare.
Du kan bidra med en åtgärd till en viss snabbmeny via dess id (viewerContribution) eller genom att associera det med en viss objekttyp (objectContribution).
Readme-verktyget definierar båda. Låt oss ta en titt på objektbidraget först.
<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> ...
Åtgärden "Show Readme Action" bidras med för objektklassenIFile. Detta betyder att alla vyer som innehållerIFile-objekt visar bidraget om IFile-objekt väljs. Vi ser att urvalskriteriet begränsas ytterligare med ett namnfilter (nameFilter="*.readme") och för enstaka urval (enablesFor="1"). Som vi diskuterat tidigare kör registreringen av den här menyn inte någon kod från vårt insticksprogram förrän menyalternativet verkligen väljs.
När det här menyalternativet väljs kör arbetsmiljön den angivna klassen. Eftersom snabbmenyn är deklarerad som ett objectContribution, måste den tillhandahållna klassen implementera IObjectActionDelegate.
Åtgärden implementeras i PopupMenuActionDelegate.
public void run(IAction action) { MessageDialog.openInformation( this.part.getSite().getShell(), "Readme Example", "Popup Menu Action executed"); }
Vi kan se snabbmenybidraget när vi väljer en readme-fil från resursnavigatorn.
Ett visningsprogrambidrag används till att bidra till en viss vys eller redigerares snabbmeny via dess id. Här är readme-verktygets visningsprogrambidrag:
... <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>
Obs! Namnet viewerContribution är något missvisande eftersom det inte gäller för JFace-visningsprogram. Ett bättre namn skulle vara popupMenuContribution.
När utökningen är ett viewerContribution, måste den tillhandahållna klassen implementera gränssnittet IEditorActionDelegate eller IViewActionDelegate beroende på huruvida åtgärden bidras till en redigerares eller vys snabbmeny.
TargetID anger den vy vars snabbmeny ska ändras. I det här fallet lägger vi till en åtgärd till en av readme-verktygets vyer, dispositionsvisningsfunktionen. Själva åtgärder liknar andra som vi sett. Vi anger id, definitionId, label och icon för åtgärden och path i snabbmenyn för vårt bidrag. Åtgärden visas bara på snabbmenyn för readme-verktygets dispositionsvy.
Obs! Med definitionId kan åtgärden länkas till ett kommando som skapats av utökningen org.eclipse.ui.commands som kan användas för nyckelbidningar. Mer information finns i avsnittet om kommandon.