Příkaz je deklarace akce uživatele provedená podle id. Příkazy se používají k deklarování sémantických akcí, aby se implementace akcí definované v akčních sadách a editorech mohly přiřadit ke konkrétnímu sémantickému příkazu. Oddělení příkazu od implementace akce umožňuje více modulům plug-in definovat akce, které implementují stejný sémantický příkaz. Daný příkaz je ten, který je přiřazen k určité vazbě kláves.
Pracovní plocha definuje mnoho obecných příkazů v souboru plugin.xml a moduly plug-in jsou řízeny tak, aby přiřazovaly svoje vlastní akce k těmto příkazům tam, kde tento postup dává smysl. Tímto způsobem mohou sémanticky podobné akce implementované v různých modulech plug-in sdílet stejnou vazbu kláves.
Příkazy se definují pomocí bodu rozšíření org.eclipse.ui.commands. Následující příklad pochází z markupu pracovní plochy:
<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> ...
Definice příkazu určuje název, popis a id akce. Také určuje id kategorie pro příkaz, které se používá k seskupení příkazů v dialogovém okně předvoleb. Kategorie jsou definovány také v bodě rozšíření org.eclipse.ui.commands :
...
<category
name="%category.file.name"
description="%category.file.description"
id="org.eclipse.ui.category.file">
</category>
...
Všimněte si, že pro příkaz není uvedena žádná implementace. Příkaz se stává konkrétním pouze, pokud modul plug-in přiřadí svoji akci k id příkazu.
Akce lze přiřazovat k příkazu v kódu, nebo v souboru plugin.xml pro akční sady. Vaše volba závisí na tom, kde je akce definována.
Akce, ze kterých jsou v kódu vytvářeny instance mohou být také přiřazeny k definici akce pomocí protokolu IAction. Tento postup se obvykle provádí při vytváření akce. Akce SaveAction tuto techniku používá při své vlastní inicializaci.
public SaveAction(IWorkbenchWindow window) {
...
setText...
setToolTipText...
setImageDescriptor...
setActionDefinitionId("org.eclipse.ui.file.save");
}
(Poznámka: Název metody setActionDefinitionID by se mohl změnit na vhodnější název setCommandID. Název metody odráží původní implementaci vazeb kláves a používá zastaralou terminologii.)
Vyvoláním setActionDefinitionID se akce implementace (SaveAction) přiřadí k id příkazu, který byl použit v markupu definice příkazu. Je vhodné definovat konstanty pro definice akcí, aby se na ně mohlo v kódu snadno odkazovat.
Pokud definujete akci v akční sadě, obvykle není nutné vytvářet instanci akce. Pracovní plocha to provede namísto vás, jakmile uživatel vyvolá akci z nabídky nebo klávesnice. V tomto případě můžete vaši akci přiřadit k id příkazu ve vašem markupu XML. Následující příklad ukazuje hypotetický markup pro akční sadu:
<extension point = "org.eclipse.ui.actionSets">
<actionSet id="com.example.actions.actionSet"
label="Příklady akcí"
visible="true">
<action id="com.example.actions.action1"
menubarPath="additions"
label="Příklad akce uložení"
class="org.example.actions.ExampleActionDelegate"
definitionID="org.eclipse.ui.file.save">
</action>
...
</actionSet>
</extension>
Atribut definitionID se používá k deklarování id příkazu pro akci.
Použití kterékoli techniky přiřazující vaši akci k id příkazu vede k tomu, že kterékoli vazby kláves definované pro příkaz org.eclipse.ui.file.save vyvolají vaši akci ve vhodném případě.
Nyní předvedeme, jakým způsobem se tyto vazby kláves definují.