我想启用/禁用一个菜单项,它使用下面的处理程序,具体取决于工作区中是否有任何项目。
但是以下代码无法正常工作。如果在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>
答案 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>