根据ViewPart中的选择启用/禁用工具栏 - 命令,而不是透视

时间:2013-08-16 11:50:51

标签: eclipse-plugin eclipse-rcp selection toolbar

我有一个由多个ViewPart组成的视角。其中一个ViewPart具有使用menuContributionlocationURI="toolbar:..."分配的命令。

带有工具栏命令的ViewPart只包含一个子项(TreeView),this.getSite().setSelectionProvider(child)中的createPartControl(Composite) - 方法。

问题是,当我点击我的Perspective中的其他ViewPart之一时,命令被禁用,但选择确实在TreeView - 组件中抵制。 我想enabledWhen - 条件不再有效了,因为selection - 变量现在指向在另一个ViewPart中抵制的内容。

这会分散注意力,因为当选择TreeView中的有效行时,应激活工具栏按钮。

我如何告诉我的核心表达式,它只应检查工具栏中的ViewPart选择是否存在而不是全局选择?

enter image description here

1 个答案:

答案 0 :(得分:0)

我有类似的问题,我最终做的是实现我自己的属性测试器。这可能是最简单的方法,因为预定义的selection变量将始终指向全局选择。

粗略地说,您需要按照以下步骤操作。

  1. org.eclipse.core.expressions插件添加到您的依赖项中。

  2. 定义org.eclipse.core.expressions.propertyTesters扩展点的扩展名。这看起来类似于以下内容(documentation link):

    <extension
         point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            class="your.package.TreeItemSelectionPropertyTester"
            id="your.package.treeItemSelectionPropertyTester"
            namespace="your.namespace"
            properties="itemSelected"
            type="java.lang.Object">
      </propertyTester>
    </extension>
    
  3. 实施PropertyTester代码。正如上面的文档所说,该类应该是公共的,并且应该扩展org.eclipse.core.expressions.PropertyTester类。

    public class CodeSelectionPropertyTester extends PropertyTester {
        @Override
        public boolean test(Object receiver, String property,
                Object[] args, Object expectedValue) {
            if (property.equals("itemSelected")) {
                // write your own code to test
                // whether there is a valid selection...
            }
    
            // ...
        }
    }
    
  4. 在enabledWhen子句中使用已实现的属性测试器。

     <enabledWhen>
        <test
              property="your.namespace.itemSelected">
        </test>
     </enabledWhen>