Eclipse Command框架简明教程(PART-1)
原文出处:http://www.vogella.com/articles/EclipseCommands/article.html
Commands
-
简介
Command是组件的申明式描述,并且独立于具体实现。Command通过org.eclipse.ui.commands扩展点来定义。
Command可以被分类、分配到UI,并且还可以定义Key Binding。Command的行为通过handler定义。
-
与Command相关的扩展点
为了定义Command,可以新建一个org.eclipse.ui.command扩展点的扩展。org.eclipse.ui.menu扩展点用来定义Command在应用程序中在什么地方是可见的,例如,可以将Command添加在application menu(程序的全局菜单),context menu(上下文菜单)或者view menu(视图菜单)中。
表1 扩展点
Extension Point | Description |
org.eclipse.ui.command | 组件的申明式描述 |
org.eclipse.ui.handler | 定义Command的行为,通常是command被触发时需要调用的Java类 |
org.eclipse.ui.menu | Command在什么地方并且如何被包含在UI中的,例如,菜单,弹出菜单,工具栏等。 |
菜单(Menu)
- 菜单扩展点
Commands在菜单,工具栏和上下文菜单中使用到。
org.eclipse.ui.menu扩展允许定义一个“menuContribution”。menuContribution有一个名字为locationURI的属性,这个属性定义一个command是如何显示在UI中的(即command会出现在什么地方,菜单还是工具栏,等等)。
表2 Location URIs
Contribution to | Description | Uri |
Application menu | 在应用程序全局菜单中显示Command | menu: org.eclipse.ui.main.menu |
Application toolbar | 在应用程序的工具栏中显示Command | toolbar: org.eclipse.ui.main.toolbar |
View toolbar | 在视图菜单中显示Command | toolbar:viewId |
Context menu / pop-up | 在上下文菜单中显示Command | popup:ID |
- 定义菜单扩展的位置
通过在locationURI中使用“?before=ID”或者“?after=ID”来定义command的相对位置。其中,ID可以是已经存在的separator的名字(separator name),菜单ID(menu ID)或者item ID。
如果将一个command添加到ID为“fileMenu”的菜单中并且在ID为“oneEntry”的菜单项之后显示,对应的locationURI为“menu:fileMenu?after=oneEntry”。
Handler
- Command Handler
Command的行为是通过handler定义的。Handler就是在command被调用后马上被执行的Java类,并且handler必须实现org.eclipse.core.commands包中的IHandler接口。
在大多数情形中可以继承org.eclipse.core.commands.AbstractHandler类,它提供了IHandler接口的一个默认实现。
如果handler被执行,方法execute()将被调用。
在execute()方法中可以通过HandlerUtil类来访问经常用到的服务(service)或者values。
- Handler的有效性
可以为Handler定义一些条件(activeWhen)用来表示handler在什么情况下对command是可用的。一个command可以关联多个handler,但是在某个指定的时刻对于这个command有且仅有一个handler是可用的。否则,eclipse runtime将不会enable这个command。
Command框架的类图