Příkazy

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.

Definování příkazu

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.

Přiřazení akce k 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í.