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

posted @ 2012-08-07 15:43  饭遭殃  阅读(1224)  评论(0编辑  收藏  举报