我正在尝试使用menuContribution中的'visibleWhen'表达式在上下文菜单中配置命令的可见性。我想要做的是只有在以下情况下才能在上下文菜单中显示命令:
我已经完成了第一次使用'visibleWhen'>'selection(with)'>'iterate'>'org.eclipse.core.resources.IResource(adapt)'然后检查资源的文件扩展名。代码如下所示。但是,我不确定如何只在右键单击正确的编辑器时才会出现相同的命令,该编辑器打开了正确的扩展名 - ext1,ext2。
检查我的编辑器是否处于活动状态可以解决第二个问题但似乎没有帮助,因为如果我点击非我类型的文件,它仍会在上下文菜单中显示该命令。
有什么建议吗? “Eclipse插件(第3版)”显示了编辑器上下文菜单的一些示例,但它使用了操作,我想坚持使用命令。
谢谢!
<menuContribution
allPopups="false"
locationURI="popup:org.eclipse.ui.popup.any?before=additions">
<separator
name="com.test.ide.separator1"
visible="true">
</separator>
<menu
icon="icons/sample.gif"
label="Test Menu">
<command
commandId="com.test.commands.testCommand1"
icon="icons/sample.gif"
label="testCommand1"
style="push"
tooltip="This is a test command">
<visibleWhen
checkEnabled="false">
<with
variable="selection">
<iterate
ifEmpty="false"
operator="or">
<adapt
type="org.eclipse.core.resources.IResource">
<or>
<test
property="org.eclipse.core.resources.extension"
value="ext1">
</test>
<test
property="org.eclipse.core.resources.extension"
value="ext2">
</test>
</or>
</adapt>
</iterate>
</with>
</visibleWhen>
</command>
</menu>
</menuContribution>
答案 0 :(得分:9)
org.eclipse.core.expressions.definitions
块中:
<extension point="org.eclipse.core.expressions.definitions">
<definition id="org.eclipse.example.testExtension">
<adapt type="org.eclipse.core.resources.IResource">
<or>
<test property="org.eclipse.core.resources.extension"
value="ext1">
</test>
<test property="org.eclipse.core.resources.extension"
value="ext2">
</test>
</or>
</adapt>
</definition>
</extension>
然后在您的可见内容中将activeEditorInput
测试移至顶部:
<visibleWhen>
<or>
<with variable="selection">
<iterate ifEmtpy="false">
<reference definitionId="org.eclipse.example.testExtension"/>
</iterate>
</with>
<with variable="activeEditorInput">
<reference definitionId="org.eclipse.example.testExtension"/>
</with>
</or>
</visibleWhen>
答案 1 :(得分:1)
您可以实施自己的PropertyTester。
答案 2 :(得分:1)
我能够通过我遇到的with
变量来完成它。使用上面相同的代码示例:
<or>
块<iterate>
块
<adapt>
块放在新的<or>
块with
activeEditorInput
变量
这是新的代码示例。
<iterate ifEmpty="false" operator="or">
<or>
<adapt type="org.eclipse.core.resources.IResource">
<or>
...test extensions
</or>
</adapt>
<with variable="activeEditorInput">
<adapt type="org.eclipse.core.resources.IResource">
<or>
...test extensions
</or>
</adapt>
</with>
</or>
</iterate>