RCP 自定义用于visible/enable when表达式的变量
来源:互联网 发布:淘宝手机连接转换 编辑:程序博客网 时间:2024/06/05 06:16
目的:定义类似于selection的RCP框架内部变量,用于visible when表达式的判定。
实现思路:使用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
- RCP 自定义用于visible/enable when表达式的变量
- Error when enable autotrace
- 创建用于 RCP 应用程序的声明性安全模型
- 支持用户自定义变量的PowerBuilder表达式求值
- 用于RegularExpressionValidator的正则表达式
- 用于涂鸦的自定义View
- 自定义的xml文件 fouced与enable冲突
- 如何自定义RCP界面
- 如何自定义RCP外观
- 如何自定义RCP外观
- 自定义RCP外观
- 自定义RCP外观
- RCP 自定义启动界面
- RCP 自定义启动界面
- RCP 自定义启动界面
- rcp 自定义工具栏
- 变量被用于更复杂的
- 用于简单输出变量的输出操作
- REST vs Web Service
- scrollToRowAtIndexPath出错原因分析
- ExtJS中combo组件设置默认值插件
- 用Java实现 ,冒泡排序与普通排序的区别
- 双线服务器和CDN的区别
- RCP 自定义用于visible/enable when表达式的变量
- delphi动态生成树(dxTreeView)
- Oracle 行列转换 总结
- Java 虚拟机 调优
- linux 启动过程分析
- vs2012下 error4996
- 【用Win7自带的DVD Maker制作视频】
- 教你看懂C++类库函数定义之二---STDMETHOD介绍
- Cocos2d-x 调用 Android 代码的后续