// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 #contents **Eclipse/RCPのメニューバーの構築 [#xfe6d579] Eclipse/RCPのメニューバーの構築は、以下の2つの方法で行うことができます。 -プログラムからプログラマティカルに -拡張ポイントから宣言的に [[TUTORIALS 26 Developing for the Rich Client Platform:http://www.eclipsecon.org/2005/tutorials.php]] によると -(メニューと、常に表示しておくアクションなど)最小のスケルトンをプログラマティカルに -それ以外は宣言的に となっていますね。 ***プログラムからプログラマティカルに [#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.IWorkbenchAction; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; public class ApplicationActionBarAdvisor extends ActionBarAdvisor { private IWorkbenchWindow window; private IWorkbenchAction quitAction; private IWorkbenchAction aboutAction; private IWorkbenchAction helpSearchAction; public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { 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(window); 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); がワークベンチのメニューバーのインスタンスなので、そこにアクションをaddしていく などです。 ***グループ名などについて [#u9f12328] さて、先のコードで、 MenuManager menu = new MenuManager("&File",IWorkbenchActionConstants.M_FILE); や menu.add(new Separator("group01")); などがありました。この IWorkbenchActionConstants.M_FILE (文字列は"file")や、group01などは、拡張ポイントを使った宣言的メニュー追加で必要になってきます。拡張ポイントから宣言的にメニューにアクションを追加する際に、どこに追加するのかをこのグループ名で指定します。具体的に説明すると、まず先のコーディングで、各メニューの要素には以下の名前が付けられたことになります。 [ワークベンチ] | |-[File] - "file" <- IWorkbenchActionConstants.M_FILE | -[終了] | |-[Help] - "help" <- IWorkbenchActionConstants.M_HELP | -[検索] | -"セパレータ" - "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.actionsets"> <action label="追加アクション。" <- 表示されるアクション名 class="nu.mine.kino.plugin.samples.rcp.actions.HogeAction" <- 実装クラス menubarPath="help/group01" <- さっきの完全修飾メニュー・パス id="nu.mine.kino.plugin.samples.rcp.actions.hogeaction"> </action> </actionSet> </extension> これで先のhelp/group01の箇所に "追加アクション。" というアクションが追加されました。 #ref(menu02.png) ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}