转自:http://blog.csdn.net/windy444/archive/2007/12/31/2006309.aspx
由windy444翻译,转载请注明
原文名:Building a Common Navigator Framework (CNF) Viewer Part III: Configuring
Menus,作者:MICHAEL ELDER,出处:http://scribbledideas.blogspot.com/(本人从未能打开过,呵呵)。
先上Copyright
The opinions and ideas expressed herin are my own and do not represent the
intent, opinion, or official statement of any company or organization.
All
postings by me to this site are copyrighted (C) by Michael D. Elder, 2006 and
made available under the terms of the Eclipse Public License 1.0 with the
constraint that any reuse of the content must contain this copyright
statement.
在前面的文章中,我们通览了如何构件一个通用导航器架构视图,以及提供了一个基础扩展来展示属性文件。现在,我们将要学习如何为CNF配置菜单,以及如何为我们的视图添加操作来操作我们的内容。
概览
这边有两个基本选择来为CNF视图增加操作:
•
使用org.eclipse.ui.popupMenus作为objectContributions或viewerContributions来提供操作。...popupMenus扩展点能让你在整个Eclipse工作台上提供操作代理。CNF视图能被配置成接受这些操作代理(缺省情况下),或者忽略他们。在平台提供的Project
Explorer视图中,对象或视图操作是被接受的(在第四部分中会详细介绍)。
•
使用org.eclipse.ui.navigator.navigatorContent作为actionProviders来提供操作。有时候,客户需要更加有计划的控制下面这些内容:对于特定上下文环境中给定的菜单,要提供怎样的操作;基于当前的选择项,需要提供什么可重定向操作。
CNF的操作提供者,只被CNF视图所接受。(将在第五部分给出详细信息)
配置菜单结构
在第一部分,我们定义了示例<viewer />元素,弹出菜单被简要的提到了。
回忆一下,这里有两种方法来配置弹出菜单。第一种可能就是简单的为org.eclipse.ui.navigator.viewer中<viewer
/>元素下的popupMenuId指定一个值,第二种可能就是采取一种更主动的方法来配置菜单支持的插入点。
提示:popupMenuId和popupMenu元素同时被指定将导致错误。
如果我们想要设置popupMenuId,将如同下面看到的一样:
该标识符能被org.eclipse.ui.popupMenus的扩展者所使用,来为视图增加一个特定的viewerContributions;然而objectContributions不需要任何的标识符。
当只有popupMenuId属性被指定,缺省的插入点(insertion
points)集合会自动的配置到弹出菜单中。在org.eclipse.ui.navigator.viewer的schema参考中,列出了缺省配置。为方便起见,这里也列出了:
"group.new" separator="true"
"group.goto"
"group.open"
separator="true"
"group.openWith"
"group.edit"
separator="true"
"group.show"
separator="true"
"group.reorganize"
"group.port"
"group.generate"
separator="true"
"group.search" separator="true"
"group.build"
separator="true"
"additions" separator="true"
"group.properties"
separator="true"
这些值能被org.eclipse.ui.popupMenus中的menubarPath属性元素所使用。
当有计划的使用和搜索菜单项时,这些值也能被使用(参考org.eclipse.jface.action.IContributionManager,特别是insertAfter(),insertBefore(),
和appendToGroup())。
所有字符常量("group.*")都没定义在org.eclipse.ui.navigator.ICommonMenuConstants中,以便有计划的使用。
作为替换,我们可以选择定义<viewer/>的子元素<popupMenu
/>,这里我们可以定义自己的插入点(insertion points)。(译者注:略过一个基本操作)。
在我们的例子中,我们可以使用同Project Explorer一样的菜单配置。
每个<insertionPoint />元素暗示这一个GroupMarker能通过IContributionMenu
API被访问到。当separator属性被设置成true时,菜单将会展现一条水平线。Eclipse中的菜单有足够的智能,只显示必要的线,两条背靠背的线将只被显示成一条。
让我们注意一下<popupMenu
/>下的allowsPlatformContributions="true"属性。缺省情况下,CNF接受..popupMenus提供的操作。若把该属性设置成false,将会限制菜单只接受操作提供者(Action
Providers)。
上面的例子并没有做什么神奇的事,在你自己的CNF视图中,你可以根据需要定义自己的插入点("group.example")。推荐的命名规约为"group.*",除了additions
group之外,上面的那些group都遵循了。
对于扩展或操作CNF菜单插入点集合的一些评论。对于一个已经配置好的视图,是没有可能来声明性操作或扩展他的插入点集合的。有可能的是,通过Action
Providers,来增加新的GroupMarkers
或Separators,但这里需要当心。在第五部分,我们将详细介绍这个是如何完成的,现在只是提醒一下,需要当心,并且当只有需要用到<actionProvider
/>中dependsOn属性时。该dependsOn的值指明为菜单提供额外插入点集合的Action
Provider的标识符。永远不要programmatically(译者注:不知道该怎么翻)删除插入点,因为其它扩展可能会依赖与他们。如果你自己定义的视图不需要使用某个插入点,则在定义你自己的<popupMenu
/>元素时,不要定义他就好了。
总结
在这篇文章中,我们讨论了如何为CNF视图配置菜单,下面的文章将讨论如何使用org.eclipse.ui.popupMenus
和org.eclipse.ui.navigator.navigatorContent/actionProvider来增加菜单。