Eclipse Action 5

来源:互联网 发布:什么是php程序员 编辑:程序博客网 时间:2024/05/01 18:38
 
 
6.3. 对象 Actions
如果你想使用户很容易的往Favorites视图中添加文件和文件夹,对象贡献是一个不错的选择,因为只有当当前的视图或编辑器包含与action兼容的对象时,对象贡献才会出现(见 图6-8)。以这种方式,当用户需要action的时候,对象贡献就可以被使用,即使action并没有被应用。
6-8. 对象 action.


6.3.1. 定义基于对象的action
6.2.1节,定义工作台窗口菜单一样,使用插件装载文件编辑器的Extensions页创建新的对象贡献。点击Add 按钮,添加org.eclipse.ui.popupMenus 扩展,再使用如下属性添加objectContribution:
adaptable "true"
表示实现了IResource 的对象是可以接收的。 (见 20.3节, Adapters).
id "com.qualityeclipse.favorites.popupMenu"
此条贡献的唯一标示符。
nameFilter 保持空白
一个通配符,用来指定哪些对象是可接受的。例如,输入"*.java",将会定位到那些以.java结尾的文件。更多内容在
6.3.2节, Action 过滤和可用性。
objectClass "org.eclipse.core.resources.IResource"
可接受对象的类型。使用objectClass输入框右侧的 Browse...按钮,选择已存在的org.eclipse.core.resources.IResource类。如果你想创建新的类,点击objectClass输入框左侧的objectClass:标签。
下一步,使用如下属性添加action到新建的objectContribution,这里和6.2.3节的action属性很相似。
class "com.qualityeclipse.favorites.actions. AddToFavoritesActionDelegate"
action的代理,它实现了org.eclipse.ui.IObjectActionDelegate接口(见 6.3.3节, IObjectActionDelegate)。它初始化的时候使用无参构造方法,但可以使用IExecutableExtension接口来赋予参数(见 20.5节,在扩展点中定义类型)。可以使用三种方式来定义此类(见6.2.6节, 创建action代理)。
enablesFor "+"
用来表示action什么时候可用的表达式。
id "com.qualityeclipse.favorites.addToFavorites"
action的唯一标示符。
label "Add to Favorites"
action在上下文菜单中显示的文字。
menubarPath "additions"
action的插入点 (见 6.2.5节, 插入点)。
tooltip "Add the selected resource(s) to the Favorites view"
当鼠标停留在上下文菜单的菜单项上时,显示的提示文字。
多个action按照相反的顺序显示
 
org.eclipse.ui.popupMenu扩展点的文档中隐藏着如下重要信息:如果两个或以上数目的action使用一个单独的 扩展贡献到菜单上,action将会按照它们在plugin.xml文件中的定义顺序相反的顺序显示。这种行为显然不很直观。但是当它被发现时,Eclipse平台API已经被冻结了。改变该行为将会破坏没一个依赖于这种行为的插件。
 
其他在本样例没有使用的action还有:
helpContextId  为action关联帮助上下文的标示符。 (见 15章, 实现帮助)。
icon 关联的图标 (见6.2.4节, Action 图标)。
overrideActionId 该属性为可选属性,它用来指定该action重写的action的标示符。
state 设定action的初始状态,true为 radio样式,false为 toggle样式 (见6.2.3节, 定义菜单项和工具栏按钮)。
style 用来定义action的视觉样式。详细信息见6.2.3节, 定义菜单项和工具栏按钮,唯一的例外是pulldown样式不能应用于对象贡献。
6.3.2. Action 过滤和可用性
为了遵循插件延迟加载模式,Eclipse为基于上下文的action过滤和action的适当时机可见性提供了多种声明机制。因为它们都是在插件装载文件中声明,所以Eclipse在使用它们的时候并不需要加载插件。
6.3.2.1. 基本的过滤和可用性
6.3.1节, 定义基于对象的action, nameFilter objectClass 属性都是过滤器的例子, enablesFor 属性决定action可用的时机。当一个上下文菜单被激活,如果选择的对象中没有名字匹配 nameFilter通配符 ,或者不是objectClass属性指定的类型,那么对象贡献中定义的action将不会在上下文菜单中出现。另外,enablesFor属性使用表格6-1中的语法来严格定义使一个特定action可用,要选择多少对象:
 
表格 6-1. enabledFor 属性操作
语法
描述
!
选中0 个条目
?
选中0 个或1个条目
+
选中1 个或多个条目
multiple, 2+
选中2 个或多个条目
n
选中精确数目的条目;例如, enablesFor="4" 只有选中4个条目时,action可用。
*
选中任意数目的条目
 
表格中列出的技巧表现了限制action可见性的一般使用方法;但是有时候,可能需要更精巧的方法。可见性和过滤元素提供了一种额外的手段来限制action的可见性,然而选择和元素可用性提供了一种更精巧的方式来指定什么时候action是可用的。还可以使用action代理中的selectionChanged()方法来提供更加有效的控制,此内容在6.2.6节,创建action代理,讨论过。
 
 


原创粉丝点击