编辑重述问题以及我所处的位置:
我现在将问题简化为一个非常小的例子:我有一个带菜单的eclipse插件。它看起来像这样:
我希望该菜单仅在查看特定文件扩展名的文件时显示(对于此示例,请说明.txt)。
使用Greg的答案我有以下plugin.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu
id="ARTful.menus.sampleMenu"
label="Hide Me"
mnemonic="M">
<command
commandId="ArtEditor.command.format"
id="ARTful.menus.sampleCommand"
mnemonic="S"
tooltip="Hello!">
</command>
<visibleWhen
checkEnabled="false">
<with variable="selection">
<iterate
ifEmpty="false">
<adapt type="org.eclipse.core.resources.IResource">
<test property="org.eclipse.core.resources.extension" value="txt" />
</adapt>
</iterate>
</with>
</visibleWhen>
</menu>
</menuContribution>
</extension>
</plugin>
使用此设置:
但不幸的是,这会隐藏任何和所有文件扩展名的菜单。我究竟做错了什么?
原始问题跟进
我已尝试在visibleWhen for command to appear in context menu和其他几个地方找到的解决方案。
我有一个带菜单的eclipse插件。它看起来像这样:
我希望该菜单仅在查看特定文件扩展名的文件时显示(它被称为&#39; source&#39;,所以如果使用插件查看说java文件安装突然有两个源菜单,这简直无益。
我正在使用&#39; visible&#39;构造。
我已尝试测试扩展属性:
(产生这个plugin.xml片段)
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu
id="ARTful.menus.sampleMenu"
label="Source"
mnemonic="M">
<command
commandId="ArtEditor.command.format"
id="ARTful.menus.sampleCommand"
mnemonic="S"
tooltip="Format">
</command>
<command
commandId="ArtEditor.command.latex"
style="push"
tooltip="LaTex Output">
</command>
<command
commandId="ArtEditor.command.format.alpha"
style="push">
</command>
<visibleWhen
checkEnabled="false">
<test
property="org.eclipse.core.resources.extension"
value="art">
</test>
</visibleWhen>
</menu>
</menuContribution>
但即使我希望可见,菜单也完全隐藏了。我也试过测试名称属性...
给出了:
<visibleWhen
checkEnabled="false">
<test
property="org.eclipse.core.resources.name"
value="*.art">
</test>
</visibleWhen>
但仍然隐藏着。我错过了什么?
答案 0 :(得分:5)
您需要使用以下内容:
<visibleWhen
checkEnabled="false">
<with variable="activeMenuSelection">
<iterate
ifEmpty="false">
<adapt type="org.eclipse.core.resources.IResource">
<test property="org.eclipse.core.resources.extension" value="art" />
</adapt>
</iterate>
</with>
</visibleWhen>
with
确定您正在使用活动上下文菜单选项,这不是必需的,因为它是默认选项。对于主菜单,with值应为selection
。
当前选择是一个列表,因此您需要使用iterate
来逐步完成它。
视图中显示的对象(如Package或Project explorer)实际上不是文件,而是一些表示文件的用户界面对象。您需要使用adapt
来调用用户界面对象上的适配器管理器以获取所需的对象。我在这里使用过IResource
因为IFile
的适配器不太常见。
如果为文件类型定义content type
,则可以使用以下内容:
<test property="org.eclipse.core.resources.contentTypeId" value="org.eclipse.jdt.core.javaSource" />
进行测试。这比依赖文件扩展名更灵活。我的示例中显示的值是针对Java源文件的。
使用以下内容显示特定编辑器处于活动状态时的菜单:
<with
variable="activeEditorId">
<equals
value="org.eclipse.ant.ui.internal.editor.AntEditor">
</equals>
</with>
测试Ant编辑器。