zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Iterable,Iterator和forEach
    集合的线程安全性
    Servlet生命周期
    JavaWeb应用的生命周期
    将博客搬至CSDN
    (五)新类库的构件
    Python input和print函数
    python----调试
    Excel决定吃什么
    MATLAB—地图
  • 原文地址:https://www.cnblogs.com/demonrain/p/3962146.html
Copyright © 2011-2022 走看看