Eclipse/プラグイン開発のTIPS集/メニューバーを構築する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
*Eclipse/RCPのメニューバーの構築 [#xfe6d579]
Eclipse/RCPのメニューバーの構築は、以下の2つの方法で行う...
-プログラムからプログラマティカルに
-拡張ポイントから宣言的に
[[TUTORIALS 26 Developing for the Rich Client Platform:ht...
によると
-(メニューと、常に表示しておくアクションなど)最小のスケル...
-それ以外は宣言的に
となっていますね。
**プログラムからプログラマティカルに [#f392fc18]
さて、スケルトンとなる最小の構成をEclipse/RCPのフレームワ...
RCPは
IPlatformRunnable -> WorkbenchAdvisor
-> WorkbenchWindowAdvisor -> ActionBarAdvisor
(の実装クラス)という順番に呼び出されるパタンになっていて...
org.eclipse.ui.application.ActionBarAdvisor
内の
protected void makeActions(IWorkbenchWindow window);
protected void fillMenuBar(IMenuManager menuBar) ;
をOverrideすることで実装します。
ここでは下記のように実装しました。
-ActionBarAdvisor の実装クラス
package nu.mine.kino.plugin.samples.rcp;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAc...
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
public class ApplicationActionBarAdvisor extends ActionB...
private IWorkbenchWindow window;
private IWorkbenchAction quitAction;
private IWorkbenchAction aboutAction;
private IWorkbenchAction helpSearchAction;
public ApplicationActionBarAdvisor(IActionBarConfigure...
super(configurer);
window = configurer.getWindowConfigurer().getWindow();
}
protected void makeActions(IWorkbenchWindow window) {
quitAction = ActionFactory.QUIT.create(window);
register(quitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
helpSearchAction = ActionFactory.HELP_SEARCH.create(...
register(helpSearchAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(createHelpMenu());
}
/**
* Creates and returns the File menu.
*/
private MenuManager createFileMenu() {
MenuManager menu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE);
menu.add(quitAction);
return menu;
}
private MenuManager createHelpMenu() {
// 根っこのメニュー追加。
MenuManager menu = new MenuManager("&Help",
IWorkbenchActionConstants.M_HELP); // helpという...
menu.add(helpSearchAction);
menu.add(new Separator("group01"));
// ヘルプと、aboutの間にgroup01というグループを追加
menu.add(aboutAction);
return menu;
}
}
これで、以下のようにメニューバーが構築されました。
#ref(menu01.png)
[ワークベンチ]
|
|-[File]
| -[終了]
|
|-[Help]
| -[検索]
| -[○○について]
ポイントは
-すでに定義済みのアクションは
quitAction = ActionFactory.QUIT.create(window); <- 終了
などActionFactoryから取得できる
-protected void fillMenuBar(IMenuManager menuBar);
がワークベンチのメニューバーのインスタンスなので、そこに...
などです。
***グループ名などについて [#u9f12328]
さて、先のコードで、
MenuManager menu = new MenuManager("&Help",IWorkbenchAct...
や
menu.add(new Separator("group01"));
などがありました。この IWorkbenchActionConstants.M_HELP (...
[ワークベンチ]
|
|-[File] - "file" <- IWorkbenchActionCons...
| -[終了]
|
|-[Help] - "help" <- IWorkbenchActionCons...
| -[検索]
| -"セパレータ" - "group01"
| -[○○について] -
この場合、"セパレータ"部分は、正式名称((完全修飾メニュー...
help/group01 (メニュー名/グループ名)
となります。この名称を、拡張ポイントでアクションを追加す...
**拡張ポイントから宣言的に [#ge84d99c]
では先の"セパレータ"部分にアクションを追加します。セパレ...
help/group01
でした。
plugin.xmlに以下を追加します。
<extension point="org.eclipse.ui.actionSets" >
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<action
label="追加アクション。" <- 表示されるアクション名
class="nu.mine.kino.plugin.samples.rcp.actions.Ho...
menubarPath="help/group01" <- さっきの完全修飾メ...
id="nu.mine.kino.plugin.samples.rcp.actions.hogea...
</action>
</actionSet>
</extension>
これで先のhelp/group01の箇所に "追加アクション。" という...
#ref(menu02.png)
図で書くと以下の通りですね。
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加アクション。] - <- plugin.xml...
| -[○○について] -
このように、セパレータなどを用いて、提供側の開発者がメニ...
*** アクションではなく、サブメニューを追加する [#hed5215b]
次に、サブメニューを追加したいと思います。具体的には次の...
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加メニュー。] - "menu01" <- plugin.xml...
| -"セパレータ" - "sepa01" <- plugin.xml...
| -[追加アクション。] - <- plugin.xml...
| -[○○について] -
セパレータ部分に「追加メニュー。」というサブメニューを追...
plugin.xmlに以下の通り記述します。さっきのactionSetsはい...
<extension point="org.eclipse.ui.actionSets" >
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<menu
id="menu01" <- 名称は menu01
label="追加メニュー。"
path="help/group01"> <-このサブメニューはセパ...
<separator name="sepa01"/> <-さらにセパレータを...
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
</actionSet>
</extension>
順に見ていきます。
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/>
</menu>
で「pathの箇所にlabelのサブメニューをidの名称で追加します...
次にセパレータを追加しています。セパレータの完全修飾メニ...
help/menu01/sepa01
となります。
あとはアクションですが、先と同じで
menubarPath="help/menu01/sepa01"
によって、先のサブメニューの下のセパレータ部分にこのアク...
*** 複数のアクションを追加する [#i51aa936]
続いて以下のように複数のアクションを追加しました。
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/>
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
<action
label="追加アクション2。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/group01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
</actionSet>
予想通り
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加アクション2。]" - "group01" <- plugin.xml...
| -[追加メニュー。] - "menu01" <- plugin.xml...
| -"セパレータ" - "sepa01" <- plugin.xml...
| -[追加アクション。] - "sepa01" <- plugin.xml...
| -[○○について] -
となりました。
*** 存在しない完全修飾メニュー・パスを指定する [#v4898d72]
さらに以下の内容をplugin.xmlに追加します。
<action
id="nu.mine.kino.plugin.samples.rcp.action3"
label="追加アクション3"
menubarPath="help/hogehoge" <- 存在しない完全修飾メニ...
/>
すると
#ref(menu03.png)
一番下に追加されました。
***まとめると、以下のようになります。 [#caa1b6d6]
-プログラムで完全修飾メニュー・パスを追加して、メニューを...
-完全修飾メニュー・パスを指定して、アクションを追加できる
-完全修飾メニュー・パスを指定して、サブメニューを追加でき...
-サブメニュー追加時は、新しい名称をid要素で定義する(help/...
-サブメニューの下に追加したセパレータの箇所へのアクション...
-サブメニューは子要素がないと表示されない
-完全修飾メニュー・パスの箇所には、複数のメニューやアクシ...
-存在しない完全修飾メニュー・パスを指定すると、一番下に追...
***サブメニューの下にさらにサブメニューを表示する。 [#u28...
次に、以下のような階層的なメニュー構造を作ってみたいと思...
[ワークベンチ]
|
|-[File] - "file" ...
| -[終了]
|
|-[Help] - "help" ...
| -[検索]
| -"セパレータ" - "group01"
| -[追加メニュー。] - "menu01" ...
| -"セパレータ" - "sepa01" ...
| -[追加アクション。] - ...
| -[さらに下にメニュー。] - "menu02" ...
| -"セパレータ" - "sepa02" ...
| -[さらに下に追加アクション。] - ...
| -[○○について] -
#ref(menu04.png)
plugin.xmlは以下のようにします。
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.act...
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/> <- 完全名は help/menu01/...
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.HogeA...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeacti...
</action>
<menu
id="menu02"
label="さらに下にメニュー。"
path="help/menu01/sepa01"> <- help/menu01/sepa01 ...
<separator name="sepa02"/> <- 完全名は help/menu01...
</menu>
<action
id="nu.mine.kino.plugin.samples.rcp.action5"
label="さらに下に追加アクション。"
menubarPath="help/menu01/menu02/sepa02" >
</action>
</actionSet>
ポイントはhelp/menu01/sepa01に追加したサブメニューの完全...
help/menu02/ ではなく help/menu01/menu02/
となることです。即ちそのしたのセパレータも
help/menu01/menu02/sepa02
となります。従ってそのセパレータに追加するアクションのmen...
<action
id="nu.mine.kino.plugin.samples.rcp.action5"
label="さらに下に追加アクション。"
menubarPath="help/menu01/menu02/sepa02" > <- これ
</action>
となるわけです。
*** トップレベルのメニューにアクションを追加したい。 [#k7...
トップレベルのメニュー(ワークベンチが保持するIMenuManager...
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="rcpmail.actionSet8"
label="rcpmail.actionSet8"
visible="true"> <-これ、重要!!
<menu
id="topmenu"
label="トップメニュー">
<separator name="sepa01"/>
</menu>
<action
id="rcpmail.action10"
label="アクション2"
menubarPath="topmenu/sepa01"
style="push"/>
<action
id="rcpmail.action9"
label="アクション1"
menubarPath="topmenu/sepa01"
style="push"/>
</actionSet>
</extension>
参考:~
[[3−3.メニューバー、ツールバーとアクションの紐付け(ア...
*** トップレベルのメニューの指定したところに、アクション...
Eclipseでトップレベルにメニューを追加するといちばん右では...
org.eclipse.ui.internal.ide.WorkbenchActionBuilder
がEclipseのメニューバーを構築しているのですが、そのメソッ...
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(createEditMenu());
menuBar.add(createNavigateMenu());
menuBar.add(createProjectMenu());
menuBar.add(new GroupMarker(IWorkbenchActionConst...
menuBar.add(createWindowMenu());
menuBar.add(createHelpMenu());
}
となっていて、プロジェクトとウィンドウの間に
new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS);
が仕込まれています。で、このキー値をplugin.xmlに指定すれ...
実際にさっきのサンプルでもやってみましょう。
ApplicationActionBarAdvisor#fillMenuBar を以下のように変...
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(new GroupMarker(IWorkbenchActionConstants....
menuBar.add(createHelpMenu()); ↑追加
}
さて、この IWorkbenchActionConstants.MB_ADDITIONS という...
<menu id="topmenu" label="トップメニュー"
path="additions"> <-追加
<groupMarker name="sepa01"/>
</menu>
<action id="nu.mine.kino.plugin.samples.rcp.action1"
label="アクション。"
menubarPath="topmenu/sepa01" style="push"/>
</actionSet>
としておけばGroupMarkerの箇所にメニューが追加されます。
さて、実はIWorkbenchActionConstants.MB_ADDITIONS(値はaddi...
もちろん、
menuBar.add(new GroupMarker("hoge"));
としてplugin.xmlを path="hoge" とすると、グループマーカの...
***SeparatorとGroupMarkerの違い [#z4f9a06c]
<separator name="sepa01"/>と<groupMarker name="sepa01"/>
の違いや
menu.add(new Separator("group01"));
menu.add(new GroupMarker("group01"));
の違いについてですが、Separatorは違うグループ殿間に「セパ...
**関連ページ [#n86878fd]
[[プラグイン開発のTIPS集/org.eclipse.ui.IWorkbenchWindowA...
-[[メニューの作り方>http://www.limy.org/program/eclipse/p...
<action class="sample.SamplePopupAction" id="sample.Samp...
label="Popup Action" menubarPath="sample.menu/additions...
**キー値の一覧 [#v8bf1e64]
-[[IWorkbenchActionConstantsのJavaDoc:http://help.eclipse...
**サンプルソース [#r8edf242]
-[[プラグインのソース(ViewVC)>http://www.masatom.in/viewv...
**関連リンク [#m19adebc]
-Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Ec...
----
この記事は
#vote(おもしろかった[12],そうでもない[0])
-menu要素(サブメニュー)の場合は、その場所を指定して、その...
-メニュー自体のインスタンス(IMenuManager)を取得する方法が...
WorkbenchWindow activeWorkbenchWindow = (WorkbenchWind...
.getWorkbench().getActiveWorkbenchWindow();
IMenuManager menuManager = activeWorkbenchWindow.getAc...
.getMenuManager();
でいけるけど、WorkbenchWindow が internalなんだよね。 --...
-Eclipse エキスパートガイドによると、xmlタグ付けの順番と...
-追加したとき実際に実行されるアクションの作り方は、[[ワー...
- org.eclipse.ui.internal.ide.WorkbenchActionBuilder#crea...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
*Eclipse/RCPのメニューバーの構築 [#xfe6d579]
Eclipse/RCPのメニューバーの構築は、以下の2つの方法で行う...
-プログラムからプログラマティカルに
-拡張ポイントから宣言的に
[[TUTORIALS 26 Developing for the Rich Client Platform:ht...
によると
-(メニューと、常に表示しておくアクションなど)最小のスケル...
-それ以外は宣言的に
となっていますね。
**プログラムからプログラマティカルに [#f392fc18]
さて、スケルトンとなる最小の構成をEclipse/RCPのフレームワ...
RCPは
IPlatformRunnable -> WorkbenchAdvisor
-> WorkbenchWindowAdvisor -> ActionBarAdvisor
(の実装クラス)という順番に呼び出されるパタンになっていて...
org.eclipse.ui.application.ActionBarAdvisor
内の
protected void makeActions(IWorkbenchWindow window);
protected void fillMenuBar(IMenuManager menuBar) ;
をOverrideすることで実装します。
ここでは下記のように実装しました。
-ActionBarAdvisor の実装クラス
package nu.mine.kino.plugin.samples.rcp;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAc...
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
public class ApplicationActionBarAdvisor extends ActionB...
private IWorkbenchWindow window;
private IWorkbenchAction quitAction;
private IWorkbenchAction aboutAction;
private IWorkbenchAction helpSearchAction;
public ApplicationActionBarAdvisor(IActionBarConfigure...
super(configurer);
window = configurer.getWindowConfigurer().getWindow();
}
protected void makeActions(IWorkbenchWindow window) {
quitAction = ActionFactory.QUIT.create(window);
register(quitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
helpSearchAction = ActionFactory.HELP_SEARCH.create(...
register(helpSearchAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(createHelpMenu());
}
/**
* Creates and returns the File menu.
*/
private MenuManager createFileMenu() {
MenuManager menu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE);
menu.add(quitAction);
return menu;
}
private MenuManager createHelpMenu() {
// 根っこのメニュー追加。
MenuManager menu = new MenuManager("&Help",
IWorkbenchActionConstants.M_HELP); // helpという...
menu.add(helpSearchAction);
menu.add(new Separator("group01"));
// ヘルプと、aboutの間にgroup01というグループを追加
menu.add(aboutAction);
return menu;
}
}
これで、以下のようにメニューバーが構築されました。
#ref(menu01.png)
[ワークベンチ]
|
|-[File]
| -[終了]
|
|-[Help]
| -[検索]
| -[○○について]
ポイントは
-すでに定義済みのアクションは
quitAction = ActionFactory.QUIT.create(window); <- 終了
などActionFactoryから取得できる
-protected void fillMenuBar(IMenuManager menuBar);
がワークベンチのメニューバーのインスタンスなので、そこに...
などです。
***グループ名などについて [#u9f12328]
さて、先のコードで、
MenuManager menu = new MenuManager("&Help",IWorkbenchAct...
や
menu.add(new Separator("group01"));
などがありました。この IWorkbenchActionConstants.M_HELP (...
[ワークベンチ]
|
|-[File] - "file" <- IWorkbenchActionCons...
| -[終了]
|
|-[Help] - "help" <- IWorkbenchActionCons...
| -[検索]
| -"セパレータ" - "group01"
| -[○○について] -
この場合、"セパレータ"部分は、正式名称((完全修飾メニュー...
help/group01 (メニュー名/グループ名)
となります。この名称を、拡張ポイントでアクションを追加す...
**拡張ポイントから宣言的に [#ge84d99c]
では先の"セパレータ"部分にアクションを追加します。セパレ...
help/group01
でした。
plugin.xmlに以下を追加します。
<extension point="org.eclipse.ui.actionSets" >
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<action
label="追加アクション。" <- 表示されるアクション名
class="nu.mine.kino.plugin.samples.rcp.actions.Ho...
menubarPath="help/group01" <- さっきの完全修飾メ...
id="nu.mine.kino.plugin.samples.rcp.actions.hogea...
</action>
</actionSet>
</extension>
これで先のhelp/group01の箇所に "追加アクション。" という...
#ref(menu02.png)
図で書くと以下の通りですね。
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加アクション。] - <- plugin.xml...
| -[○○について] -
このように、セパレータなどを用いて、提供側の開発者がメニ...
*** アクションではなく、サブメニューを追加する [#hed5215b]
次に、サブメニューを追加したいと思います。具体的には次の...
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加メニュー。] - "menu01" <- plugin.xml...
| -"セパレータ" - "sepa01" <- plugin.xml...
| -[追加アクション。] - <- plugin.xml...
| -[○○について] -
セパレータ部分に「追加メニュー。」というサブメニューを追...
plugin.xmlに以下の通り記述します。さっきのactionSetsはい...
<extension point="org.eclipse.ui.actionSets" >
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<menu
id="menu01" <- 名称は menu01
label="追加メニュー。"
path="help/group01"> <-このサブメニューはセパ...
<separator name="sepa01"/> <-さらにセパレータを...
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
</actionSet>
</extension>
順に見ていきます。
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/>
</menu>
で「pathの箇所にlabelのサブメニューをidの名称で追加します...
次にセパレータを追加しています。セパレータの完全修飾メニ...
help/menu01/sepa01
となります。
あとはアクションですが、先と同じで
menubarPath="help/menu01/sepa01"
によって、先のサブメニューの下のセパレータ部分にこのアク...
*** 複数のアクションを追加する [#i51aa936]
続いて以下のように複数のアクションを追加しました。
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.a...
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/>
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
<action
label="追加アクション2。"
class="nu.mine.kino.plugin.samples.rcp.actions.Hog...
menubarPath="help/group01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeac...
</action>
</actionSet>
予想通り
[ワークベンチ]
|
|-[File] - "file" <- IWorkbench...
| -[終了]
|
|-[Help] - "help" <- IWorkbench...
| -[検索]
| -"セパレータ" - "group01"
| -[追加アクション2。]" - "group01" <- plugin.xml...
| -[追加メニュー。] - "menu01" <- plugin.xml...
| -"セパレータ" - "sepa01" <- plugin.xml...
| -[追加アクション。] - "sepa01" <- plugin.xml...
| -[○○について] -
となりました。
*** 存在しない完全修飾メニュー・パスを指定する [#v4898d72]
さらに以下の内容をplugin.xmlに追加します。
<action
id="nu.mine.kino.plugin.samples.rcp.action3"
label="追加アクション3"
menubarPath="help/hogehoge" <- 存在しない完全修飾メニ...
/>
すると
#ref(menu03.png)
一番下に追加されました。
***まとめると、以下のようになります。 [#caa1b6d6]
-プログラムで完全修飾メニュー・パスを追加して、メニューを...
-完全修飾メニュー・パスを指定して、アクションを追加できる
-完全修飾メニュー・パスを指定して、サブメニューを追加でき...
-サブメニュー追加時は、新しい名称をid要素で定義する(help/...
-サブメニューの下に追加したセパレータの箇所へのアクション...
-サブメニューは子要素がないと表示されない
-完全修飾メニュー・パスの箇所には、複数のメニューやアクシ...
-存在しない完全修飾メニュー・パスを指定すると、一番下に追...
***サブメニューの下にさらにサブメニューを表示する。 [#u28...
次に、以下のような階層的なメニュー構造を作ってみたいと思...
[ワークベンチ]
|
|-[File] - "file" ...
| -[終了]
|
|-[Help] - "help" ...
| -[検索]
| -"セパレータ" - "group01"
| -[追加メニュー。] - "menu01" ...
| -"セパレータ" - "sepa01" ...
| -[追加アクション。] - ...
| -[さらに下にメニュー。] - "menu02" ...
| -"セパレータ" - "sepa02" ...
| -[さらに下に追加アクション。] - ...
| -[○○について] -
#ref(menu04.png)
plugin.xmlは以下のようにします。
<actionSet label="ラベル(つかってる?)"
visible="true" id="nu.mine.kino.plugin.samples.rcp.act...
<menu
id="menu01"
label="追加メニュー。"
path="help/group01">
<separator name="sepa01"/> <- 完全名は help/menu01/...
</menu>
<action
label="追加アクション。"
class="nu.mine.kino.plugin.samples.rcp.actions.HogeA...
menubarPath="help/menu01/sepa01"
id="nu.mine.kino.plugin.samples.rcp.actions.hogeacti...
</action>
<menu
id="menu02"
label="さらに下にメニュー。"
path="help/menu01/sepa01"> <- help/menu01/sepa01 ...
<separator name="sepa02"/> <- 完全名は help/menu01...
</menu>
<action
id="nu.mine.kino.plugin.samples.rcp.action5"
label="さらに下に追加アクション。"
menubarPath="help/menu01/menu02/sepa02" >
</action>
</actionSet>
ポイントはhelp/menu01/sepa01に追加したサブメニューの完全...
help/menu02/ ではなく help/menu01/menu02/
となることです。即ちそのしたのセパレータも
help/menu01/menu02/sepa02
となります。従ってそのセパレータに追加するアクションのmen...
<action
id="nu.mine.kino.plugin.samples.rcp.action5"
label="さらに下に追加アクション。"
menubarPath="help/menu01/menu02/sepa02" > <- これ
</action>
となるわけです。
*** トップレベルのメニューにアクションを追加したい。 [#k7...
トップレベルのメニュー(ワークベンチが保持するIMenuManager...
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="rcpmail.actionSet8"
label="rcpmail.actionSet8"
visible="true"> <-これ、重要!!
<menu
id="topmenu"
label="トップメニュー">
<separator name="sepa01"/>
</menu>
<action
id="rcpmail.action10"
label="アクション2"
menubarPath="topmenu/sepa01"
style="push"/>
<action
id="rcpmail.action9"
label="アクション1"
menubarPath="topmenu/sepa01"
style="push"/>
</actionSet>
</extension>
参考:~
[[3−3.メニューバー、ツールバーとアクションの紐付け(ア...
*** トップレベルのメニューの指定したところに、アクション...
Eclipseでトップレベルにメニューを追加するといちばん右では...
org.eclipse.ui.internal.ide.WorkbenchActionBuilder
がEclipseのメニューバーを構築しているのですが、そのメソッ...
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(createEditMenu());
menuBar.add(createNavigateMenu());
menuBar.add(createProjectMenu());
menuBar.add(new GroupMarker(IWorkbenchActionConst...
menuBar.add(createWindowMenu());
menuBar.add(createHelpMenu());
}
となっていて、プロジェクトとウィンドウの間に
new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS);
が仕込まれています。で、このキー値をplugin.xmlに指定すれ...
実際にさっきのサンプルでもやってみましょう。
ApplicationActionBarAdvisor#fillMenuBar を以下のように変...
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu());
menuBar.add(new GroupMarker(IWorkbenchActionConstants....
menuBar.add(createHelpMenu()); ↑追加
}
さて、この IWorkbenchActionConstants.MB_ADDITIONS という...
<menu id="topmenu" label="トップメニュー"
path="additions"> <-追加
<groupMarker name="sepa01"/>
</menu>
<action id="nu.mine.kino.plugin.samples.rcp.action1"
label="アクション。"
menubarPath="topmenu/sepa01" style="push"/>
</actionSet>
としておけばGroupMarkerの箇所にメニューが追加されます。
さて、実はIWorkbenchActionConstants.MB_ADDITIONS(値はaddi...
もちろん、
menuBar.add(new GroupMarker("hoge"));
としてplugin.xmlを path="hoge" とすると、グループマーカの...
***SeparatorとGroupMarkerの違い [#z4f9a06c]
<separator name="sepa01"/>と<groupMarker name="sepa01"/>
の違いや
menu.add(new Separator("group01"));
menu.add(new GroupMarker("group01"));
の違いについてですが、Separatorは違うグループ殿間に「セパ...
**関連ページ [#n86878fd]
[[プラグイン開発のTIPS集/org.eclipse.ui.IWorkbenchWindowA...
-[[メニューの作り方>http://www.limy.org/program/eclipse/p...
<action class="sample.SamplePopupAction" id="sample.Samp...
label="Popup Action" menubarPath="sample.menu/additions...
**キー値の一覧 [#v8bf1e64]
-[[IWorkbenchActionConstantsのJavaDoc:http://help.eclipse...
**サンプルソース [#r8edf242]
-[[プラグインのソース(ViewVC)>http://www.masatom.in/viewv...
**関連リンク [#m19adebc]
-Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Ec...
----
この記事は
#vote(おもしろかった[12],そうでもない[0])
-menu要素(サブメニュー)の場合は、その場所を指定して、その...
-メニュー自体のインスタンス(IMenuManager)を取得する方法が...
WorkbenchWindow activeWorkbenchWindow = (WorkbenchWind...
.getWorkbench().getActiveWorkbenchWindow();
IMenuManager menuManager = activeWorkbenchWindow.getAc...
.getMenuManager();
でいけるけど、WorkbenchWindow が internalなんだよね。 --...
-Eclipse エキスパートガイドによると、xmlタグ付けの順番と...
-追加したとき実際に実行されるアクションの作り方は、[[ワー...
- org.eclipse.ui.internal.ide.WorkbenchActionBuilder#crea...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: