我有两个单独的 View ,它们都显示多个值列表。两个 View 同时打开。
我有一个通用命令 AddNewItemInList
,我想将其添加到两个 View 的工具栏中。该命令应将一个新项目添加到当前具有焦点的列表中。如果用户尚未选择列表,则应禁用该命令。
我目前使用以下命令来执行命令。
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;
}
}
到目前为止一切顺利,但我不知道如何相应地启用或禁用处理程序。我已经阅读了 Eclipse Core Commands 框架。我很迷茫。
已回答的问题: 如何创建一个表达式来查看 View 的 getAdapter() 方法是否不返回 null? -> 在下面回答
如何获取配置此命令的 View (而不是当前 Activity 的 View )? -> 我可以将 viewId 添加为命令参数
剩余问题: 我应该在我的 plugin.xml 中配置两个单独的 Handler 实例(每个 View 一个)吗? -> enabledWhen 条件只能使用当前的评估上下文。看来我不能使用命令提供的任何参数。这意味着根据整个工作台的状态启用或禁用处理程序。
最佳答案
How can I create an expression to see if the getAdapter() method of the view does not return null?
您可以使用 custom property testers .它需要很多样板,而且看起来很丑,但它确实有效。
编辑:实际上,it's a lot simpler :
<with variable="activePart">
<adapt type="com.foo.MyList"/>
</with>
关于java - Eclipse RCP 命令框架 : I am lost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9085956/