Eclipse RCP命令框架:我迷路了

时间:2012-01-31 19:52:23

标签: java eclipse-rcp

我有两个单独的视图,它们都显示多个值列表。两个观点同时开放。

我有一个通用命令AddNewItemInList,我想将其添加到两个视图的工具栏中。该命令应将新项添加到当前具有焦点的列表中。如果用户尚未选择列表,则应禁用该命令。

我目前使用以下命令执行命令。

public class MyViewPart extends ViewPart {
    [...]
    public Object getAdapter(Class clazz) {
       if(clazz.equals(List.class))
           return getListInFocus(); // can be null if no list in focus
       return null;
    }
}

public class AddNewItemInList extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        MyList list = HandlerUtil.getActivePart(event).getAdapter(MyList.class);
        list.add(new Item());
        return null;
    }
}

到目前为止一直很好,但我不知道如何启用或禁用Handler。我已经阅读了Eclipse Core Commands框架。我很失落。

已回答的问题: 如何创建表达式以查看视图的getAdapter()方法是否不返回null? - >回答如下

如何获取配置此命令的视图(而不是当前活动视图)? - >我可以将viewId添加为命令参数

剩下的问题: 我应该在plugin.xml中配置两个单独的Handler实例(每个视图一个)吗? - > enabledWhen条件只能使用当前评估上下文。看来我不能使用命令提供的任何参数。这意味着根据完整工作台的状态启用或禁用处理程序。

2 个答案:

答案 0 :(得分:1)

  

如何创建表达式以查看视图的getAdapter()方法是否不返回null?

您可以使用custom property testers。它需要大量的样板并且看起来很丑,但它确实有效。

编辑:实际上,it's a lot simpler

<with variable="activePart">
  <adapt type="com.foo.MyList"/>
</with>

答案 1 :(得分:1)

自定义属性测试人员有一些问题,他们真的很难看。他们承诺做一些improvements in version 4.0。您可以尝试自己实现类似的东西。