- 浏览: 144111 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
EclipseEye:
fair_jm 写道不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程 -
fair_jm:
不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程
工具栏或菜单栏的子元素(就是各种工具按钮或者菜单项)有多种实现方式,比如通过最传统的Action等,但是,
问题:如何在图形配置Command实现工具栏或菜单栏子元素的情况下,控制Command的可用不可用能?
1.首先是对org.eclipse.ui.menus插件进行扩展:
(1)创建菜单栏
右键-->new-->menuContribution:
-----locationURI*: menu:org.eclipse.ui.main.menu
-----class: (可以不填)
-----allPopups: false
然后,创建菜单项:(可用创建多个,这里就创建一个File菜单项为例)
在menuContributions上 右键--->new--->menu
------label*: File
------id: (可以不填)
------mnemonic: F(这个是表示Ctrl+F快捷键)
------(其他的可以不填)
然后,创建File菜单的子菜单项,用Command的形式(比如new、exit等)
在File(menu)上右键--->new--->command
------commandId*: org.xxx.xxx.NewCommand(需要自定义Command,扩展org.eclipse.ui.commands插件,稍后说明)
------label: new
------(其他可选填)
(2)创建工具栏
步骤和创建菜单类似,不过有几个地方要改动:
在org.eclipse.ui.menus上右键--->new ---->menuContribution
-----locationURI*: toolbar:org.eclipse.ui.main.toolbar
-----class: (可以不填)
-----allPopups: false
然后,创建工具栏项
在menuContributions上 右键--->new--->toolbar
在toolbar上创建Command就和Menu时的一样了
(于是菜单栏和工具栏都建好了)
(同样,可用创建多个command,不过这个Command只是个引用,还需要有真正的对象可调:于是应该扩展org.eclipse.ui.commands插件)
2.对org.eclipse.ui.commands插件进行扩展:
----new---->command
--------id*:org.xxx.xxx.NewCommand(和前面指定的commandID对应)
--------defaultHandler:这里就是Command的具体实现,继承org.eclipse.core.commands.AbstractHandler实现自己的handler
===================================
现在菜单栏和工具栏都创建好了,如果再加入了各子的defaultHandler就可以促发事件正常使用了,但是,如果想控制command的可用不可用该怎么办呢,就回到了开始的问题上?
-------------------
看看各个扩展点的情况可以得知:org.eclipse.ui.menus的menu和toolbar中只能控制其visibleWhen(显示与否,而不是可用与否---注意:这两点是不同的)---行不通
--------------------
那么解决办法呢?
======================
就是扩展org.eclipse.ui.handlers对自定义实现的handler进行操作,进而控制command的可用与否。
--------------
扩展 org.eclipse.ui.handlers
----new ---->handler(填写commandID--即该handler所关联的command的id;class就是该handler的具体实现类)
----->enabledWhen/activeWhen-----------这里就可以控制handler的状态了
可用通过ISourse的一些状态,比如某个view、Editor或者透视图活动的时候才使该handler可用。(具体可参考org.eclipse.ui.handlers扩展点的Eclipse帮助文档)。
在这里我举个例子:
eg.: handler----enabledWhen-----with
Variable*: activeWorkbenchWindow.activePerspective-----value*: org.xxx.xxx.YourRCPPerspective
代表的意思就是:该handler在YourRCPPerspective透视图活动的时候 可用。activeWorkbenchWindow.activePerspective是org.eclipse.ui.ISources的变量,可用直接看其源码。
//ISources部分源码
你可以根据编程实际需要,选择合适的variable,当然也可以定义自己的:
//1.设置自己的AbleMark
//2.请求该mark(使该mark处于被激活状态)
-----这时,"AbleMark"就是自定义的variable,从而实现对handler的更个性化的控制。
问题:如何在图形配置Command实现工具栏或菜单栏子元素的情况下,控制Command的可用不可用能?
1.首先是对org.eclipse.ui.menus插件进行扩展:
(1)创建菜单栏
右键-->new-->menuContribution:
-----locationURI*: menu:org.eclipse.ui.main.menu
-----class: (可以不填)
-----allPopups: false
然后,创建菜单项:(可用创建多个,这里就创建一个File菜单项为例)
在menuContributions上 右键--->new--->menu
------label*: File
------id: (可以不填)
------mnemonic: F(这个是表示Ctrl+F快捷键)
------(其他的可以不填)
然后,创建File菜单的子菜单项,用Command的形式(比如new、exit等)
在File(menu)上右键--->new--->command
------commandId*: org.xxx.xxx.NewCommand(需要自定义Command,扩展org.eclipse.ui.commands插件,稍后说明)
------label: new
------(其他可选填)
(2)创建工具栏
步骤和创建菜单类似,不过有几个地方要改动:
在org.eclipse.ui.menus上右键--->new ---->menuContribution
-----locationURI*: toolbar:org.eclipse.ui.main.toolbar
-----class: (可以不填)
-----allPopups: false
然后,创建工具栏项
在menuContributions上 右键--->new--->toolbar
在toolbar上创建Command就和Menu时的一样了
(于是菜单栏和工具栏都建好了)
(同样,可用创建多个command,不过这个Command只是个引用,还需要有真正的对象可调:于是应该扩展org.eclipse.ui.commands插件)
2.对org.eclipse.ui.commands插件进行扩展:
----new---->command
--------id*:org.xxx.xxx.NewCommand(和前面指定的commandID对应)
--------defaultHandler:这里就是Command的具体实现,继承org.eclipse.core.commands.AbstractHandler实现自己的handler
===================================
现在菜单栏和工具栏都创建好了,如果再加入了各子的defaultHandler就可以促发事件正常使用了,但是,如果想控制command的可用不可用该怎么办呢,就回到了开始的问题上?
-------------------
看看各个扩展点的情况可以得知:org.eclipse.ui.menus的menu和toolbar中只能控制其visibleWhen(显示与否,而不是可用与否---注意:这两点是不同的)---行不通
--------------------
那么解决办法呢?
======================
就是扩展org.eclipse.ui.handlers对自定义实现的handler进行操作,进而控制command的可用与否。
--------------
扩展 org.eclipse.ui.handlers
----new ---->handler(填写commandID--即该handler所关联的command的id;class就是该handler的具体实现类)
----->enabledWhen/activeWhen-----------这里就可以控制handler的状态了
可用通过ISourse的一些状态,比如某个view、Editor或者透视图活动的时候才使该handler可用。(具体可参考org.eclipse.ui.handlers扩展点的Eclipse帮助文档)。
在这里我举个例子:
eg.: handler----enabledWhen-----with
Variable*: activeWorkbenchWindow.activePerspective-----value*: org.xxx.xxx.YourRCPPerspective
代表的意思就是:该handler在YourRCPPerspective透视图活动的时候 可用。activeWorkbenchWindow.activePerspective是org.eclipse.ui.ISources的变量,可用直接看其源码。
//ISources部分源码
public interface ISources { public static final String ACTIVE_CONTEXT_NAME = "activeContexts"; public static final String ACTIVE_ACTION_SETS_NAME = "activeActionSets"; public static final String ACTIVE_SHELL_NAME = "activeShell"; public static final String ACTIVE_WORKBENCH_WINDOW_SHELL_NAME = "activeWorkbenchWindowShell"; public static final String ACTIVE_WORKBENCH_WINDOW_IS_COOLBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isCoolbarVisible"; public static final String ACTIVE_WORKBENCH_WINDOW_IS_PERSPECTIVEBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isPerspectiveBarVisible"; public static final String ACTIVE_MENU_SELECTION_NAME = "activeMenuSelection"; public static final String ACTIVE_MENU_EDITOR_INPUT_NAME = "activeMenuEditorInput"; public static final String ACTIVE_FOCUS_CONTROL_NAME = "activeFocusControl"; public static final String ACTIVE_FOCUS_CONTROL_ID_NAME = "activeFocusControlId"; //.... }
你可以根据编程实际需要,选择合适的variable,当然也可以定义自己的:
//1.设置自己的AbleMark
IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class); IEvaluationContext context = handlerService.getCurrentState(); context.addVariable(“AbleMark”, xxxValue);
//2.请求该mark(使该mark处于被激活状态)
IEvaluationService service = (IEvaluationService)getSite().getService(IEvaluationService.class); service.requestEvaluation(“AbleMark”);
-----这时,"AbleMark"就是自定义的variable,从而实现对handler的更个性化的控制。
发表评论
-
再说SWT中的滚动面板ScrolledComposite实现
2013-06-19 15:43 2256记得以前写过一篇关于滚动面板的文章 SWT中 Scrolle ... -
OSGi参考资料
2013-04-18 01:11 652基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组 ... -
CDT(编辑、调试)参考资料
2013-04-17 02:15 1073CDT编辑器 --------- 构建基于 CDT 的编辑器, ... -
Workspace Resource框架专题(3)处理工作空间资源更改事件
2013-04-17 01:44 13283 处理工作空间资源更改事件 工作空间API允许工具对它 ... -
Workspace Resource框架专题(2)workspace 框架API
2013-04-17 01:27 14232 工作空间API 本 ... -
Workspace Resource框架专题(1)Resource的概念
2013-04-17 01:12 13371 Resource的概念 如 ... -
如何恢复断点及Marker
2013-03-05 00:41 0如何恢复断点及Marker -
深入Workbench框架
2013-03-01 02:10 1633深入Workbench框架(结合UIPersistent) 1 ... -
Eclipse插件开发中的Action
2013-02-24 23:10 1961插入点用来定义菜单出 ... -
Eclipse开发中编辑器(Editors)和视图(View)总结
2013-02-24 22:58 28231.视图(Views) 视图( ... -
SWT/JFace专题 --- 对话框向导(Dialogs Wizards)
2013-02-24 22:42 2112对话框向导(Dialogs Wizar ... -
SWT/JFace专题 --- JFace
2013-02-24 22:37 1571JFace JFace是基于SWT的一套图形工具包,它没有为 ... -
SWT/JFace专题 --- SWT中Display和多线程
2013-02-24 15:25 3159Display 1.Display 的创建 一个SWT程序 ... -
SWT/JFace专题 --- SWT API 结构
2013-02-23 18:31 1041SWT API 结构 1.布局类(l ... -
Eclipse启动过程(源码级剖析)
2013-02-20 03:24 3359双击eclipse安装目录下的eclipse.exe运行后,会 ... -
SWT/JFace专题 --- SWT结构浅析
2013-02-23 17:02 984SWT技术是一套基于Java的 ... -
Eclipse平台体系结构
2013-02-21 23:56 17741.Eclipse平台体系结构 1 ... -
RCP平台架构
2013-02-23 14:11 1403RCP 富客户端通常是指具有独立用户界面的客户端程序。富客户 ... -
Ant构建脚本相关
2013-02-18 01:26 0Ant构建脚本相关 -
CDT源码架构研究
2013-02-18 01:24 0CDT源码架构研究
相关推荐
RCP 菜单与工具栏小结
NULL 博文链接:https://xblia.iteye.com/blog/1188729
Teamcenter软件RCP端右键菜单开发,工具栏菜单开发,代码为plugin.xml的配置。
创建一个rcp工程,模板使用有一个view的 step2.创建popupMenu step2_1.新建类Action1: step2_2.添加扩展点: 好的step2已经结束了,现在您可以运行一下程序,看看效果. 接下来将要进行的是,只有选中Three时...
RCP程序中集成其他插件的配置方法RCP程序中集成其他插件的配置方法RCP程序中集成其他插件的配置方法
clipse RCP允许开发者使用eclipse结构风格设计...将涉及以下内容:创建第一个RCP程序,创建菜单和工具栏,查看,编辑,对话,外部JAR的用法,向一个RCP应用程序产品中添加标志和帮助。 每一章可能都基本独立于其他章节
将涉及以下内容:创建第一个RCP程序,创建菜单和工具栏,查看,编辑,对话,外部JAR的用法,向一个RCP应用程序产品中添加标志和帮助。每一章都基本独立于其他章节。欢迎访问我的网站——www.xeclipse.com。
火龙果软件工程技术中心 在使用EclipseRCP进行桌面程序开发(一):快速起步中,我们通过Eclipse的插件开发向导,逐步建立了一个RCP应用程序,但是,这个程序没有任何功能,难以激起我们学习的兴趣。在这一节,我们...
java中RCP中使用JNI
eclipse rcp project,主要是配置菜单, 编码生成菜单。与RCP 学习里面的内容对应。
代码demo和ppt介绍;用org.eclipse.ui.presentationFactories扩展点RCP自定义透视图切换按钮的右键菜单,去除Editor的右键菜单和关闭按钮;
RCP中文入门教程,RCP中文入门教程,RCP中文入门教程,RCP中文入门教程
4.Actions的用法(菜单和工具栏) 7 4.1.概述 7 4.2.通过编码添加 8 4.3.由“扩展”方式向程序添加菜单和工具栏 11 5.添加组合键 19 5.1.概述 19 5.2.声明actions的组合键 19 6.系统托盘 24 7.外观 30...
RCP&OSGI;
RCP的Navigator例子源代码(包括修改默认的new右键菜单)
RCP 常见的扩展点指南 RCP最精华的部分之一,详细分析了RCP如何建立扩展点的。
Teamcenter软件RCP端一、二级主菜单开发,文件菜单下的二级菜单开发,代码为plugin.xml的配置。
RCP系统使用的弹出式日期控件,可切换上月下月,前一年后一年,可选择年、月
RCP在线升级RCP在线升级RCP在线升级RCP在线升级RCP在线升级
最新的基于eclipse的开发 gis系统