自己创建的Eclipse rcp 插件中需要添加像Eclipse中的菜单栏和工具栏,实现该功能可以通过两种方式:1种是通过扩展点,2种是通过在ApplicationActionBarAdvisor 类中编写代码实现。
1、通过扩展点实现:org.eclipse.ui.menus 用于扩展菜单栏,该例子实现eclipse中的window菜单栏中的部分Action
ViewsShortlistContributionItem 源码:
package com.workflow.menu;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.actions.ContributionItemFactory;
/**
* 添加show view 的动态菜单项
* @author lww
*
*/
public class ViewsShortlistContributionItem extends CompoundContributionItem {
@Override
protected IContributionItem[] getContributionItems() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IContributionItem item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist
List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();
menuContributionList.add(item);
return menuContributionList.toArray(new IContributionItem[0]);
}
}
PerspectiveContributionItem 源码:
package com.workflow.menu;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.actions.ContributionItemFactory;
/**
* 创建透视图二级菜单
* @author lww
*
*/
public class PerspectiveContributionItem extends CompoundContributionItem{
@Override
protected IContributionItem[] getContributionItems() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IContributionItem item = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);
List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();
menuContributionList.add(item);
return menuContributionList.toArray(new IContributionItem[0]);
}
}
plugin.xml 中的内容如下:
这样就实现了自己的rcp的菜单中添加了window菜单栏,效果如下:
另一种方式是通过代码实现:
package mydesigner;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ContributionItemFactory;
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 IWorkbenchAction exitAction;//退出按钮
private IWorkbenchAction aboutAction;//关于按钮
private IWorkbenchAction newAction;//新建按钮
private IWorkbenchAction saveProjectAction;// 保存工程文件
private IWorkbenchAction saveAllAction;// 保存全部
private IWorkbenchAction newWindowAction;
private IContributionItem item;
//文件菜单栏中的action
private IWorkbenchAction importAction;
private IWorkbenchAction exportAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
//创建Action
protected void makeActions(IWorkbenchWindow window) {
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
newAction = ActionFactory.NEW.create(window);
register(newAction);//新建按钮
saveProjectAction = ActionFactory.SAVE.create(window);
saveAllAction = ActionFactory.SAVE_ALL.create(window);
this.getActionBarConfigurer().registerGlobalAction(saveProjectAction); // ctrl+s,保存工程文件。
this.getActionBarConfigurer().registerGlobalAction(saveAllAction);// 激活快捷键,ctrl+shift+s,全部保存。
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
register(newWindowAction);//注册成全局Action
item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist
importAction = ActionFactory.IMPORT.create(window);
register(importAction);
exportAction = ActionFactory.EXPORT.create(window);
register(exportAction);
}
//菜单栏
protected void fillMenuBar(IMenuManager menuBar) {
//File菜单栏
MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
fileMenu.add(exitAction);
fileMenu.add(new Separator());//添加分隔栏
fileMenu.add(newAction);
fileMenu.add(new Separator());
fileMenu.add(importAction);//导入
fileMenu.add(exportAction);//导出
//Help菜单栏
MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
helpMenu.add(aboutAction);
//Window菜单栏
MenuManager windowMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW);
windowMenu.add(newWindowAction);
MenuManager showView = new MenuManager("Show View");
showView.add(item);//添加ContributionItem
windowMenu.add(showView);
menuBar.add(fileMenu);//把菜单栏添加到工作空间
menuBar.add(helpMenu);
menuBar.add(windowMenu);
}
//添加到工具栏
@Override
protected void fillCoolBar(ICoolBarManager coolBar) {
ToolBarManager barManager = new ToolBarManager();
barManager.add(saveProjectAction);
barManager.add(saveAllAction);
coolBar.add(barManager);
}
}
效果如下图:
若想添加其它的Action,可以在类:
org.eclipse.ui.IWorkbenchActionConstants
org.eclipse.ui.actions.ActionFactory
org.eclipse.ui.actions.ContributionItemFactory
org.eclipse.ui.IWorkbenchCommandConstants 查找到对应Action的实现,eclipse实现。