Det er normalt, at en plugins oversigter og editorer implementerer funktioner, der semantisk ligner eksisterende arbejdsbænksfunktioner, som f.eks. klip/kopiér/klistre til udklipsholder, opfriske oversigt eller egenskaber. Pop op-menuen til oversigter og editorer kan blive meget rodet, hvis hver oversigt eller editor skal definere unikke funktioner for disse funktioner og inkludere dem i deres menuer.
Problemet løses ved, at arbejdsbænken definerer funktioner, som kan ændre mål, også kaldet globale funktioner, der kan håndteres af en hvilken som helst oversigt eller editor. Når en oversigt eller editor er aktiv, udføres dens behandler, når brugeren vælger funktionen på arbejdsbænkens menu eller værktøjslinje. Det giver oversigter og editorer mulighed for at dele arbejdsbænkens menuplads til semantisk ens funktioner.
IWorkbenchActionConstants beskriver alle arbejdsbænkens funktioner og angiver alle funktioner, som kan ændre mål, som globale. Her er f.eks. definitionen af funktionen Egenskaber.
public static final String PROPERTIES = "properties"; // Global action.
Følgende tabel opsummerer en af de mere normale funktioner, som kan ændre mål, der er implementeret af oversigter og editorer:
Menuen Fil | Menuen Redigér | Menuen Navigér | Menuen Projekt | |
oversigter | flyt omdøb opfrisk egenskaber |
gå ind i gå til ressource synk. med editor tilbage frem op næste forrige |
åbn luk byg byg igen |
|
editorer | vend tilbage udskriv |
søg | ||
oversigter og editorer | klip kopiér klistre slet markér alle fortryd gentag |
Funktioner, som kan ændre mål, oprettes med RetargetAction. Følgende kodestykke er fra WorkbenchActionBuilder.
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
Metoden createGlobalAction viser nøjagtigt, hvordan en RetargetAction oprettes.
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 en funktion, som kan ændre mål, bliver oprettet, tildeler arbejdsbænken id'en til funktionen og standardetiketten. Bemærk, at der er to typer funktioner, som kan ændre mål. RetargetAction giver en oversigt eller en editor mulighed for at implementere en funktion igen. LabelRetargetAction giver også oversigter og editorer muligheden for at nulstille funktionens etiket. Det er nyttigt, når menuetiketten skal være mere specifik, som f.eks. hvis funktionen Fortryd skal have etiketten Fortryd skrivning i stedet.
Vi ved nu, hvordan arbejdsbænken definerer funktioner, som kan ændre mål. Lad os se på, hvordan oversigten eller editoren kan stille en implementering til rådighed for en funktion, som kan ændre mål. Det gøres ved at angive en global funktionsbehandler.