我有两个单独的视图,它们都显示多个值列表。两个观点同时开放。
我有一个通用命令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条件只能使用当前评估上下文。看来我不能使用命令提供的任何参数。这意味着根据完整工作台的状态启用或禁用处理程序。
答案 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。您可以尝试自己实现类似的东西。