Typowym zachowaniem widoków i edytorów modułów dodatkowych jest implementowanie akcji, które są podobne pod względem semantycznym do akcji już istniejących w środowisku roboczym, takich jak wycinanie/kopiowanie/wklejanie, odświeżanie widoku lub wyświetlanie właściwości. W menu podręcznym widoków i edytorów zapanowałby potężny bałagan, gdyby każdy widok i edytor musiał definiować unikalne akcje dla swoich operacji i dołączać je do swoich menu.
Aby rozwiązać ten problem, w środowisku roboczym definiuje się akcje o zmiennym celu (zwane także globalnymi), które mogą być obsługiwane przez dowolny widok lub edytor. Gdy widok lub edytor jest aktywny, procedura obsługi tych akcji będzie uruchamiana po wybraniu przez użytkownika akcji z menu lub paska narzędzi środowiska roboczego. Umożliwi to widokom i edytorom współużytkowanie obszaru menu środowiska roboczego dla semantycznie podobnych akcji.
Interfejs IWorkbenchActionConstants dokumentuje wszystkie akcje środowiska roboczego i oznacza akcje o zmiennym celu jako globalne. Poniżej przedstawiono definicję akcji Właściwości.
public static final String PROPERTIES = "properties"; // Akcja globalna.
W poniższej tabeli podsumowano niektóre z częściej używanych akcji o zmiennym celu implementowanych przez widoki i edytory:
Menu Plik | Menu Edycja | Menu Nawigacja | Menu Projekt | |
widoki | przenieś Zmień nazwę odśwież właściwości |
wejdź do idź do zasobu synchronizuj z edytorem wstecz dalej w górę następny poprzedni |
otwórz zamknij buduj buduj ponownie |
|
edytory | przywróć drukuj |
znajdź | ||
widoki i edytory | wytnij kopiuj wklej usuń wybierz wszystko cofnij przywróć |
Akcje o zmiennym celu tworzy się przy użyciu klasy RetargetAction. Poniższy fragment kodu pochodzi z przykładu WorkbenchActionBuilder.
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
Metoda createGlobalAction pokazuje dokładnie, jak utworzyć instancję klasy RetargetAction.
private RetargetAction createGlobalAction(String id, String actionDefPrefix, boolean labelRetarget) { RetargetAction action; if (labelRetarget) { action = new LabelRetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } else { action = new RetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } ... return action; }
Podczas tworzenia akcji o zmiennym celu środowisko robocze przypisuje tej akcji identyfikator i domyślną etykietę. Należy zwrócić uwagę, że istnieją dwa style akcji o zmiennym celu. Klasa RetargetAction umożliwia po prostu ponowne zaimplementowanie akcji przez widok lub edytor. Klasa LabelRetargetAction umożliwia ponadto zresetowanie etykiety akcji. Jest to użyteczne w celu doprecyzowania etykiet menu, na przykład zastąpienia etykiety Cofnij przez etykietę Cofnij wpisywanie.
Teraz wiadomo już, jak środowisko robocze tworzy akcje o zmiennym celu. Następnym zagadnieniem, które wymaga omówienia, będzie sposób implementacji akcji o zmiennym celu przez widok lub edytor. Robi się to, ustawiając procedurę obsługi akcji globalnej.