Punkt rozszerzenia org.eclipse.ui.popupMenus pozwala modułom dodatkowym wnosić akcje do menu podręcznych innych widoków i edytorów.
Akcje można wnosić do konkretnego menu podręcznego, używając identyfikatora tego menu (viewerContribution) lub wiążąc je z konkretnym typem obiektu (objectContribution).
Narzędzie readme definiuje oba elementy. Poniżej przykład użycia pierwszego z nich.
<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> ...
Akcja "Show Readme Action" jest wnoszona dla klasy obiektów IFile. Oznacza to, że w każdym widoku zawierającym obiekty IFile będzie wyświetlany element wnoszony, gdy obiekty IFile będą wybrane. Jak widać, kryteria wyboru są zawężane przy użyciu filtru nazwy (nameFilter="*.readme") i ograniczone do pojedynczych wyborów (enablesFor="1"). Jak już wspomniano wcześniej, rejestracja tego menu nie powoduje uruchomienia żadnego kodu z modułu dodatkowego, dopóki opcja menu nie zostanie faktycznie wybrana.
Po wybraniu opcji menu środowisko robocze uruchomi określoną klasę. Ponieważ menu podręczne jest deklarowane przy użyciu elementu objectContribution, dostarczana klasa musi implementować interfejs IObjectActionDelegate.
Akcja jest implementowana w klasie PopupMenuActionDelegate.
public void run(IAction action) { MessageDialog.openInformation( this.part.getSite().getShell(), "Przykład Readme", "Akcja menu podręcznego została wykonana"); }
Akcja wnoszona do menu podręcznego jest widoczna po wybraniu pliku readme w nawigatorze zasobów.
Element wnoszony dla przeglądarki służy do wnoszenia akcji do menu podręcznego konkretnego widoku lub edytora określonego za pomocą jego identyfikatora. Oto przykład elementu wnoszonego dla przeglądarki z narzędzia 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>
Uwaga: Nazwa viewerContribution jest nieco myląca, ponieważ nie odwołuje się ona do przeglądarek JFace. Byłoby lepiej, gdyby ten element nosił nazwę popupMenuContribution.
Gdy rozszerzenie jest określane przy użyciu elementu viewerContribution, dostarczana klasa musi implementować interfejs IEditorActionDelegate lub IViewActionDelegate, zależnie od tego, czy akcja jest wnoszona do menu podręcznego edytora czy widoku.
Atrybut targetID określa widok, którego menu podręczne zostanie zmienione. W tym przypadku akcja jest dodawana do jednego z widoków narzędzia readme - widoku schematu. Sama akcja jest podobna do innych już omawianych. Dla tej akcji określa się atrybuty id, label i icon oraz atrybut path w menu podręcznym. Akcja ta będzie wyświetlana tylko w menu podręcznym widoku schematu narzędzia readme.