如果项目在工作区中存在/不存在,则启用/禁用菜单项

时间:2015-03-06 21:41:23

标签: xml eclipse menuitem

我想启用/禁用一个菜单项,它使用下面的处理程序,具体取决于工作区中是否有任何项目。

但是以下代码无法正常工作。如果在Project Explorer视图中选择了项目,则启用/禁用。我对选择不感兴趣,只是项目中是否存在项目。

<extension
  point="org.eclipse.ui.handlers">
    <handler
      commandId="sampleplugin.commands.sampleCommand"
        class="com.xxx">
          <enabledWhen>
            <iterate ifEmpty="true">
                  <adapt type="org.eclipse.core.resources.IResource">
                    <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.cdt.core.cnature"/>
              </adapt> 
                </iterate>
          </enabledWhen>
    </handler>
</extension>

1 个答案:

答案 0 :(得分:1)

我认为您必须使用自己的属性测试程序,使用<test>扩展点定义自己的org.eclipse.core.expressions.propertyTesters。定义如下:

<extension
     point="org.eclipse.core.expressions.propertyTesters">
  <propertyTester
        class="package.MyPropertyTester"
        id="id.myPropertyTester"
        namespace="namespace"
        properties="test"
        type="java.lang.Object">
  </propertyTester>
</extension>

和测试人员代码:

public class MyPropertyTester extends PropertyTester
{
  @Override
  public boolean test(final Object receiver, final String property, final Object [] args, final Object expectedValue)
  {
    IProject [] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

    // Look for project nature

    for (IProject project : projects)
     { 
       if (project.hasNature("org.eclipse.cdt.core.cnature"))
         return true;
     }

    return false;
  }
}

... 并在处理程序中使用属性测试器,如下所示:

<extension
  point="org.eclipse.ui.handlers">
    <handler
      commandId="sampleplugin.commands.sampleCommand"
        class="com.xxx">
                <enabledWhen>
                    <test
           forcePluginActivation="true"
           property="namespace.test"/>
                </enabledWhen>
    </handler>
</extension>