Eclipse插件:如果未选择xml,则禁用上下文菜单贡献

时间:2012-12-10 14:34:46

标签: eclipse eclipse-plugin

我们正在开发一个eclipse-plugin,并为package-explorer中的context-menu做出了一些贡献。使用旧org.eclipse.ui.popupMenus,我们可以在贡献中指定名称过滤器,因此仅当所选文件具有特定名称时才会显示菜单条目:

<extension
         point="org.eclipse.ui.popupMenus">
    <objectContribution
            adaptable="false"
            id="..."
            nameFilter="file.xml"
            objectClass="org.eclipse.core.resources.IFile">
        ...
    </objectContribution>
</extension>

现在,我们希望使用 new 方式创建该上下文菜单,如果没有文件,也可以禁用该条目:

   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
         <command
               commandId="..."
               label="..."
               style="push">
         </command>
      </menuContribution>
   </extension>
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="..."
            name="...">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="..."
            commandId="...">
         <activeWhen>
            <with
                  variable="selection">
               <iterate
                     ifEmpty="false"
                     operator="and">
                  <adapt
                        type="org.eclipse.core.resources.IFile">
                  </adapt>
               </iterate>
            </with>
         </activeWhen>
      </handler>
   </extension>

(也比较:Enable/disable menu item in Eclipse plugin

但是,我们不仅要在没有选择文件时禁用该条目,而且还要在文件不是xml文件时禁用该条目。我们试图破解<activeWhen> - 标记中的内容,但我们找不到让它看文件名的解决方案。

有可能这样做吗?如果:怎么样?

1 个答案:

答案 0 :(得分:1)

有一个Eclipse wiki page about Menu Contributions/IFile objectContribution可能有所帮助。我自己没有测试过,但是在使用命令框架时,基于动作的扩展的nameFilter属性似乎可以替换为对id为org.eclipse.core.resources.name的预定义属性测试器的替换。