Plug-in 视图菜单

来源:互联网 发布:js 12.7mm 编辑:程序博客网 时间:2024/06/09 22:16

Plug-in 视图菜单

首先申明下,本文为笔者学习《Eclipse插件开发学习笔记》的笔记,并加入笔者自己的理解和归纳总结。

1、视图菜单

(1) 扩展点【org.eclipse.ui.viewActions】
在【Extensions】中添加【org.eclipse.ui.viewActions】。
在【org.eclipse.ui.viewActions】中添加【viewContribution】,"targetID"指定对应的视图DemoViewPart。
在【viewContribution】中添加相应的【menu】和【action】。

<extensionpoint="org.eclipse.ui.viewActions"><viewContributionid="com.plugin.blog.demo.viewContribution.DemoViewPart"targetID="com.plugin.blog.demo.view.DemoViewPart"><menuid="com.plugin.blog.demo.DemoViewPart.menu"label="下拉菜单"path="additions"><separatorname="DemoViewPart.menu.separator"></separator></menu><actionclass="com.plugin.blog.demo.actions.UserSelectionAction"icon="icons/icon_selection.png"id="com.plugin.blog.demo.actions.UserSelectionAction"label="用户信息"menubarPath="com.plugin.blog.demo.DemoViewPart.menu/DemoViewPart.menu.separator"style="push"toolbarPath="additions"></action></viewContribution></extension>
(2) 【action】
在"class"中选择对应的Action,必须继承IViewActionDelegate类。
在menubarPath和toolbarPath中分别定义了下拉菜单和工具栏菜单的路径。
UserSelectionAction类,显示被选择列表信息

public class UserSelectionAction implements IViewActionDelegate {private IViewPart mView;private User mUser;@Overridepublic void run(IAction action) {if (mView != null && mUser != null) {MessageBox mb = new MessageBox(mView.getSite().getShell());mb.setText("消息");mb.setMessage("用户" + mUser.getName() + "被选择!");mb.open();}}@Overridepublic void selectionChanged(IAction action, ISelection selection) {if (selection != null) {IStructuredSelection ss = (IStructuredSelection) selection;if (!ss.isEmpty()) {mUser = (User) ss.getFirstElement();action.setEnabled(true);} else {action.setEnabled(false);}} else {action.setEnabled(false);}}@Overridepublic void init(IViewPart view) {this.mView = view;}}
显示如下

2、视图Popup菜单

(1) 扩展点【org.eclipse.ui.popupMenus】
在【Extensions】中添加【org.eclipse.ui.popupMenus】
在【org.eclipse.ui.popupMenus】中添加【viewContribution】,"targetID"指定对应的视图
在【viewContribution】中添加相应的【menu】和【action】。

<extensionpoint="org.eclipse.ui.popupMenus"><viewerContributionid="com.plugin.blog.demo.viewerContribution.DemoViewPart"targetID="com.plugin.blog.demo.view.DemoViewPart"><menuid="com.plugin.blog.demo.popup.view.menu"label="PopupViewMenu"path="additions"></menu><actionclass="com.plugin.blog.demo.actions.AddUserAction"icon="icons/icon_add.png"id="com.plugin.blog.demo.actions.AddUserAction"label="新增用户"menubarPath="com.plugin.blog.demo.popup.view.menu"></action></viewerContribution></extension>
(2) 【action】
在"class"中选择对应的Action,必须继承IWorkbenchWindowActionDelegate类。
AddUserAction类,添加一个新的用户,使用InputDialog来输入用户名。

public class AddUserAction implements IViewActionDelegate {private IViewPart mViewPart;@Overridepublic void run(IAction action) {if (mViewPart != null) {InputDialog dialog = new InputDialog(mViewPart.getViewSite().getShell(),"添加用户", "输入用户名:", "", null);dialog.open();String value = dialog.getValue();if (value != null && value.length() > 0) {UserManager.getInstance().addObject(new User(value, User.CATEGORY_ARRAY[0]));}}}@Overridepublic void selectionChanged(IAction action, ISelection selection) {}@Overridepublic void init(IViewPart view) {mViewPart = view;}}
(3) 在DemoViewPart类中注册右键菜单,添加到createPartControl方法中。
private void addMenu() {MenuManager menuManager = new MenuManager();menuManager.setRemoveAllWhenShown(true);Menu menu = menuManager.createContextMenu(mTable);mTable.setMenu(menu);getSite().registerContextMenu(menuManager, mTableViewer);}
显示如下

3、对象Popup菜单

(1) 扩展点【org.eclipse.ui.popupMenus】
在【org.eclipse.ui.popupMenus】中添加【objectContribution】,在"objectClass"中指定对象User。
在【objectContribution】中添加相应的【menu】和【action】

<extensionpoint="org.eclipse.ui.popupMenus"><objectContributionadaptable="false"id="com.plugin.blog.demo.objectContribution.User"objectClass="com.plugin.blog.demo.view.User"><menuid="com.plugin.blog.demo.popup.object.menu"label="删除用户"path="additions"></menu><actionclass="com.plugin.blog.demo.actions.RemoveUserAction"icon="icons/icon_remove.png"id="com.plugin.blog.demo.actions.RemoveUserAction"label="删除用户"menubarPath="com.plugin.blog.demo.popup.object.menu"></action></objectContribution></extension>
RemoveUserAction类
public class RemoveUserAction implements IObjectActionDelegate {private IWorkbenchPart mWorkbenchPart;private ISelection mSelection;@Overridepublic void run(IAction action) {if (mWorkbenchPart != null && mSelection != null) {IStructuredSelection ss = (IStructuredSelection) mSelection;if (!ss.isEmpty()) {User user = (User) ss.getFirstElement();boolean result = MessageDialog.openConfirm(mWorkbenchPart.getSite().getShell(), "删除用户", "您是否确认删除" + user.getName() + "?");if (result) {UserManager.getInstance().removeObject(user);}}}}@Overridepublic void selectionChanged(IAction action, ISelection selection) {this.mSelection = selection;}@Overridepublic void setActivePart(IAction action, IWorkbenchPart targetPart) {this.mWorkbenchPart = targetPart;}}
显示如下

4、视图代码中添加菜单

MessageAction类,继承Action类,实现功能
public class MessageAction extends Action {private IViewPart mPart;public MessageAction(IViewPart targetPart) {super("信息", ImageKeys.getImageDescriptor(ImageKeys.IMAGE_INFO));this.mPart = targetPart;}@Overridepublic void run() {super.run();MessageBox mb = new MessageBox(mPart.getSite().getShell());mb.setText("消息");mb.setMessage("消息");mb.open();}}
ImageKeys类,加载图片
public class ImageKeys {public static final String IMAGE_INFO = "icons/icon_info.png";public static ImageDescriptor getImageDescriptor(String path) {return Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, path);}}
DemoViewPart类,把MessageAction操作添加到视图的菜单栏、工具栏和右键菜单中。
private MessageAction mMsgAction;private void addMenu() {mMsgAction = new MessageAction(this);MenuManager menuManager = new MenuManager();menuManager.setRemoveAllWhenShown(true);menuManager.addMenuListener(new IMenuListener() {@Overridepublic void menuAboutToShow(IMenuManager manager) {addMenu(manager);}});Menu menu = menuManager.createContextMenu(mTable);mTable.setMenu(menu);getSite().registerContextMenu(menuManager, mTableViewer);IActionBars actionBar = getViewSite().getActionBars();addMenu(actionBar.getMenuManager());addMenu(actionBar.getToolBarManager());}private void addMenu(IContributionManager manager) {manager.add(mMsgAction);}
显示如下
    
原创粉丝点击