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框架的类图