chapter 6
1、 ApplicationWorkbenchWindowAdvisor中的preWindowOpen()方法可以設置頂級菜單可用:
//設置頂級菜單可用,但不設置可見configurer.setShowMenuBar(true);
2、只有給頂級菜單添加選項之後纔可見,否則就是空的,顯示不出來
3、當創建一個RCP應用框架以後,他就生成了一個ActionBarAdvisor的實現類:ApplicationActionBarAdvisor。它有空的makeActions()和fillMenuBar()方法。makeActions()用來創建每一個action,並把它們的對象保存爲ApplicationActionBarAdvisor的成員變量。每一個action都需要註冊,這樣可以確保當窗口關閉時,這些action隨之被刪除。
protected void makeActions(IWorkbenchWindow window) {
exitaAction = ActionFactory.QUIT.create(window);
register(exitaAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
}
4、workbench定義了許多常用的action,他們可以在RCP應用中重複使用,而且他們都是ActionFactory的內部類。用的時候只需要實例化它們,他們已經被提前設置好了標準的name、id、icon。
protected void fillMenuBar(IMenuManager menuBar) {
//&後面的纔是要顯示的名字 第二個參數是id
MenuManager hyperbolaMenu = new MenuManager("&Hyperbola111","hyperbola");
hyperbolaMenu.add(exitaAction);
MenuManager helpMenu = new MenuManager("&Help111","help");
helpMenu.add(aboutAction);
menuBar.add(hyperbolaMenu);
menuBar.add(helpMenu);
}
5、menu manager用來保存action和子菜單的路徑,通過分組,可以創建action的邏輯結構。menu manager讓人不用關心菜單是怎麼創建的,只用關心你是以何種邏輯結構來組織和展示action:
protected void fillMenuBar(IMenuManager menuBar) {
//&後面的纔是要顯示的名字 第二個參數是id
MenuManager hyperbolaMenu = new MenuManager("&Hyperbola111","hyperbola");
hyperbolaMenu.add(exitaAction);
//構造方法中參數是分組名,就是把子菜單看成分組,
hyperbolaMenu.add(new GroupMarker("other-actions"));//分組1
hyperbolaMenu.add(new GroupMarker("another-actions"));//分組2
hyperbolaMenu.appendToGroup("other-actions", aboutAction);//給分組1添加了一個aboutaction
hyperbolaMenu.appendToGroup("another-actions", aboutAction);//給分組2添加了一個aboutaction
MenuManager helpMenu = new MenuManager("&Help111","help");
helpMenu.add(aboutAction);
menuBar.add(hyperbolaMenu);
menuBar.add(helpMenu);
}
6、例如aboutaction和exitaction是任何時候都可以使用的,他們獨立於應用程序,但我們需要創建一些在特定時刻起作用,而在其他狀態禁用的action: