chapter 6
1、 ApplicationWorkbenchWindowAdvisor中的preWindowOpen()方法可以设置顶级菜单可用:
//设置顶级菜单可用,但不设置可见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: