Det är vanligt för ett insticksprograms vyer och redigerare att implementera åtgärder som semantiskt liknar befintliga arbetsmiljöåtgärder, t.ex. urklippsfunktioner som Klipp ut/Kopiera/Klistra in, Uppdatera vy och Egenskaper. Snabbmenyn för vyer och redigerare kan snabbt blir ganska oöverskådlig om alla vyer och redigerare ska definiera unika åtgärder för dessa operationer och ta med dem på sina menyer.
För att lösa det här problemet definierar arbetsmiljön åtgärder som kan växla mål (kallas även globala åtgärder) som kan hanteras av alla vyer och redigerare. När en vy eller redigerare är aktiv körs dess hanterare när användaren väljer åtgärden på arbetsmiljöns meny eller verktygsfält. Detta gör att vyer och redigerare kan dela på arbetsmiljöns menyutrymme för semantiskt likartade åtgärder.
IWorkbenchActionConstants dokumenterar alla arbetsmiljöns åtgärder och anger att åtgärder som kan växla mål är globala. Ett exempel: här är definitionen på åtgärden Properties.
public static final String PROPERTIES = "properties"; // Global action.
Följande tabell sammanfattar några av de vanligare åtgärderna som kan växla mål som implementeras av vyer och redigerare:
Menyn Arkiv | Menyn Redigera | Menyn Navigera | Menyn Projekt | |
vyer | move rename refresh properties |
go into go to resource sync with editor back forward up next previous |
open close build rebuild |
|
redigerare | revert |
find | ||
vyer och redigerare | cut copy paste delete select all undo redo |
Åtgärder som kan växla mål skapas med RetargetAction. Följande kodstycke kommer från WorkbenchActionBuilder.
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
Metoden createGlobalAction visar oss exakt hur man skapar en 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; }
När man skapar en åtgärd som kan växla mål tilldelar arbetsmiljön idt för åtgärden och en standardetikett. Lägg märke till att det finns två format för åtgärder som kan växla mål. RetargetAction gör helt enkelt att en vy eller redigerare kan implementera en åtgärd igen. LabelRetargetAction medger också att vyer och redigerare kan återställa åtgärdens etikett. Detta är användbart om man vill göra menyetiketten mer specifik, t.ex. att byta etikett på en Ångra-åtgärd till Ångra inmatning.
Nu vet vi hur åtgärder som kan växla mål definieras av arbetsmiljön. Låt oss ta en titt på hur vyn eller redigeraren kan tillhandahålla en implementation för en åtgärd som kan växla mål. Detta görs genom att ange en global åtgärdshanterare.