2014年9月9日 高级命令command的使用(上)

    上次说到了菜单 工具条按钮 上下文菜单都已经改为用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

原文地址:https://www.cnblogs.com/demonrain/p/3962146.html