上次说到了菜单 工具条按钮 上下文菜单都已经改为用command的方式去做了,这次稍微详细地说说。

在command的实现拓展点handler上右键,可以看到有enabledWhen,activeWhen,在menu上的command右键,会有visibleWhen的选项,都是一些可以控制command可见,可用的状态,如下图,可以看到一些固定的使用方法已经定义好了在里面了。

具体的使用方法可以参考官方的command core expression

除了这些已经帮我们定义好的,如果还有自己的需求,可以在此基础上添加自己的表达式。

新建一个org.eclipse.core.expressions扩展点,如图这么设置它,意思是在当且只有一个元素被选中的时候。

使用的时候只需要在我们定义好的handler上增加enabledWhen,然后选择我们定义好的表达式,这样的意思就是当且只有一个元素被选中的时候,这个handler为可用,否则不可用。

由于这个表达式是基于selection的,所以我们要在我们的视图上进行注册。

public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
// 使selection对这个视图起作用
getSite().setSelectionProvider(viewer);
}

在eclipse里包含了很多官方已经定义好的command,有些时候我们拿过来就直接可以用,包括功能,图标等等。

比如eclipse中的about菜单。

我们在我们的菜单中添加一个command,ID指向org.eclipse.ui.help.aboutAction,这样便可以使用了。

还有一种通过代码的方式,往ActionFactory中加入它们。使用方法如下:

@Override
protected void makeActions(IWorkbenchWindow window)
{
IWorkbenchAction quickStartAction = ActionFactory.INTRO.create(window);
register(quickStartAction);
IWorkbenchAction resetView = ActionFactory.RESET_PERSPECTIVE
.create(window);
register(resetView);
}

command也支持直接从代码中调用,方法如下:

IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
try {
handlerService.executeCommand("add.command", null);
} catch (Exception ex) {
throw new RuntimeException("add.command not found");
// Give message
}
}

command还能定义命令接受参数,提供自己更为细致的表达式判断,还可以支持在runtime环境中定义command,这和action有点像。余下的部分留在下次说好了。

参考链接:http://www.vogella.com/tutorials/EclipseCommandsAdvanced/article.html

最新文章

  1. Javaweb学习笔记——EL表达式
  2. HTML5打造的炫酷本地音乐播放器-喵喵Player
  3. 软考之PV操作(同步)
  4. 模拟jquery实现each方法和map方法
  5. Mysql增删改
  6. delphi下TList的用法
  7. BZOJ 2501 Soda Machine
  8. 使用sqlserver日期函数获取当前日期
  9. 2015 NOIP day1 t1 神奇的幻方 模拟
  10. Windows7 下配置添加ASP功能
  11. Eclipse搭建服务器
  12. 使用openCV的静态库编译
  13. JAVA语法题
  14. 如何编写高质量CSS
  15. Yahoo前端优化十四条军规
  16. Mybatis Dynamic Query 1.0.2版本
  17. iOS-沙盒目录
  18. Zend 无限试用
  19. 在SharePoint 2013 场中移除服务器,提示 cacheHostInfo is null 错误
  20. HTML学习笔记CSS

热门文章

  1. Time & Space Complexity
  2. 给出一个javascript的Helloworld例子
  3. python中内存地址
  4. SAS学习笔记12 SAS数据清洗和加工
  5. 分布式服务追踪与调用链 Zikpin
  6. Linux中 ls -l 命令显示结果中的每一列的含义
  7. hdu 2089 入手数位dp问题
  8. hdu 1875 最小生成树 prime版
  9. MySQL 的COUNT(x)性能怎么样?
  10. 使用ef core自动生成mysql表和数据编码的问题