我有一个菜单项XYZ。我有一个偏好页面MyPref,它有一个复选框和几个文本字段。检查MyPref中的复选框时,我希望启用菜单XYZ,否则应禁用它。有没有办法实现这一目标。
答案 0 :(得分:2)
是的,方式确实存在。
1)。在IPreferenceStore
中创建一个条目 - 只需获取扩展AbstractUIPlugin
的类并执行以下操作:
IPreferenceStore store = IExtendAbstractUIPlugin.getDefault()
.getPreferenceStore();
然后存储一些反映您的复选框状态的值:
preferenceStore.setValue("XYZMenuPreference", false); // if disabled
或
preferenceStore.setValue("XYZMenuPreference", true); // if enabled
2)。为plugin.xml创建Property Tester
扩展名:
<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>
3)。在plugin.xml
中声明菜单处理程序时,您应添加以下内容:
<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>
4)。现在你需要一个类“org.xyz.PropertyTester”(如plugin.xml中所定义),它将扩展org.eclipse.core.expressions.PropertyTester
并覆盖方法test(<some args>)
,他必须检查property
值:< / p>
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");
它将强制调用test()
类中的方法org.xyz.PropertyTester
并启用菜单项(如果首选项)
“XYZMenuPreference”设置为true
。
UPD。
namespace - a unique id determining the name space the properties are added to
properties - a comma separated list of properties provided by this property tester
这来自official eclipse tutorial所以您可以随意定义任何名称空间和属性名称,但您应该像第5点那样使用它。