// 下階層用テンプレート #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(おもしろかった,そうでもない) -こんなん自分で制御しろって言われたら、ゾッっとしますよね。やっぱ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;}