Enable/disable 如果工作区中存在项目 do/not,则为菜单项
Enable/disable a menu item if projects do/not exist in workspace
我想enable/disable一个菜单项,它使用下面的处理程序,具体取决于工作区中是否有任何项目。
但是下面的代码不能正常工作。如果在 Project Explorer 视图中选择了一个项目,它 enables/disables。我对选择不感兴趣,只对工作区中是否存在项目感兴趣。
<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>
我认为您将不得不使用自己的 属性 测试仪使用 org.eclipse.core.expressions.propertyTesters
扩展点来定义自己的 <test>
。定义类似于:
<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>
我想enable/disable一个菜单项,它使用下面的处理程序,具体取决于工作区中是否有任何项目。
但是下面的代码不能正常工作。如果在 Project Explorer 视图中选择了一个项目,它 enables/disables。我对选择不感兴趣,只对工作区中是否存在项目感兴趣。
<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>
我认为您将不得不使用自己的 属性 测试仪使用 org.eclipse.core.expressions.propertyTesters
扩展点来定义自己的 <test>
。定义类似于:
<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>