Komendy

Komenda to deklaracja akcji użytkownika przy użyciu atrybutu id.  Komendy służą do definiowania akcji semantycznych, dzięki czemu implementacje akcji zdefiniowane w zbiorach akcji i edytorach mogą powiązać się z konkretną komendą semantyczną.  Oddzielenie komend od implementacji akcji umożliwia definiowanie przez wiele modułów dodatkowych akcji, które implementują tę samą komendę semantyczną.  Komendą jest to, co zostaje powiązane z konkretnym przypisaniem klawisza.

Środowisko robocze definiuje wiele typowych komend w swoim pliku plugin.xml, a moduły dodatkowe powinny tworzyć powiązania swoich akcji z tymi komendami, gdy jest to celowe.  Dzięki temu semantycznie podobne akcje implementowane w różnych modułach dodatkowych mogą współużytkować tę samą kombinację klawiszy.

Definiowanie komendy

Komendy definiuje się przy użyciu punktu rozszerzenia org.eclipse.ui.commands.   Poniższy fragment pochodzi z kodu znaczników środowiska roboczego.

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

Definicja komendy określa atrybuty name, description i id dla akcji.   Określa ona także identyfikator kategorii dla komendy, który służy do grupowania komend w oknie dialogowym preferencji.  Kategorie te są także definiowane w punkcie rozszerzenia org.eclipse.ui.commands:

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

Należy zauważyć, że nie określono implementacji dla komendy.  Komenda staje się konkretna tylko wtedy, gdy moduł dodatkowy utworzy powiązanie swojej akcji z identyfikatorem komendy.

Powiązanie akcji z komendą

Powiązania akcji z komendami można tworzyć w kodzie lub w pliku plugin.xml dla zbiorów akcji.  Wybór zależy od tego, gdzie jest definiowana akcja.

Akcje, których instancje są tworzone w kodzie, można także powiązać z definicją akcji, używając protokołu IAction.  Zwykle robi się to podczas tworzenia akcji.  Techniki tej używa akcja SaveAction, gdy sama się inicjuje.

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

Uwaga:  Dla metody setActionDefinitionID bardziej odpowiednia byłaby nazwa setCommandID.  Nazwa metody odzwierciedla oryginalną implementację przypisań klawiszy i używa nieaktualnej terminologii.

Wywołanie metody setActionDefinitionID powoduje powiązanie akcji implementacji (SaveAction) z identyfikatorem komendy użytym w kodzie znaczników z definicją komendy. Dobrym zwyczajem jest definiowanie stałych dla definicji akcji, aby można było łatwo się do nich odwoływać w kodzie.

Po zdefiniowaniu akcji w zbiorze akcji najczęściej nie ma potrzeby samodzielnego tworzenia instancji akcji.  Zrobi to środowisko robocze, gdy użytkownik wywoła akcję z menu lub z klawiatury.  W takim przypadku można powiązać akcję z identyfikatorem komendy w  kodzie znaczników XML.  Poniżej przedstawiono hipotetyczny kod znaczników dla zbioru akcji:

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="com.example.actions.actionSet"
		   label="Przykładowe akcje"
		   visible="true">
		   <action id="com.example.actions.action1"
			   menubarPath="additions"
			   label="Przykładowa akcja Zapisz"
			   class="org.example.actions.ExampleActionDelegate"
			   definitionID="org.eclipse.ui.file.save">
		</action>
		   ...
	</actionSet>
    </extension>

Atrybut definitionID służy do zadeklarowania identyfikatora komendy dla akcji.

W każdej z opisanych technik powiązanie akcji z identyfikatorem komendy spowoduje, że do wywołania akcji można będzie użyć dowolnych przypisań klawiszy zdefiniowanych dla komendy org.eclipse.ui.file.save

W następnej sekcji omówiono sposób definiowania tych przypisań klawiszy.