`
salever
  • 浏览: 258381 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入 Common Navigator Framework 之 navigatorContent

    博客分类:
  • RCP
阅读更多

3.1 概述

Eclipse为了方便用户使用CNF,将它的资源模型管理功能封装为一个扩展点,用户只需要实现这个扩展点——org.eclipse.ui.navigator.navigatorContent/navigatorContent(注意它只是扩展点org.eclipse.ui.navigator.navigatorContent下的一项 ),就可以使用定制资源模型的显示。

 

如果你对JFace Viewer的MVC机制有一定的了解的话,就会知道Content Provider和Label Provider的作用,在使用任何的JFace Viewer的时候,必须指定以上两个Provider。CNF的Navigator Content Extension扩展点的功能类似,它提供了CNF的Viewer所需要的Content Provider和Label Provider,这些都在扩展点的配置中显示指定。

3.2 扩展点

下面我们看看扩展点org.eclipse.ui.navigator.navigatorContent/navigatorContent的具体内容:


这里对contentProvider属性和LabelProvider属性进行讲解,其他的属性请自行查阅帮助文档。

 

3.2.1 contentProvider属性

contentProvider需要指定一个类,这个类等同于JFace Viewer的Content Provider,因此它需要实现TreeContentProvider或者是ICommonContentProvider接口。后者提供了更丰富的功能,其定义为:
public interface ICommonContentProvider extends ITreeContentProvider,IMementoAware

3.2.2 labelProvider属性

与contentProvider属性类似,它提供了CNF的Viewer显示所用的标签,指定为labelProvider的类需要实现接口ILabelProvide。鉴于Navigator Viewer中的节点(比如文件)的显示名称的复杂性,Eclipse还提供了额外的接口,方便用户实现这些复杂的功能,比如工具条提示、状态栏提示等:

  • 1.    org.eclipse.ui.navigator.IDescriptionProvider,提供状态栏提示信息,具体效果为,当点击某个文件时候,Eclipse最下方的状态栏上会提示一些信息。

 

  • 2.    org.eclipse.ui.navigator.ICommonContentProvider,它继承了ILabelProvider,IMementoAware,IDescriptionProvider,除了能提供状态栏提示以外,它还提供了Memento支持。

3.2.3 triggerPoints

这个用来指定何时使用这个contentProvider,按字面意思理解就是“触发点”。

3.2.4 possibleChildren

这个用来指定contentProvider中的子节点模型。
看看Eclipse的workingset contentProvider中的设置:

 

3.3 Eclipse实现

接下来讲一讲Eclipse中的Navigator的contentProvider的实现,这里基本版本3.5(或者以上)。

 

navigatorContent的声明:

 


 
主要就是contentProvider和labelProvider的值,分别为:

 

  • 对应的content provider则由ResourceExtensionContentProvider提供,它位于包org.eclipse.ui.internal.navigator.resources.workbench.下。下面看看它的类型层次结构:

 

  • 对应的label provider则由ResourceExtensionLabelProvider实现,它位于包org.eclipse.ui.internal.navigator.resources.workbench下,下面是它的类型层次结构图:


其实navigator content的主要功能就是提供内容器和标签器,Eclipse将文件系统上的文件资源与Resource包下的IResource进行了一一对应,从而使得Navigator导航视图能够显示属性的文件结构。


值得一提的是,Eclipse的Navigator视图的标签器的实现比较强大,除了能显示工程、文件夹、文件之外,还可以实现其他的效果,比如添加了SVN之后的标记,错误提示等。


这些功能都来自于类org.eclipse.ui.model.WorkbenchLabelProvider,我们不妨简单看一看它的getText()实现:
    public final String getText(Object element) {
        //query the element for its label
        IWorkbenchAdapter adapter = getAdapter(element);
        if (adapter == null) {
            return ""; //$NON-NLS-1$
        }
        String label = adapter.getLabel(element);

        //return the decorated label
        return decorateText(label, element);
    }
它借用了Eclipse的Adapter 机制,大家不妨去深入研究一下。

分享到:
评论

相关推荐

    使用CommonNavigator开发资源管理器.doc

    【使用CommonNavigator开发资源管理器】的文档主要介绍了如何利用Eclipse的Common Navigator Framework (CNF) 插件来创建自定义的资源管理器。Common Navigator Framework是Eclipse平台的一部分,它提供了一套完整的...

    CNF导航----building-common-navigator-framework-viewer

    在本文档中,我们将深入探讨如何构建一个基于Eclipse平台的通用导航框架(Common Navigator Framework, CNF)查看器。这不仅适用于Eclipse平台的新手开发者,也适合希望深入了解CNF工作原理及其实现细节的高级用户。...

    CNF导航----building-common-navigator-framework-viewer-ii

    本篇文章将继续深入探讨如何构建一个通用导航框架(Common Navigator Framework,简称CNF)查看器,并着重介绍如何向该查看器添加内容扩展。通过本教程的学习,您将能够掌握在CNF查看器中展示特定文件类型数据的方法...

    CNF导航----building-common-navigator-framework-viewer-IV

    <menuContribution locationURI="popup:org.eclipse.ui.navigator.CommonNavigator#menu"> commandId="com.example.deletePropertyCommand" label="Delete Property" style="push"> ``` 这里,`...

    CNF导航----building-common-navigator-framework-viewer-III

    2. **通过`org.eclipse.ui.navigator.navigatorContent`作为动作提供者贡献操作**:有时客户需要更程序化的控制,具体包括哪些操作贡献到特定上下文下的某个菜单,以及根据当前选择配置了哪些可重定向操作。...

Global site tag (gtag.js) - Google Analytics