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

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


***やりかた [#mccb7e53]
でやり方ですが、とりあえず宣言的に行う場合をやってみました。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
というキー値のメニューはこのアクションクラスを使えよー、というのを指定したことになります。

実際、
#ref(view01.png)

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


#ref(view02.png)

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

これは便利!


----
この記事は
#vote(おもしろかった[5],そうでもない[0])
#vote(おもしろかった[6],そうでもない[0])
-こんなん自分で制御しろって言われたら、ゾッっとしますよね。やっぱEclipse/RCPってすげーよなぁ -- [[きの]] &new{2006-03-03 00:16:34 (金)};
-プログラマティカルにやる場合は、
 new RetargetAction(id,"Add &Contact");
と、生成時にidというStringのキー値を設定します。 ビュー側でsetGlobalActionHandlerするのは同じです。キー値をこのidにするだけですね。 -- [[きの]] &new{2006-03-03 00:18:43 (金)};
-ラベルの変更まで許す、LabelRetargetAction とか宣言的なら allowLabelUpdate="true" なんてのもあるみたい。 -- [[きの]] &new{2006-03-03 00:21:28 (金)};
-エディタの場合は、contributorClass の initメソッド内でやるみたいです。 -- [[きの]] &new{2006-03-03 00:22:16 (金)};
-詳細はヘルプの[[再ターゲット可能なエディター・アクション:http://127.0.0.1:63013/help/topic/org.eclipse.platform.doc.isv/guide/wrkAdv_retarget_contribute_editors.htm]]を参照! -- [[きの]] &new{2006-03-03 00:22:49 (金)};


#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS