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