java - Eclipse RCP 命令框架 : I am lost

标签 java eclipse-rcp

我有两个单独的 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/

相关文章:

java - 细菌的基本递归

java - 无法加载放置在 mac 资源中的 chrome 可执行文件(在 windows 中运行良好)

java - 如何在 SWT 应用程序中显示 PDF?

eclipse - Eclipse 作为应用程序框架 (RCP) 的成功案例

java - 如何报告后台任务的进度?

Java仪表板登录错误

java - 在方法中创建作用域的最简单方法是什么?

java - Java 中崩溃报告的策略/技术

java - LazyInitializationException 尽管有 Spring 事务?

eclipse-rcp - 使用 tycho 对产品进行实体化会导致缺少 .eclipseproduct 文件