Funktioner, som kan ændre mål

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.