Eclipse plugin 基于ViewPart(而非透视图)中的选择启用/禁用工具栏命令
我有一个由多个Eclipse plugin 基于ViewPart(而非透视图)中的选择启用/禁用工具栏命令,eclipse-plugin,eclipse-rcp,selection,toolbar,Eclipse Plugin,Eclipse Rcp,Selection,Toolbar,我有一个由多个ViewParts组成的透视图。其中一个ViewParts使用menuContribution和locationURI=“toolbar:…”分配了一个命令 带有工具栏命令的ViewPart仅包含一个子项(一个TreeView),并且在其createPartControl(Composite)-方法中执行this.getSite().setSelectionProvider(子项) 问题是,当我在透视图中单击另一个ViewParts时,该命令被禁用,但在TreeView-组件中,该
ViewPart
s组成的透视图。其中一个ViewPart
s使用menuContribution
和locationURI=“toolbar:…”
分配了一个命令
带有工具栏命令的ViewPart
仅包含一个子项(一个TreeView
),并且在其createPartControl(Composite)
-方法中执行this.getSite().setSelectionProvider(子项)
问题是,当我在透视图中单击另一个ViewPart
s时,该命令被禁用,但在TreeView
-组件中,该选择不起作用。
我猜启用when
-条件不再有效,因为选择
-变量现在指向另一个ViewPart中的阻力
这会分散注意力,因为当选择TreeView
中的有效行时,工具栏按钮应该被激活
我如何告诉我的核心表达式,它应该只检查工具栏拒绝进入的ViewPart
的选择,而不检查全局选择
我也遇到了类似的问题,最终我实现了自己的property tester。这可能是最简单的方法,因为预定义的
选择
变量将始终指向全局选择
大致上,您需要遵循以下步骤
org.eclipse.core.expressions
插件添加到依赖项中org.eclipse.core.expressions.propertyTests
扩展点定义扩展。这将类似于以下内容():
<enabledWhen>
<test
property="your.namespace.itemSelected">
</test>
</enabledWhen>
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>
<test
property="your.namespace.itemSelected">
</test>
</enabledWhen>