Eclipse plugin 基于首选项变量的值禁用菜单
我有一个菜单项XYZ。我有一个首选项页面MyPref,它有一个复选框和两个文本字段。当MyPref中的复选框为check时,我希望启用菜单XYZ,否则应禁用它。有没有办法做到这一点。是的,这种方法肯定存在 1) 。在Eclipse plugin 基于首选项变量的值禁用菜单,eclipse-plugin,rcp,Eclipse Plugin,Rcp,我有一个菜单项XYZ。我有一个首选项页面MyPref,它有一个复选框和两个文本字段。当MyPref中的复选框为check时,我希望启用菜单XYZ,否则应禁用它。有没有办法做到这一点。是的,这种方法肯定存在 1) 。在IPreferenceStore中创建一个条目-只需获取扩展AbstractUIPlugin的类,然后执行以下操作: IPreferenceStore store = IExtendAbstractUIPlugin.getDefault() .getPreferenceS
IPreferenceStore
中创建一个条目-只需获取扩展AbstractUIPlugin
的类,然后执行以下操作:
IPreferenceStore store = IExtendAbstractUIPlugin.getDefault()
.getPreferenceStore();
<handler
class="your-menu-handler-class"
commandId="your-command-id">
<enabledWhen>
<with variable="selection">
<test property="org.xyz.XYZmenu" value="true" forcePluginActivation="true"/>
</with>
</enabledWhen>
</handler>
然后存储一些反映复选框状态的值:
preferenceStore.setValue("XYZMenuPreference", false); // if disabled
或
2) 。创建plugin.xml的属性测试仪扩展:
<extension point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
class="org.xyz.PropertyTester"
id="org.xyz.PropertyTester"
type="java.lang.Object"
namespace="org.xyz"
properties="XYZmenu">
</propertyTester>
</extension>
4) 。现在您需要一个类“org.xyz.PropertyTester”(在plugin.xml中定义),它将扩展org.eclipse.core.expressions.PropertyTester
并重写方法test()
,他必须在其中检查属性值:
if (property.equals("XYZmenu"){
IPreferenceStore store = IExtendAbstractUIPlugin.getDefault()
.getPreferenceStore();
return store.getBoolean("XYZMenuPreference");
}
5) 。之后,将更改侦听器添加到复选框中,并使用它重新评估菜单项的可见性:
IEvaluationService service = (IEvaluationService) PlatformUI
.getWorkbench().getService(IEvaluationService.class);
service.requestEvaluation("org.xyz.XYZmenu");
它将强制调用org.xyz.PropertyTester
类中的方法test()
,并将启用您的菜单项
“XYZMenuPreference”设置为true
upd
这是因为您可以随意定义任何名称空间和属性名称,但您应该像第5点那样使用它。是的,这种方式确实存在
1) 。在IPreferenceStore
中创建一个条目-只需获取扩展AbstractUIPlugin
的类,然后执行以下操作:
IPreferenceStore store = IExtendAbstractUIPlugin.getDefault()
.getPreferenceStore();
<handler
class="your-menu-handler-class"
commandId="your-command-id">
<enabledWhen>
<with variable="selection">
<test property="org.xyz.XYZmenu" value="true" forcePluginActivation="true"/>
</with>
</enabledWhen>
</handler>
然后存储一些反映复选框状态的值:
preferenceStore.setValue("XYZMenuPreference", false); // if disabled
或
2) 。创建plugin.xml的属性测试仪扩展:
<extension point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
class="org.xyz.PropertyTester"
id="org.xyz.PropertyTester"
type="java.lang.Object"
namespace="org.xyz"
properties="XYZmenu">
</propertyTester>
</extension>
4) 。现在您需要一个类“org.xyz.PropertyTester”(在plugin.xml中定义),它将扩展org.eclipse.core.expressions.PropertyTester
并重写方法test()
,他必须在其中检查属性值:
if (property.equals("XYZmenu"){
IPreferenceStore store = IExtendAbstractUIPlugin.getDefault()
.getPreferenceStore();
return store.getBoolean("XYZMenuPreference");
}
5) 。之后,将更改侦听器添加到复选框中,并使用它重新评估菜单项的可见性:
IEvaluationService service = (IEvaluationService) PlatformUI
.getWorkbench().getService(IEvaluationService.class);
service.requestEvaluation("org.xyz.XYZmenu");
它将强制调用org.xyz.PropertyTester
类中的方法test()
,并将启用您的菜单项
“XYZMenuPreference”设置为true
upd
这是从,因此您可以自由定义任何名称空间和属性名称,但您应该像第5点那样使用它。非常感谢。在示例代码中,我无法获得如何派生名称空间和属性名称的值。你能澄清一下吗?非常感谢Alex。正是我所需要的,很好用。非常感谢。在示例代码中,我无法获得如何派生名称空间和属性名称的值。你能澄清一下吗?非常感谢Alex。正是我所需要的,工作完美。