Kommandoer

En kommando er en erklæring af en brugerfunktion med id.   Der bruges kommandoer til at erklære semantiske funktioner, så funktionsimplementeringer, der er defineret i funktionssæt og editorer, kan knytte sig selv til en bestemt semantisk kommando. Adskillelsen af kommandoen fra funktionsimplementeringen tillader flere plugins at definere funktioner, som implementerer den samme semantiske kommando. Det er kommandoen, der bliver knyttet til en bestemt tastbinding.

Arbejdsbænken definerer mangle generelle kommandoer i filen plugin.xml, og plugins bør knytte deres egne funktioner til disse kommandoer, hvor det giver mening. På denne måde kan semantisk ens funktioner, som er implementeret i forskellige plugins, dele den samme tastbinding.

Definér en kommando

Kommandoer defineres med udvidelsespunktet org.eclipse.ui.commands. Følgende er hentet fra koden til arbejdsbænken:

<extension
	point="org.eclipse.ui.commands">
	...
	<command
		name="%command.save.name"
		description="%command.save.description"
		categoryId="org.eclipse.ui.category.file"
		id="org.eclipse.ui.file.save">
	</command>
	...

Kommandodefinitionen angiver et navn, en beskrivelse og en id for funktionen. Den angiver også id'en for en kategori for kommandoen, som bruges til at gruppere kommandoer i dialogboksen Indstillinger. Kategorierne er også defineret i udvidelsespunktet org.eclipse.ui.commands:

      ...
      <category
            name="%category.file.name"
            description="%category.file.description"
            id="org.eclipse.ui.category.file">
      </category>
      ...

Bemærk, at der ikke er angivet en implementering for en kommando. En kommando bliver først konkret, når en plugin knytter dens funktion til kommando-id'en.

Tilknyt en funktion til en kommando

Funktioner kan knyttes til en kommando i koden eller i filen plugin.xml for funktionssæt. Dit valg afhænger af, hvor funktionen er defineret.

Funktioner, der er oprettet som forekomster i koden, kan også knyttes til en funktionsdefinition med protokollen IAction. Det gøres normalt, når funktionen oprettes. SaveAction bruger denne teknik, når den initialiserer sig selv.

public SaveAction(IWorkbenchWindow window) {
	...
	setText...
	setToolTipText...
	setImageDescriptor...
	setActionDefinitionId("org.eclipse.ui.file.save"); 
}

Bemærk: Metodenavnet setActionDefinitionID kunne mere passende kaldes setCommandID. Metodenavnet afspejler den oprindelige implementering af tastbindinger og bruger forældet terminologi.

Når setActionDefinitionID startes, knyttes implementeringsfunktionen (SaveAction) til den kommando-id, der blev brugt i kommandodefinitionskoden. Det er en god regel at definere konstanter for funktionsdefinitionerne, så der nemt kan refereres til dem i koden.

Hvis du definerer en funktion i et funktionssæt, behøver du normalt ikke selv at oprette en forekomst af en funktion. Arbejdsbænken gør det for dig, når brugeren starter din funktion fra en menu eller tastaturet. I det tilfælde kan du knytte din funktion til en kommando-id i XML-koden. Følgende viser en hypotetisk kode for et funktionssæt:

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="com.example.actions.actionSet"
		   label="Example Actions"
		   visible="true">
		   <action id="com.example.actions.action1"
			   menubarPath="additions"
			   label="Example Save Action"
			   class="org.example.actions.ExampleActionDelegate"
			   definitionID="org.eclipse.ui.file.save">
		</action>
		   ...
	</actionSet>
   </extension>

Attributten definitionID bruges til at erklære en kommando-id for funktionen.

Ved at bruge en af teknikkerne vil tilknytningen af funktionen til en kommando-id få de tastbindinger, der defineres for kommandoen org.eclipse.ui.file.save, til at starte funktionen, når det er relevant.  

Vi skal nu se på, hvordan tastbindingerne bliver defineret.