我有一个由多个ViewPart
组成的视角。其中一个ViewPart
具有使用menuContribution
和locationURI="toolbar:..."
分配的命令。
带有工具栏命令的ViewPart
只包含一个子项(TreeView
),this.getSite().setSelectionProvider(child)
中的createPartControl(Composite)
- 方法。
问题是,当我点击我的Perspective中的其他ViewPart
之一时,命令被禁用,但选择确实在TreeView
- 组件中抵制。
我想enabledWhen
- 条件不再有效了,因为selection
- 变量现在指向在另一个ViewPart中抵制的内容。
这会分散注意力,因为当选择TreeView
中的有效行时,应激活工具栏按钮。
我如何告诉我的核心表达式,它只应检查工具栏中的ViewPart
选择是否存在而不是全局选择?
答案 0 :(得分:0)
我有类似的问题,我最终做的是实现我自己的属性测试器。这可能是最简单的方法,因为预定义的selection
变量将始终指向全局选择。
粗略地说,您需要按照以下步骤操作。
将org.eclipse.core.expressions
插件添加到您的依赖项中。
定义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>
实施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...
}
// ...
}
}
在enabledWhen子句中使用已实现的属性测试器。
<enabledWhen>
<test
property="your.namespace.itemSelected">
</test>
</enabledWhen>