在添加/未添加Project Nature时隐藏操作

时间:2013-02-05 15:33:50

标签: eclipse-plugin

Eclipse插件开发新手。我们正在开发一个自定义插件,在MyEclipse 10上有一个构建器,我相信它是Eclipse Indigo。

无论如何,我使用了Builder向导生成的示例代码,对其进行了修改,并使其正常工作。现在,我试图将“Toggle Nature”行动更多地视为“添加自然”或“移除自然”,具体取决于是否存在性质。

我在plugin.xml中有以下内容(我更改了一些名称以保护无辜者):

<extension
       point="org.eclipse.ui.popupMenus">
    <objectContribution
          adaptable="true"
          id="Sample_Eclipse_Plugin.contribution1"
          nameFilter="*"
          objectClass="org.eclipse.core.resources.IProject">

          <menu
                label="Sample"
                id="mainSampleMenu"
                menubarPath="additions">
             <separator
                   name="group1">
             </separator>
          </menu>
          <action
                class="com.sample.eclipse.builder.AddSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.addNatureAction"
                label="Add Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <not>
                               <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                            </not>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
          <action
                class="com.sample.eclipse.builder.RemoveSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.removeNatureAction"
                label="Remove Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
    </objectContribution>
 </extension>

弹出菜单显示完美,但我仍然可以同时获得“添加”和“删除”选项。所有这一切都基于Eclipse生成的示例代码,并且我将通过Google搜索在线找到的内容拼凑在一起。我确信由于缺乏知识,我正在做一些非常愚蠢的事情,但任何指导都会受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

添加示例项目性质

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="true" operator="and">
         <adapt type="org.eclipse.core.resources.IResource">
            <not>
               <test
                     property="org.eclipse.core.resources.projectNature"
                     value="Sample_Eclipse_Plugin.sampleNature" />
            </not>
         </adapt>
      </iterate>
   </with>
</enableWhen>

它测试所有(operator="and")性质不是sampleNature。 如果所选项目没有性质,则可以添加sampleNature(ifEmpty="true")。

删除示例项目性质

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="false" operator="or">
         <adapt type="org.eclipse.core.resources.IResource">
            <test
                  property="org.eclipse.core.resources.projectNature"
                  value="Sample_Eclipse_Plugin.sampleNature" />
         </adapt>
      </iterate>
   </with>
</enableWhen>

它测试(operator="or")性质之一是sampleNature。 如果所选项目没有性质,则sampleNature不能(ifEmpty="false")被删除。

我在Eclipse 4.3.1(Kepler)中测试过类似的代码。