Kommandoer

En kommando er deklarasjonen av en brukerhandling etter en ID.  Kommandoer brukes til å deklarere semantiske handlinger slik at handlingsimplementeringer som er definert i handlingssett og redigeringsprogrammer, kan knytte seg til en bestemt semantisk kommando.  Det at kommandoen er atskilt fra handlingsimplementeringen, gjør det mulig for flere plugin-moduler å definere handlinger som implementerer samme semantiske kommando. Kommandoen er det som tilknyttes en bestemt tastbinding.

Arbeidsbenken definerer mange vanlige kommandoer i filen plugin.xml, og der det er hensiktsmessig bør plugin-modul knytte sine egne handlinger til disse kommandoene. På denne måten kan semantisk like handlinger som er implementert i ulike plugin-moduler, bruke samme tastbinding.

Definere en kommando

Kommandoer defineres via utvidelsespunktet org.eclipse.ui.commands.  Følgende er hentet fra arbeidsbenkens kodetype:

   <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>
	...

Kommandodefinisjonen angir et navn (name), en beskrivelse (description) og en ID (id) for handlingen.  Den angir også IDen til en kategori for kommandoen, som brukes til å gruppere kommandoer i preferansedialogboksen. Kategoriene defineres også i utvidelsespunktet org.eclipse.ui.commands:

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

Merk at det ikke er angitt noen implementering for en kommando. En kommando kan bare utføres når en plugin-modul knytter handlingen til kommando-IDen.

Knytte en handling til en kommando

Handlinger kan tilknyttes en kommando i kode eller i plugin.xml-filen for handlingssett. Hva du velger avhenger av hvor handlingen er definert.

Hvis du oppretter forekomster av handlinger i kode, kan de også tilknyttes en handlingsdefinisjon ved hjelp av IAction-protokollen.  Dette gjøres vanligvis når handlingen opprettes. SaveAction bruker denne teknikken når den initialiserer seg selv.

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

(Merk:  Et mer egnet navn på metodenavnet setActionDefinitionID kunne vært setCommandID. Metodenavnet gjenspeiler den opprinnelige implementeringen av tastbindinger og bruker utdatert terminologi.)

Ved å aktivere setActionDefinitionID knyttes implementeringshandlingen (SaveAction) til kommando-IDen som ble brukt i kodetypen for kommandodefinisjonen. Du bør definere konstanter for handlingsdefinisjoner slik at det er enkelt å referere til dem i koden.

Hvis du definerer en handling i et handlingssett, trenger du vanligvis ikke å opprette en forekomst av handlingen selv. Arbeidsbenken gjør dette for deg når brukeren aktiverer handlingen via en meny eller via tastaturet. I så fall kan du knytte handlingen til kommando-IDen i  XML-kodetypen. Følgende viser en hypotetisk kodetype for et handlingssett:

<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>

Attributtet definitionID brukes til å deklarere en kommando-ID for handlingen.

Uavhengig av hvilken teknikk som brukes, vil det å knytte handlingen til en kommando-ID føre til at tastbindinger som defineres for kommandoen org.eclipse.ui.file.save, aktiverer handlingen når dette er aktuelt. 

La oss se nærmere på hvordan disse tastbindingene defineres.