アクション定義は id によるアクションの宣言です。 アクション・セットおよびエディターに定義されるアクションが特定のセマンティック・アクション定義と関連付けられるように、 アクション定義はセマンティック・アクションを宣言するために使用されます。 アクション・インプリメンテーションからアクション定義を分離すると、複数のプラグインを使用して、 同じセマンティック・アクションをインプリメンテーションするアクションを定義できます。 アクション定義を使用すると、アクセラレーター・キー組み合わせとの関連付けを行うことができます。
ワークベンチは、多くの共通アクション定義をそれらの plugin.xml ファイルに定義して、プラグインが、意味のあるときに、 所有するアクションとそれらの定義の関連付けを促すようにします。 このようにして、異なるプラグインにインプリメントされた内容的に同じアクションは、同じキー・バインディングを共用することができます。
アクション定義は、org.eclipse.ui.actionDefinitions 拡張ポイントを使用して定義されます。 以下はワークベンチ・マークアップからのものです。
<extension point="org.eclipse.ui.actionDefinitions"> <actionDefinition id="org.eclipse.ui.file.close"> </actionDefinition> <actionDefinition id="org.eclipse.ui.file.closeAll"> </actionDefinition> <actionDefinition id="org.eclipse.ui.file.save"> </actionDefinition> ...
定義自体は単純です。 セマンティック・アクションのために、単に id を指定するだけです。 セマンティック・アクション定義は、プラグインがそのアクションと定義を関連付けるときにだけ、具体化されます。
アクション・セットのために、アクションはコード内または plugin.xml 内でアクション定義と関連付けることができます。 アクションが定義されている場所に応じて、選択してください。
コード内にインスタンス化されているアクションは、IAction プロトコルを使用して、アクション定義と関連付けることもできます。 一般的にこれは、アクションが作成されるときに行われます。 WorkbenchActionBuilder は、そのアクションを初期化するためにこの技法を使用します。
private void makeActions() { ... saveAction = new SaveAction(window); saveAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT)); saveAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_HOVER)); saveAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_DISABLED)); partService.addPartListener(saveAction); saveAction.setActionDefinitionId(saveActionDefId); ...
このようにして、インプリメンテーション・アクション (SaveAction) は、アクション定義 saveActionDefId と関連付けられます。 saveActionDefId とは何でしょうか? WorkbenchActionBuilder 内の静的フィールド定義を簡単に見てみると、以下のようになります。
private static final String saveActionDefId = "org.eclipse.ui.file.save";
これは、コードで容易に参照されるためにアクション定義に定数を定義する、よい練習になります。
アクションをアクション・セットに定義する場合、一般的には、自分自身でインスタンス化する必要はありません。 メニューまたはキーボードからアクションを起動するときに、ワークベンチが行います。 この場合、アクションとアクション定義を XML マークアップ内に関連付けることができます。 アクション・セットの仮定のマークアップを、以下に示します。
<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>
The definitionID attribute is used to declare an action definition id for the action.
いずれかの技法を使用してアクションとアクション定義を関連付けると、アクション定義 org.eclipse.ui.file.save を定義する任意のキー・バインディングに、適宜にアクションを呼び出させることができます。
これらのキー・バインディングが定義される方法を見てみましょう。