コマンド

コマンドとは、ID によるユーザー・アクションの宣言です。 コマンドを使用して、セマンティック・アクションを宣言します。 そのときに、 アクション・セットおよびエディターに定義されたアクション・インプリメンテーションがそれ自体を特定のセマンティック・コマンドに関連付けることができるように宣言します。 コマンドをアクション・インプリメンテーションと分離すると、 複数のプラグインで、同じセマンティック・コマンドをインプリメントするアクションを定義できます。 コマンドは、特定のキー・バインディングと関連付けられます。

ワークベンチは多くの共通コマンドをその plugin.xml ファイルに定義し、意味をなす場合に、 プラグインによるこれらのコマンドへの独自のアクションの関連付けが促されます。 このようにして、異なるプラグインにインプリメントされた内容的に同じアクションは、 同じキー・バインディングを共用することができます。

コマンドの定義

コマンドは、org.eclipse.ui.commands 拡張ポイントを使用して定義されます。 次は、ワークベンチ・マークアップからのものです。

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

コマンド定義は、アクションの名前説明、および ID を指定します。 また、コマンドのカテゴリーの ID も指定します。これは、設定ダイアログでのコマンドのグループ化に使用されます。カテゴリーは、org.eclipse.ui.commands 拡張ポイントでも次のように定義されます。

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

コマンドにインプリメンテーションが指定されていないことに注意してください。 プラグインがコマンドのアクションをコマンド ID に関連付けるときにのみ、コマンドは具体的になります。

コマンドへのアクションの関連付け

アクション・セットのために、コードまたは plugin.xml 内でアクションをコマンドと関連付けることができます。 アクションを定義する場所に応じて選択を行います。

コード内にインスタンス化されているアクションは、IAction プロトコルを使用して、アクション定義と関連付けることもできます。これは、一般的に、アクションが作成されるときに行われます。 SaveAction は、その初期化時にこの技法を使用します。  

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

(注:  メソッド名 setActionDefinitionID をより適切に setCommandID という名前にすることもできます。 メソッド名はキー・バインディングのオリジナル・インプリメンテーションを反映し、 無効な用語を使用します。)

setActionDefinitionID を呼び出すと、インプリメンテーション・アクション (SaveAction) が、コマンド定義マークアップで使用されたコマンド ID に関連付けられます。これは、コードで容易に参照されるようにアクション定義の定数を定義するためのよい方法です。

アクション・セットにアクションを定義した場合、 一般に、アクションを自分でインスタンス化する必要はありません。 ユーザーがメニューまたはキーボードからアクションを呼び出したときに、 ワークベンチがこれを行います。 この場合、XML マークアップでアクションをコマンド ID に関連付けることができます。 次は、アクション・セット用の仮想のマークアップです。

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

definitionID 属性は、アクションのコマンド ID を宣言するために使用されます。

いずれかの技法を使用してアクションとコマンド ID を関連付けると、コマンド org.eclipse.ui.file.save を定義する任意のキー・バインディングに、 適宜にアクションを呼び出させることができます。  

これらのキー・バインディングが定義される方法を見てみましょう。