' Visiblewhen'在日食菜单中。希望菜单仅针对特定文件扩展名显示

时间:2014-06-01 07:56:00

标签: xml eclipse eclipse-plugin

编辑重述问题以及我所处的位置:

我现在将问题简化为一个非常小的例子:我有一个带菜单的eclipse插件。它看起来像这样:

enter image description here

我希望该菜单仅在查看特定文件扩展名的文件时显示(对于此示例,请说明.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>

使用此设置:

enter image description here

但不幸的是,这会隐藏任何和所有文件扩展名的菜单。我究竟做错了什么?

原始问题跟进

我已尝试在visibleWhen for command to appear in context menu和其他几个地方找到的解决方案。

我有一个带菜单的eclipse插件。它看起来像这样:

enter image description here

我希望该菜单仅在查看特定文件扩展名的文件时显示(它被称为&#39; source&#39;,所以如果使用插件查看说java文件安装突然有两个源菜单,这简直无益。

我正在使用&#39; visible&#39;构造。

我已尝试测试扩展属性:

enter image description here

(产生这个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>

但即使我希望可见,菜单也完全隐藏了。我也试过测试名称属性...

enter image description here

给出了:

  <visibleWhen
          checkEnabled="false">
       <test
             property="org.eclipse.core.resources.name"
             value="*.art">
       </test>
    </visibleWhen>

但仍然隐藏着。我错过了什么?

1 个答案:

答案 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编辑器。