转自:http://blog.csdn.net/windy444/archive/2007/12/30/2005315.aspx
由windy444翻译,转载请注明
原文名:Building a Common Navigator Framework (CNF) Viewer Part I: Defining the
View Part ,作者: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.
关于扩展点和API的特定文档,可以在Eclipse的平台帮助((Help > Help Content)中找到,Platform
Plug-in Developer's Guide >Reference > API Reference | Extension Points
Reference,涉及的扩展点有org.eclipse.ui.navigator.viewer,org.eclipse.ui.navigator.navigatorContent。相关的API包为org.eclipse.ui.navigator。若你想知道这篇文章中提到的东西的更多细节,这些东西可以作为参考。
好了,哪里开始呢?首先,我们将对包含该视图的插件作一些配置,把org.eclipse.ui.navigator添加到依赖(dependencies)中。然后,我们用org.eclipse.ui.views扩展点来定义一个view
part,并把org.eclipse.ui.navigator.CommonNavigator类作为view
part的实现类。这个类将为我们的视图提供一些基础功能。然后,我们定义org.eclipse.ui.navigator.viewer扩展点,把视图配置成通用导航器(Common
Navigator)。最后,能够通过定义org.eclipse.ui.navigator.navigatorContent扩展点以及绑定(org.eclipse.ui.navigator.viewer/viewerContentBinding)来关联扩展点和视图。
你不仅可以通过org.eclipse.ui.navigator.CommonNavigator,把该架构用于导航器,你可以通过org.eclipse.ui.navigator.INavigatorContentService把该架构用于从对话框到编辑器的任何地方,或者定义你自己的视图和view
part。但在这里,我们将只关注于基本功能。
基本设置
通用导航器架构是Eclipse 3.2的一个新特性,因此,你至少需要安装Eclipse
3.2。(译者注:下面一些是开发过插件的人都知道的事情,此处略过)
定义View Part
当要定义一个具有通用导航器功能的视图,你必须定义一个实际的view part,这个是你视图的容器。
(译者注:略去一段无关紧要的,插件开发初学者可以去参考基本view的开发,定义完成后的plugin文件如下:)
定义视图配置
一旦定义好了view
part,我们将通过org.eclipse.ui.navigator.viewer对我们的视图作一些配置扩展,这些扩展将告诉架构一些基础的东西,例如,通用导航器的view
part是哪个,弹出菜单的结构是怎样的,是否要定义object contributions,以及一些会影响视图缺省行为的属性。
(译者注:略过定义plugin.xml文件过程,后面会附上该文件)
对于弹出菜单的一些评论。通用导航器架构提供两种方式让视图来定制菜单。第一种方式是通过指定org.eclipse.ui.navigator.viewer扩展点下viewer的popupMenuId,来接受缺省的分隔符,以及菜单的group
mark id。缺省值被记录在org.eclipse.ui.navigator.viewer扩展点下,为了方便,被列在了下面。
"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"
另一种方式,你可以选择不去指定popupMenuId,作为替换,你可以指定<popupmenu />作为<viewer
/>元素的子元素。在这里,你可以定义自己的分隔符以及group mark id(能够由后面的用户来增加菜单)。如果你期望绑定平台(Resource,
Javatm)提供内容扩展的内容(content)或者操作(Action),推荐您使用缺省分组(上面列出的)。
对于选项(option)的一些评论。<viewer />元素下的< options
/>元素能够允许指定基于字符串的name=value对。这里有一些选项被基础架构所使用(在org.eclipse.ui.navigator.viewer扩展点文档的例子部分有记录),但你自己的视图或扩展点也可以使用这种机制来提供额外的扩展。请参考org.eclipse.ui.navigator.INavigatorViewerDescriptor中读取<viewer
/>元素中属性的API。你能通过通用导航器视图的org.eclipse.ui.navigator.INavigatorContentService得到视图描述符。
定义viewerId后的plugin文件:
定义好视图后,我们需要添加内容扩展,并绑定到视图上。我将在下一篇文章中给出一些更具体的信息。作为示例,我们简单的把缺省的资源内容(由org.eclipse.ui.navigator.resources插件定义)绑定到视图上。
(译者注:略过一些基本操作,定义完后的plugin文件如下:)
你现在可以启动工作台了(Run... > New Eclipse
Application),这时能看到我们的视图。但我们还未给视图绑定操作,所以,你仍然要通过在资源导航器或包浏览器中创建工程,才能在我们的视图中出现工程。后面,我们会增加资源操作和过滤器,但现在,让我们看看该视图拥有的缺省行为。目前有折叠所有按钮(Collapse
All),Link with Editor按钮,过滤器(Filters)按钮(以及一个"Available
Filters"标签),和一个扩展标签("Available Content")。
要绑定资源过滤器,我们需要在</includes>元素下增加另一个contentExtension元素,指定"org.eclipse.ui.navigator.resources.filters.*"为标识符。这将会选取org.eclipse.ui.navigator.resources定义的所有的过滤器。当然,你可以参考org.eclipse.ui.navigator.resources的plugin文件,选取你自己想要的过滤器的标示符。
再一次选择Run...,确认在过滤器对话框中出现了一些资源过滤器。
接下来,我们将绑定默认的资源操作。要绑定操作,需要在我们扩展点的根下面,增加一个viewerActionBinding元素。(译者注:略过一些操作,定义完后的plugin文件如下:)
现在,启动工作台后,在默认的空视图中(在视图中右键空的地方),你将看到New, Import, Export, 和
Refresh操作。当你选中视图中的一个元素时,出现的菜单类似与资源导航器中的。
(译者注:再次略过一段操作,不影响对文章的理解)
定义过滤器
今天我们将做的最后一件事,是用Eclipse核心表达式(Core
Expressions)为我们的视图定义一个过滤器。核心表达式架构的文档在org.eclipse.core.expressions插件中。我们将用org.eclipse.core.resources定义的属性测试者(property
testers)来测试特定的工程性质(Nature),然后隐藏所有没有该性质的工程。
(译者注:略过一些操作,定义完后的plugin文件如下:)
你也可以在扩展点中设置activeByDefault属性,来决定该过滤器是否在缺省配置中被激活。
最后,我们需要为我们的视图定义contentExtension,来作为viewerContentBinding的一部分。确保使用了我们新建的过滤器的id,或者一个通用的样式(如:"org.eclipse.ui.examples.navigator.filters.*")来绑定所有我们未来定义的匹配样式的过滤器。最后的plug.xml如下:
现在,最后一次启动工作台。创建一个新的简单工程和Java工程,当“Hide non-Java
Projects”被激活时,简单工程会被隐藏。
(译者注:第一部分终于翻译完了)