0

我有一个菜单项 XYZ。我有一个偏好页面 MyPref,它有一个复选框和几个文本字段。当 MyPref 中的复选框被选中时,我希望菜单 XYZ 被启用,否则它应该被禁用。有没有办法做到这一点。

4

1 回答 1

3

是的,这种方式确实存在。

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.PropertyTesterand override方法test(<some args>),他必须检查property值:

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");

如果首选项“XYZMenuPreference”设置为,它将强制调用test()您的org.xyz.PropertyTester类中的方法并启用您的菜单项true

更新。

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

这是来自官方 Eclipse 教程,因此您可以随意定义任何命名空间和属性名称,但您应该像第 5 点一样使用它。

于 2013-07-22T11:09:17.120 回答