プラグインのビューおよびエディターについて、クリップボードでの切り取り/コピー/貼り付け、ビューの更新、またはプロパティーなどの 内容的に同じアクションを既存のワークベンチ・アクションに実装することは共通です。 それぞれのビューとエディターが、これらの操作のために独自のアクションを定義して、それらのメニュー内に定義を組み込む必要がある場合、 ビューおよびエディターのポップアップ・メニューは、かなり乱雑なものになります。
この問題を解決するために、ワークベンチは再ターゲット可能な (グローバルとも呼ばれる) アクションを定義します。 これは、任意のビューまたはエディターによって扱われます。 ビューまたはエディターがアクティブであるときは、ワークベンチ・メニューまたはツールバーからアクションを選択したときに、そのハンドラーが実行されます。 これによって、ビューまたはエディターは、内容的に同じアクションのために、ワークベンチ・メニューのスペースを共有できます。
IWorkbenchActionConstants は、 すべてのワークベンチ・アクションを記述し、グローバルとして再ターゲット可能なアクションを指示します。 例えば、以下は Properties アクションの定義です。
public static final String PROPERTIES = "properties"; // Global action.
下の表で、ビューおよびエディターによって実装される、再ターゲット可能なアクションのうち、より一般的なものをいくつか要約します。
「ファイル」メニュー | 「編集」メニュー | 「ナビゲート」メニュー | 「プロジェクト」メニュー | |
ビュー | 移動 名前変更 最新表示 プロパティー |
次へジャンプ リソースへジャンプ エディターとの同期化 (sync with editor) 戻る 進む 上へ 次へ 戻る |
開く 閉じる ビルド 再ビルド |
|
エディター | 前回保存した状態に戻す 印刷 |
検索 | ||
ビューおよびエディター | 切り取り コピー 貼り付け 削除 すべて選択 元に戻す やり直し |
再ターゲット可能なアクションは、RetargetAction を使用して作成されます。 以下の抜粋は、WorkbenchActionBuilder からのものです。
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
createGlobalAction メソッドは、 RetargetAction を作成する方法を示します。
private RetargetAction createGlobalAction(String id, String actionDefPrefix, boolean labelRetarget) { RetargetAction action; if (labelRetarget) { action = new LabelRetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } else { action = new RetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } ... return action; }
再ターゲット可能なアクションを作成しているとき、ワークベンチは、アクションおよびデフォルト・ラベルのために ID を割り当てます。 2 つのスタイルの再ターゲット・アクションがあることに注意してください。 RetargetAction は、 単にビューまたはエディターがアクション実装できるようにします。 LabelRetargetAction は、 さらにビューまたはエディターがアクションのラベルをリセットできるようにします。 これは、Undo アクションを Undo Typing として再ラベルするなど、さらに具体的で明確なメニュー・ラベルを使用する際に役立ちます。
これで、再ターゲット可能なアクションがワークベンチによって定義される方法がわかりました。 次は、再ターゲット可能なアクションのために、ビューまたはエディターが実装を提供する方法を見てみましょう。 これは、グローバル・アクション・ハンドラーの設定によって行われます。