Top / Eclipse / プラグイン開発のTIPS集 / 再ターゲット可能なアクション

カット、コピー、ペーストなどは、ビューがアクティブな場合とエディタがアクティブな場合で、実行するアクションクラスが異なると思います。でもメニューんなかに、「ビューのコピー」と「エディタのコピー」それぞれのメニューがあっても見栄えが悪いです。EclipseIDEでも当然コピーはメニュー上ひとつですよね。

ようするに表示上は全ウィジェットで共通だけれど、選択されているウィジェットによって異なるアクションを実行したいというニーズがあります。そんなときに、この再ターゲット(Retarget)可能なアクションというのを用います。これによって、あるビューが選択されているときはそのビューのアクションを実行する、なんていうべんりなメニューを作ることができます。

やりかた

でやり方ですが、とりあえず宣言的に行う場合をやってみました。plugin.xmlを以下のようにします。

<actionSet label="ラベル"
  visible="true" id="nu.mine.kino.plugin.samples.rcp.actionsets">
  <action
       id="nu.mine.kino.plugin.samples.rcp.actions.retargetaction01"
       label="リターゲット可能アクション"
       menubarPath="help/group01"
       retarget="true"
       style="push"/>
</actionSet>

retarget="true" とするだけです。クラスはそれぞれのウィジェットが動的に代入するため、ココでは指定しません。

次にビューの場合は、各クラスのcreatePartControl?で以下のようにコーディングしておきます。

↓ SampleView1ってクラスです。
public void createPartControl(Composite parent) {
  ......
  getViewSite().getActionBars().setGlobalActionHandler(
      "nu.mine.kino.plugin.samples.rcp.actions.retargetaction01",
      new Action() {    ↑ これはactionタグのidです
        public void run() {
          System.out.println("hoge");
        }
      });
}

これで、このビューが選択されているときは、

nu.mine.kino.plugin.samples.rcp.actions.retargetaction01

というキー値のメニューはこのアクションクラスを使えよー、というのを指定したことになります。

実際、

view01.png

の様にSampleView1がアクティブの場合はアクションがenableになっていて、

view02.png

の様にSampleView2がアクティブの場合はアクションがdisableとなります。

これは便利!


この記事は

選択肢 投票
おもしろかった 3  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / 再ターゲット可能なアクション

現在のアクセス:10439


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS