[Seasar][Uruma][RCP] Eclipse V3.3仕様でポップアップを表示する
なんとかポップアップの表示ができました。
XMLはこんな感じ。
<?xml version="1.0" encoding="UTF-8"?> <template xmlns="http://uruma.sandbox.seasar.org"> <viewPart title="フィードツリー・ビュー"> <menu> <menu text="メニューグループ3(&F)"> <menuItem id="menu4" text="メニュー4(&S)" image="uruma" accelerator="Ctrl+S" /> <menuItem id="menu5" text="メニュー5(&F)" image="rss" accelerator="Ctrl+F" /> </menu> </menu> <tree id="feedTree" autoExpandLevel="2"> <menu> <menu text="メニューグループpopup(&F)" image="uruma"> <menuItem id="menu6" text="メニュー6(&G)" image="uruma" accelerator="Ctrl+G" /> <menuItem id="menu7" text="メニュー7(&H)" image="rss" accelerator="Ctrl+H" /> </menu> <menuItem id="menu8" text="メニュー8(&J)" image="rss" accelerator="Ctrl+J" /> </menu> </tree> </viewPart> </template>
Javaはこんな感じ。
・・・ @EventListener(id = "menu4", type = EventListenerType.SELECTION) public void doMenu4(final Object obj) { MessageDialog.openInformation(null, "メニュー4", "メニュー4クリック!!"); } ・・・
課題&残タスク
id:y-komori さん アドバイスがあればよろしくです。
ポップアップ可能なコンポーネントを決める
今はTreeViewのみ実装。uruma.xsdとComponentをそれぞれ実装する必要があり。
スキーマはabstractになっているエレメントで決め打ちができればええけど。
クリックしたときのセレクションオブジェクト(ツリーの値)を@EventListenerのメソッドに渡せない
引数のObjectにはEventオブジェクトが入ってきて、中身はクリックしたポップアップメニューでしたww
メニューの表示箇所と表示可否の制御ができない
こんな感じで visibleWhen とdefinition を定義しようかなぁ。
って難しいのう。。。これは。
画面XMと、equals valueのクラスの書き方をどうしたものか。
今の実装は、どこ(ツリー、テーブルとか)をクリックしても同じポップアップが出る仕様。
visibleWhenとdefinitionの例
... org.eclipse.core.expressions.definitions <definition id="org.eclipse.ui.examples.contributions.view.activeEditor"> <with variable="activeEditorId"> <equals value="org.eclipse.ui.examples.contributions.editor"> </equals> </with> </definition> ... org.eclipse.ui.menus <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"> <menu id="org.eclipse.ui.examples.contributions.editor.menu" label="%contributions.editor.menu.label" mnemonic="%contributions.editor.menu.mnemonic"> <command commandId="org.eclipse.ui.examples.contributions.editor.reset" mnemonic="%contributions.editor.reset.mnemonic"> <visibleWhen> <reference definitionId="org.eclipse.ui.examples.contributions.view.activeEditor"> </reference> </visibleWhen> </command> </menu> </menuContribution>
menuで下階層のサブメニューを持つ場合アイコンが表示できない
Eclipseでいろいろな所を右クリックしてポップアップメニューを表示してみたけど、確かにサブメニューを持つメニューにアイコンがない。
うーむ。表示できんのか。スキーマにはmenuにiconアトリビュートがあるのに。
ということで、これはあきらめ。
<!ELEMENT menu (visibleWhen? , (menu? | command? | separator? | dynamic?)*)?> <!ATTLIST menu id CDATA #IMPLIED mnemonic CDATA #IMPLIED icon CDATA #IMPLIED tooltip CDATA #IMPLIED label CDATA #REQUIRED>
おまけ
Urumaが出力したplugin.xmlを貼っておきます。
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <plugin> <extension point="org.eclipse.ui.contexts" > <context id="org.seasar.uruma.example.rss.context" name="Uruma allication local context" parentId="org.eclipse.ui.contexts.window" /> </extension> <extension point="org.eclipse.ui.commands" > <category id="org.seasar.uruma.example.rss.command.category" name="org.seasar.uruma.example.rss" /> <command id="org.seasar.uruma.example.rss.command.menu1" name="メニュー1(O)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu2" name="メニュー2(D)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu3" name="メニュー3(A)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu4" name="メニュー4(S)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu5" name="メニュー5(F)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu6" name="メニュー6(G)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu7" name="メニュー7(H)" categoryId="org.seasar.uruma.example.rss.command.category" /> <command id="org.seasar.uruma.example.rss.command.menu8" name="メニュー8(J)" categoryId="org.seasar.uruma.example.rss.command.category" /> </extension> <extension point="org.eclipse.ui.handlers" > </extension> <extension point="org.eclipse.ui.bindings" > <scheme id="org.seasar.uruma.keyConfiguration" name="UrumaApplication" /> <key sequence="Ctrl+O" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu1" /> <key sequence="DELETE" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu2" /> <key sequence="Ctrl+A" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu3" /> <key sequence="Ctrl+S" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu4" /> <key sequence="Ctrl+F" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu5" /> <key sequence="Ctrl+G" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu6" /> <key sequence="Ctrl+H" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu7" /> <key sequence="Ctrl+J" schemeId="org.seasar.uruma.keyConfiguration" contextId="org.eclipse.ui.contexts.window" commandId="org.seasar.uruma.example.rss.command.menu8" /> </extension> <extension point="org.eclipse.ui.menus" > <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions" > <menu mnemonic="F" label="メニューグループ1(F)" > <command commandId="org.seasar.uruma.example.rss.command.menu1" mnemonic="O" icon="bin/images/uruma16.png" > </command> <separator name="none" visible="true" > </separator> <command commandId="org.seasar.uruma.example.rss.command.menu2" mnemonic="D" icon="bin/images/rss.png" > </command> </menu> <menu mnemonic="E" label="メニューグループ2(E)" > <command commandId="org.seasar.uruma.example.rss.command.menu3" mnemonic="A" icon="bin/images/rss.png" > </command> </menu> </menuContribution> <menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions" > <menu mnemonic="F" icon="bin/images/uruma16.png" label="メニューグループpopup(F)" > <command commandId="org.seasar.uruma.example.rss.command.menu6" mnemonic="G" icon="bin/images/uruma16.png" > </command> <command commandId="org.seasar.uruma.example.rss.command.menu7" mnemonic="H" icon="bin/images/rss.png" > </command> </menu> <command commandId="org.seasar.uruma.example.rss.command.menu8" mnemonic="J" icon="bin/images/rss.png" > </command> </menuContribution> <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions" > <toolbar id="org.seasar.uruma.example.rss.toolbar.メニューグループ1(&F)" > <command commandId="org.seasar.uruma.example.rss.command.menu1" mnemonic="O" icon="bin/images/uruma16.png" style="push" > </command> <command commandId="org.seasar.uruma.example.rss.command.autoDefinedAction_0" style="push" > </command> <command commandId="org.seasar.uruma.example.rss.command.menu2" mnemonic="D" icon="bin/images/rss.png" style="push" > </command> </toolbar> <toolbar id="org.seasar.uruma.example.rss.toolbar.メニューグループ2(&E)" > <command commandId="org.seasar.uruma.example.rss.command.menu3" mnemonic="A" icon="bin/images/rss.png" style="push" > </command> </toolbar> </menuContribution> <menuContribution locationURI="menu:org.seasar.uruma.example.rss.urumaDebugView?after=additions" > </menuContribution> <menuContribution locationURI="toolbar:org.seasar.uruma.example.rss.urumaDebugView?after=additions" > </menuContribution> <menuContribution locationURI="menu:org.seasar.uruma.example.rss.feedTreeView?after=additions" > <command commandId="org.seasar.uruma.example.rss.command.menu4" mnemonic="S" icon="bin/images/uruma16.png" > </command> <command commandId="org.seasar.uruma.example.rss.command.menu5" mnemonic="F" icon="bin/images/rss.png" > </command> </menuContribution> <menuContribution locationURI="toolbar:org.seasar.uruma.example.rss.feedTreeView?after=additions" > <command commandId="org.seasar.uruma.example.rss.command.menu4" mnemonic="S" icon="bin/images/uruma16.png" style="push" > </command> <command commandId="org.seasar.uruma.example.rss.command.menu5" mnemonic="F" icon="bin/images/rss.png" style="push" > </command> </menuContribution> <menuContribution locationURI="menu:org.seasar.uruma.example.rss.feedListView?after=additions" > </menuContribution> <menuContribution locationURI="toolbar:org.seasar.uruma.example.rss.feedListView?after=additions" > </menuContribution> <menuContribution locationURI="menu:org.seasar.uruma.example.rss.feedBrowserView?after=additions" > </menuContribution> <menuContribution locationURI="toolbar:org.seasar.uruma.example.rss.feedBrowserView?after=additions" > </menuContribution> </extension> <extension point="org.eclipse.core.expressions.definitions" > </extension> <extension point="org.eclipse.ui.views" > <view id="org.seasar.uruma.example.rss.urumaDebugView" name="デバッグ・ビュー" class="org.seasar.uruma.rcp.ui.GenericViewPart" allowMultiple="false" /> <view id="org.seasar.uruma.example.rss.feedTreeView" name="フィードツリー・ビュー" class="org.seasar.uruma.rcp.ui.GenericViewPart" allowMultiple="false" /> <view id="org.seasar.uruma.example.rss.feedListView" name="フィード・ビュー" class="org.seasar.uruma.rcp.ui.GenericViewPart" allowMultiple="false" /> <view id="org.seasar.uruma.example.rss.feedBrowserView" name="ブラウザ・ビュー" class="org.seasar.uruma.rcp.ui.GenericViewPart" allowMultiple="false" /> </extension> <extension point="org.eclipse.ui.perspectives" > <perspective id="org.seasar.uruma.example.rss.defaultPerspective" name="RSS" class="org.seasar.uruma.rcp.ui.GenericPerspectiveFactory" icon="uruma" fixed="false" /> </extension> </plugin>
追記: ポップアップの表示可否の案メモ
Adding a Property Tester
To add a property tester to an enablement expression, try using the following example. In your plugin.xml, add the propertyTesters extension point:
Inside your plugin, add and implement the property tester code:
package org.eclipse.myplugin.internal;
import org.eclipse.core.expressions.PropertyTester;public class MyPropertyTester extends PropertyTester {
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
// cast receiver and/or expectedValue
// if (xx) // check some dynamic property
return true;
// else
//return false;
}
}You can now use a property expression within the enablement:
http://www.eclipse.org/webtools/wst/components/server/runOnServer.html