CNF 视图制作
概述:本文首先定了org.eclipse.ui.navigator.navigatorContent,然后绑定navigatorContent到相应的org.eclipse.ui.navigator.viewer上,最后,叙述了org.eclipse.ui.navigator.linkHelper的用途。
org.eclipse.ui.navigator是CNF的源代码。
CNF 的用途:可以快速的开发导航器视图。
可以参考Eclipse的插件org.eclipse.ui.navigator.resources,来学习CNF的用法。
可以参考Eclipse的插件org.eclipse.ui.tests.navigator,来学习CNF的用法。
该工程在Eclipse 的CVS 库中。
在本文中,我们以org.eclipse.ui.tests.navigator,来讲解CNF框架。
CNF 共提供三个扩展点:
1 navigatorContent :导航内容扩展点,主要为视图提供显示内容。
2 viewer : 主要是把定义好的navigatorContent 绑定到相应的视图上。
3 linkHelper : 提供编辑器和视图一种对应关系。
大体记住什么用途即可,下面我们详细介绍:
1 org.eclipse.ui.navigator.navigatorContent
定义导航器的内容,
该图为org.eclipse.ui.tests.navigator插件的扩展页。我们将详述navigatorContent和它内部的扩展。
<navigatorContent
id="org.eclipse.ui.tests.navigator.testContent"
name="%test.navigator.extension"
contentProvider="org.eclipse.ui.tests.navigator.extension.TestContentProvider"
labelProvider="org.eclipse.ui.tests.navigator.extension.TestLabelProvider"
activeByDefault="true"
priority="higher">
id :navigatorContent的唯一标识,当viewer绑定navigatorContent用到。
contentProvider :内容提供者,父类为JFace的内容提供者类。
labelProvider :标签提供者,父类为JFace的标签提供者类。
详细的可以参见Eclipse的帮助文档,在这里不加以详述。
接下来我们来说说navigatorContent内部的扩展。
1.1 tringgerPoints
<triggerPoints>
<adapt type="org.eclipse.core.resources.IProject"/>
</triggerPoints>
表示什么时候navigatorContent 可用,在本例中表示当遇到IProject对象或是可以适配到IProject的对象时,这个navigatorContent 将被激活。
1.2 possibleChildren
<possibleChildren>
<or>
<instance of value="org.eclipse.ui.tests.navigator.extension.TestExtensionTreeData"/>
<instance of value="org.eclipse.core.resources.IFile" />
</or>
</possibleChildren>
表示孩子可能是IFile,或TestExtensionTreeData(这个是该工程自定义类)。
1.3 actionProvider
<actionProvider
class="org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider"
id="org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider">
</actionProvider>
定义一些Action,在class属性指定的类中,你可以控制把这个Action添加到菜单中。
1.4 commonSorter
<commonSorter
class="org.eclipse.ui.tests.navigator.extension.TestDataSorter"
id="org.eclipse.ui.tests.navigator.commonSorter">
<parentExpression>
<or>
<adapt type="org.eclipse.core.resources.IProject"/>
<instanceof value="org.eclipse.ui.tests.navigator.extension.TestExtensionTreeData"/>
</or>
</parentExpression>
</commonSorter>
定义视图的排序器,parentExpression 表示排序其内部的孩子。如本例中就排序IProject中的孩子和TestExtensionTreeData中的孩子。
1.5 override
可以重新定义一些以前被定义好了的Action等。用途:CNF是一个高重用,可扩展的框架。即,你可以很容易的扩展已经存在的Navigator View,用override就可以把已经定义好的Action在重新定义。(本例子中没有涉及到,请参见org.eclipse.ui.navigator.resources)
1.6 commonWizard
可以绑定一些定义好的向导,他们将出现在上下文菜单,新建选项中。
(本例子中没有涉及到,请参见org.eclipse.ui.navigator.resources)
注意:在navigatorContent 的同级上也可定义actionProvider,commonSorter等。
如图
在navigatorContent 内部定义的actionProvider,当navigatorContent 绑定到Viewer上时,将自动的也绑架上。即Viewer自动有了这个actionProvider。
在navigatorContent 同级定义个actionProvider,则需要用户自行绑定到Viewer上,这种方法提高了actionProvider的重用性,即多个Viewer 可以使用同一个actionProvider扩展。
2 org.eclipse.ui.navigator.viewer
前一节将了如何定义一个navigatorContent,本小节讲述如何将其绑定到视图上。
该图为org.eclipse.ui.tests.navigator插件的扩展页。我们将详述这个扩展点。
2.1 viewer
<viewer
popupMenuId="org.eclipse.ui.tests.navigator.TestView#PopupMenu"
viewerId="org.eclipse.ui.tests.navigator.TestView">
popupMenuId :定义弹出菜单(即上下文菜单)的ID。
viewerId :必须和要绑定到的视图的ID一致。
在viewer内部,可以配置菜单和视图工具栏中出现的默认Action。这里就不再详述了。请自行参考本文提到的2个源码。
该图 为正常的CNF工具栏
该图 用org.eclipse.ui.viewActions扩展点添加一个工具栏Action。
该图 为org.eclipse.ui.tests.navigator 的工具栏,在viewer内配置了选项,把默认的工具栏Action删除了。
2.2 viewerContentBinding
正是通过它,来绑定navigatorContent 的。
在includes下,第一个就是绑定navigatorContent 的。
如图可见,还可以绑定一些filter和action。
3 org.eclipse.ui.navigator.linkHelper
这个扩展点是定义编辑器和视图相互作用的。其功能就是图中工具栏的Action。
具体在实现时,可以直接重用已经被Eclipse定义好的扩展。
1 org.eclipse.ui.navigator.resources.linkHelper 支持资源的连接。
2 org.eclipse.jdt.java.ui.javaLinkHelper 支持Java的连接。
它们的绑定也是在viewerContentBinding中绑定。
参考资料:
1 http://blog.sina.com.cn/s/blog_4b84d10901009mz7.html 收录CNF的资料集。
2 http://scribbledideas.blogspot.com/ 应该是框架的创始人,介绍框架的应用方法。
3http://www.eclipse.org/articles/Article-Decorators/decorators.html 一片关于标签提供者装饰的文章。
4http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_ui_navigator_viewer.html Eclipse在线帮助,里面讲述了如何配置视图。
5 http://www.blogjava.net/zhuxing/archive/2008/08/11/221265.html 不错的CNF中文文章。
Eclipse 中Project Explorer 视图是用CNF 框架制作的。