1、改进原因及内容
searchview视图的license key按钮不是很明显,所以在file菜单中增加license key菜单项,提供相同的功能
程序没有提供打开视图的功能,在视图关闭后就无法打开了,所以增加view菜单提供打开视图的功能
菜单的使用分两步:
定义动作来实现具体功能
将动作加到menumanager中,由menumanager来自动管理
2、定义动作
(1)license key菜单项对应的动作
package com.xqtu.google.actions;
import org.eclipse.jface.action.action;
import org.eclipse.jface.wizard.wizarddialog;
import org.eclipse.ui.iworkbenchwindow;
import com.xqtu.google.wizards.licensekeywizard;
public class licensekeymenuaction extends action {
private iworkbenchwindow window;
public licensekeymenuaction(iworkbenchwindow window) {
this.window = window;
settext("license &key...@ctrl+k");
}
public void run() {
licensekeywizard wizard = new licensekeywizard();
wizarddialog dialog = new wizarddialog(window.getshell(), wizard);
dialog.open();
}
}
普通动作需要扩展action类(实现iaction接口的缺省基类),并且重写run方法来实现动作要完成的特定功能
动作类通常在其构造方法中进行一些属性的初始化工作,如settext方法设置动作相关的文本,在菜单中表现为菜单项文本
动作类在其构造方法中做的另一件事是保存window级(如iworkbenchwindow)的引用,以便在后面的run方法中使用
run方法实现了与searchview视图相同的功能:打开向导窗口
(2)显示视图的动作
package com.xqtu.google.actions;
import org.eclipse.jface.action.action;
import org.eclipse.ui.iworkbenchpage;
import org.eclipse.ui.iworkbenchwindow;
import org.eclipse.ui.partinitexception;
public class viewaction extends action {
private iworkbenchwindow window;
private string viewid;
public viewaction(iworkbenchwindow window, string viewid) {
this.window = window;
this.viewid = viewid;
settext("show " + viewid.substring(viewid.lastindexof(".") + 1));
}
public void run() {
iworkbenchpage[] pages = window.getpages();
for (int i = 0, len = pages.length; i < len; i++) {
try {
pages[i].showview(viewid);
break;
} catch (partinitexception piex) {
continue;
}
}
}
}
viewaction类的实现方法和licensekeymenuaction类是一样的,不同的是构造方法中多了viewid参数,用来接收视图id
菜单项是根据视图id生成的(不是很妥)
在run方法中,先获得workbenchwindow中的workbenchpage,然后调用workbenchpage的showview方法显示对应视图id的视图(感觉for循环写得不是很好,但暂时没有想到别的方法)
3、将动作加到menumanager中
修改googleworkbenchadvisor类的fillactionbars方法,将动作加到menumanager中
public void fillactionbars(iworkbenchwindow window,
iactionbarconfigurer configurer, int flags) {
imenumanager menubar = configurer.getmenumanager();
menumanager filemenu = new menumanager("&file",
iworkbenchactionconstants.m_file);
filemenu.add(new groupmarker(iworkbenchactionconstants.file_start));
filemenu.add(new groupmarker(iworkbenchactionconstants.mb_additions));
filemenu.add(new licensekeymenuaction(window));
filemenu.add(actionfactory.quit.create(window));
filemenu.add(new groupmarker(iworkbenchactionconstants.file_end));
menubar.add(filemenu);
menumanager viewmenu = new menumanager("&view");
viewmenu.add(new viewaction(window, browserview.id));
viewmenu.add(new viewaction(window, searchview.id));
menubar.add(viewmenu);
}
闽公网安备 35060202000074号