Eclipse plugin 基于首选项变量的值禁用菜单

Eclipse plugin 基于首选项变量的值禁用菜单,eclipse-plugin,rcp,Eclipse Plugin,Rcp,我有一个菜单项XYZ。我有一个首选项页面MyPref,它有一个复选框和两个文本字段。当MyPref中的复选框为check时,我希望启用菜单XYZ,否则应禁用它。有没有办法做到这一点。是的,这种方法肯定存在 1) 。在IPreferenceStore中创建一个条目-只需获取扩展AbstractUIPlugin的类,然后执行以下操作: IPreferenceStore store = IExtendAbstractUIPlugin.getDefault() .getPreferenceS

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

是的,这种方法肯定存在

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点那样使用它。

是的,这种方式确实存在

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。正是我所需要的,工作完美。