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