RCPモードのポップアップメニューについて

id:susie_y さんへ。http://d.hatena.ne.jp/susie_y/20080530/1212152933 への回答です。
コメントの量が多いのでこちらに書きますね。

ツールバー実装お疲れ様です!
動かしてみましたが、いいかんじですね! ただ、私の環境だと「パースペクティブの表示」などの組み込みメニューが化けてしまっていますが、大丈夫ですか?

ポップアップメニューの対応コンポーネントについて

tree の子として menu 要素をもてるように修正していただいたと思うのですが、これはちょっとよくないですね。(^^;

もともと、ポップアップメニューは同一画面内で複数の画面コンポーネントに対して同じものを使い回す可能性があるので、以下のような定義方法になっています。

<window>
  <menu id="popup">
  </menu>
  <table menu="popup">
  </table>
  <tree menu="popup">
  </tree>
</window>

こうすることで、一つのポップアップメニューを複数の画素に設定できるようにしているのですが、問題あるでしょうか。現在のXMLスキーマはそれにもとづいてControl系のコンポーネントにmenu属性がついていると思います。

このへんの仕様をきちんとドキュメントしていないのが悪いのですが。。。m(_ _)m ここは、できれば元に戻していただけると助かります。

クリックしたときのセレクションオブジェクト(ツリーの値)を@EventListenerのメソッドに渡せない

これでは、もう少し拡張して考えるとイベントが発生したときに、アクション側で発生元のオブジェクトを知りたいという問題に抽象化できると思います。

SelectionBinding とはちょっと違いますし、うまく使用化したいですね。ぱっとアイデアがでませんが、一緒に考えましょう。

メニューの表示箇所と表示可否の制御ができない

これは難しいっすね・・・RCP化する前の独自仕様として、EnableDepending(テーブルなどの項目選択数によって、メニューやツールバーのイネーブル状態を変更する機能、filemanagerのサンプルで使ってます)というものを用意していたのですが、現状RCPの機能を使わずに、自前実装しています。

ひとまず、画面定義XML側の仕様から案を練っていきましょうか。

menuで下階層のサブメニューを持つ場合アイコンが表示できない

これは調べてみないとわからないですが、Uruma の XML 上にかかれたパス(画面定義XMLからの相対パスまたはクラスパスルートからの絶対パス)をそのままplugin.xmlへ出力すると、RCPが読み込んでくれません。RCPの場合はプラグインのルートに対する相対パスにしなければならないためです。そこで、AbstractExtensionBuilder#getRcpImagePath() でパスの変換を行っているのですが、これが抜けているのかしら??