Det er vanlig at en plugin-modul har visninger og redigeringsprogrammer som implementerer handlinger som semantisk sett er identiske med eksisterende arbeidsbenkhandlinger, for eksempel utklipptavlens funksjoner for klipping/kopiering/innliming, egenskaper eller oppdatering av visning. Hurtigmenyen for visninger og redigeringsprogrammer kan bli uoversiktlig hvis alle visningene eller redigeringsprogrammene må definere unike handlinger for disse operasjonene og inkludere dem på menyene.
Dette problemet løses ved at arbeidsbenken definerer målskiftende handlinger (som også kalles globale handlinger) som kan håndteres av alle visninger eller redigeringsprogrammer. Når en visning eller et redigeringsprogram er aktivt, kjøres behandleren når brukeren velger handlingen fra arbeidsbenkmenyen eller -verktøylinjen. Dette gjør det mulig for visninger og redigeringsprogrammer å dele arbeidsbenkens menyområde for handlinger som er semantisk like.
IWorkbenchActionConstants dokumenterer alle arbeidsbenkhandlinger og angir at målskiftende handlinger er globale handlinger. Her er for eksempel definisjonen på handlingen Egenskaper.
public static final String PROPERTIES = "properties"; // Global action.
Følgende tabell viser noen av de mer vanlige målskiftende handlingene som implementeres av visninger og redigeringsprogrammer:
Filmeny | Redigeringsmeny | Navigeringsmeny | Prosjektmeny | |
visninger | flytting endring av navn oppdatering egenskaper |
gå inn i gå til ressurs synkronisering med redigeringsprogram tilbake fremover opp neste forrige |
åpning lukking bygging gjenoppbygging |
|
redigeringsprogrammer | gå tilbake utskrift |
søking | ||
visninger og redigeringsprogrammer | utklipping kopiering innliming sletting valg av allt angring omgjøring |
Målskiftende handlinger opprettes ved hjelp av RetargetAction. Følgende snutt er hentet fra WorkbenchActionBuilder.
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
Metoden createGlobalAction viser oss nøyaktig hvordan vi lager 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 vi oppretter en målskiftende handling, tildeler arbeidsbenken IDen for handlingen og standardetiketten. Merk at det er to stiler for målskiftende handlinger. Med RetargetAction kan en visning eller et redigeringsprogram helt enkelt implementere en handling på nytt. LabelRetargetAction gjør det også mulig for visninger eller redigeringsprogrammer å tilbakestille etiketten for handlingen. Dette er nyttig når du vil lage en mer spesifikk menyetikett, for eksempel hvis du vil bytte etikett på en angrehandling til en handling for angring av inntasting.
Vi har nå sett hvordan de målskiftende handlingene defineres av arbeidsbenken. Vi skal se nærmere på hvordan visningen eller redigeringsprogrammet kan oppgi en implementering for en målskiftende handling. Dette gjøres ved å definere en global handlingsbehandler.