RCP 自定义用于visible/enable when表达式的变量
2013-09-13 15:23
344 查看
目的:定义类似于selection的RCP框架内部变量,用于visible when表达式的判定。
实现思路:使用source provider来实现。
具体步骤:
1、定义source provider:添加org.eclipse.ui.services扩展项sourceProvider,实现其provider属性类,此类为本文的重点所在,其功能为对外提供变量值,同时通过priorityLevel属性设置此变量的可视范围。
2、为此扩展项添加变量项,并将其name属性设置为变量名。
provider属性类实现实例:
注意其中的getCurrentState方法,其即为对外提供变量值的接口。
至此,本文开头提出的目标达成。
到此出现一个衍生问题:如何在此变量值提供类外改变变量的值?
解决思路:通过RCP的框架API获取到此变量值提供类的实例,然后调用其内部函数改变变量值。
步骤:
1、获取source provider 服务实例。
或者为:
2、通过source provider 服务查找到对应变量名的source provider。
注意其中的CommandState.MY_STATE即为变量名。
获取到source procider实例后即可调用其内部函数更改变量值。
参考资料:
1、Eclipse Commands Advanced - Tutorial
实现思路:使用source provider来实现。
具体步骤:
1、定义source provider:添加org.eclipse.ui.services扩展项sourceProvider,实现其provider属性类,此类为本文的重点所在,其功能为对外提供变量值,同时通过priorityLevel属性设置此变量的可视范围。
2、为此扩展项添加变量项,并将其name属性设置为变量名。
provider属性类实现实例:
package de.vogella.rcp.commands.sourceprovider; import java.util.HashMap; import java.util.Map; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; public class CommandState extends AbstractSourceProvider { public final static String MY_STATE = "de.vogella.rcp.commands.sourceprovider.active"; public final static String ENABLED = "ENABLED"; public final static String DISENABLED = "DISENABLED"; private boolean enabled = true; @Override public void dispose() { } // We could return several values but for this example one value is sufficient @Override public String[] getProvidedSourceNames() { return new String[] { MY_STATE }; } // You cannot return NULL @SuppressWarnings("unchecked") @Override public Map getCurrentState() { Map map = new HashMap(1); String value = enabled ? ENABLED : DISENABLED; map.put(MY_STATE, value); return map; } // This method can be used from other commands to change the state // Most likely you would use a setter to define directly the state and not use this toogle method // But hey, this works well for my example public void toogleEnabled() { enabled = !enabled ; String value = enabled ? ENABLED : DISENABLED; fireSourceChanged(ISources.WORKBENCH, MY_STATE, value); } }
注意其中的getCurrentState方法,其即为对外提供变量值的接口。
至此,本文开头提出的目标达成。
到此出现一个衍生问题:如何在此变量值提供类外改变变量的值?
解决思路:通过RCP的框架API获取到此变量值提供类的实例,然后调用其内部函数改变变量值。
步骤:
1、获取source provider 服务实例。
// Get the source provider service ISourceProviderService sourceProviderService = (ISourceProviderService) HandlerUtil .getActiveWorkbenchWindow(event).getService(ISourceProviderService.class);
或者为:
ISourceProviderService sourceProviderService = (ISourceProviderService) PlatformUI .getWorkbench().getActiveWorkbenchWindow() .getService(ISourceProviderService.class);
2、通过source provider 服务查找到对应变量名的source provider。
// Now get my service CommandState commandStateService = (CommandState) sourceProviderService .getSourceProvider(CommandState.MY_STATE); commandStateService.toogleEnabled();
注意其中的CommandState.MY_STATE即为变量名。
获取到source procider实例后即可调用其内部函数更改变量值。
参考资料:
1、Eclipse Commands Advanced - Tutorial
相关文章推荐
- MVC DateTime 字段 EditTime 必须是日期模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式
- 关于ABBYY FineReader用于创建自定义语言词典的正则表达式
- Asp.Net MVC Html.TextBoxFor日期格式化出错“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式” 解决办法
- Asp.Net MVC Html.TextBoxFor日期格式化出错“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式” 解决办法
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
- C#实现自定义事件,用于监视变量变化
- javascript正则表达式中使用变量关键字
- 【Linux学习笔记】25:用户自定义变量
- GEF,EMF,RCP,Eclipse's plugin的几个问题(7) 创建自己的选择文件PropertyDescrptor自定义的FileNamePropertyDescriptor
- C#表达式,类型和变量
- phpcms V9 自定义添加 全局变量{DIY_PATH}方法
- 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础
- Oracle SQL case when 表达式
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- static(用于修饰函数、局部变量、全局变量)的作用详解
- android 自定义POP window弹出窗口,用于信息提示
- 自定义可用于数据绑定的对象和自定义事件
- 正则表达式中混入变量
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法