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

深入 Common Navigator Framework 之 Action Providers

    博客分类:
  • RCP
阅读更多

6.1 概述

有了工程的树形结构显示,自然就要考虑到菜单的配置了。对于Eclipse的Project Explorer来说,功能丰富的右键菜单是必不可少了,对于右键菜单来说,每个触发对象(节点)不同,引发的操作也不同。而且各个节点上的菜单也会有所区别,比如文件和文件夹。


Eclipse使用pop menu进行右键菜单的添加,CNF将其封装为Action Provider,通过Action Provider用户可以方便的为不同的节点创建不同的右键菜单。

 

6.2 扩展点

扩展点org.eclipse.ui.navigator.navigatorContent/actionProvider用来声明Action Provider。

 


 
定义好的Action Provider将在org.eclipse.ui.navigator.viewer/viewerActionBinding引用。
下面是两个重要的属性:

6.2.1 class属性

这里指定的必须继承类org.eclipse.ui.navigator.CommonActionProvider,它提供了显示在右键中的菜单。

 

6.2.2 id属性

在org.eclipse.ui.navigator.viewer/viewerActionBinding中通过ID引用别处定义的Action Provider,所以ID一定要指定,而且要唯一。

 

6.3 Eclipse实现

Eclipse提供了很多的Action Provider实现,比如上面提到的OpenActionProvider,下面我们看看到底是如何实现的。
定义如下:

<actionProvider
                  id="org.eclipse.ui.navigator.resources.OpenActions"
                class="org.eclipse.ui.internal.navigator.resources.actions.OpenActionProvider">
            <enablement>
                <or>
                    <adapt type="org.eclipse.core.resources.IFile" />    
                </or>
            </enablement>
        </actionProvider>
 

类GoIntoActionProvider 的实现也比较简单,就是将GoIntoAction显示在菜单中。

 

public class GoIntoActionProvider extends CommonActionProvider {

    private GoIntoAction goIntoAction;

    public void init(ICommonActionExtensionSite anActionSite) {
        anActionSite.getViewSite().getShell();
        CommonViewer viewer = (CommonViewer) anActionSite.getStructuredViewer();
        goIntoAction = new GoIntoAction(viewer.getFrameList());
    }

    public void dispose() {
        goIntoAction.dispose();
    }

    public void fillActionBars(IActionBars actionBars) {
        actionBars.setGlobalActionHandler(IWorkbenchActionConstants.GO_INTO, goIntoAction);
    }

    public void fillContextMenu(IMenuManager menu) {
        menu.appendToGroup("group.new", goIntoAction); //$NON-NLS-1$
    }

    public void updateActionBars() {
        goIntoAction.update();
    }

}
 


最后看看如何通过ID引用这个Action Provider,在org.eclipse.ui.navigator.viewer中有,给视图org.eclipse.ui.navigator.ProjectExplorer添加viewerActionBinding:

<viewerActionBinding
            viewerId="org.eclipse.ui.navigator.ProjectExplorer">
         <includes>
             <actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
         </includes>
       </viewerActionBinding>
 

这里使用了正则匹配“org.eclipse.ui.navigator.resources.* ”来引用所有ID以org.eclipse.ui.navigator.resources开始的Action Provider。

 

6.4 说明

如果去看看org.eclipse.ui.navigator.resources中的扩展点定义,会发现Action Provider会在两个地方定义,一个位于navigatorContent里面,作为子节点,一个是位于nivagatorContent平级,作为兄弟节点。这两个地方定义的Action Provider功能上一样,区别在于,位于navigatorContent里面的Action Provider将自动激活,而另一种情况下,必须显示使用viewerActionBinding进行引用才会激活。


如此设计是为了在navigatorContent之间Action Provider的重用,类似的,Common Filter、Common Wizard也一样。

 


分享到:
评论

相关推荐

    Common Navigator Framework学习资料

    Common Navigator Framework(CNF)是Eclipse平台中的一...通过深入学习和实践这些知识点,开发者能够熟练地利用Common Navigator Framework来创建自定义的、满足特定需求的导航视图,提升Eclipse开发环境的用户体验。

    salever_Common_Navigator_Framework_分析

    在《Common_Navigator_Framework_分析.pdf》这份文档中,读者可以深入学习CNF的架构、工作原理以及如何进行定制开发。通过实例和代码示例,文档详细解释了如何使用CNF的API来创建自定义的导航视图,并提供了适配器和...

    Common Navigator Framework

    ### Common Navigator Framework (CNF) 分析 #### 1. 概述 Common Navigator Framework (CNF) 是一种用于帮助用户开发基于 Eclipse 的内容导航视图的框架。它允许开发者快速地将特定的资源和模型无缝集成到 ...

    CommonNavigatorFramework(CNF)实例源码

    `CommonNavigator`类是实现此功能的基础,开发者可以通过扩展这个类并重写相关方法来自定义视图行为。 3. **AdapterFactories**:CNF使用适配器工厂(AdapterFactory)将模型对象转换为可以被视图渲染的结构。...

    定义自己的Common Navigator二

    Common Navigator Framework (CNF) 是Eclipse中用于构建可扩展、可定制的资源导航视图的API。它提供了基本的结构,如树状视图,以及处理模型、适配器、过滤器、排序等功能。开发者可以通过实现一系列接口和扩展点,...

    Eclipse RCP Common Navigator Demo

    在Eclipse RCP中,Common Navigator Framework (CNF) 是一个关键组件,它提供了一种灵活的方式来展示资源树结构,类似于Eclipse IDE中的“Package Explorer”或“Project Explorer”。"Eclipse RCP Common Navigator...

    CommonNavigator

    **插件开发之:Common Navigator View (CNV) 通用导航试图.mht文件**: 这个文件名表明它可能是一个关于如何在插件系统中使用CommonNavigator的教程或文档。MHT(MHTML)文件是一种包含网页完整内容的单个文件,...

    eclipse插件开发之Common Navigator View

    【Eclipse插件开发之Common Navigator View】是关于在Eclipse插件开发中创建和定制一个基于Common Navigator View(CNV)的视图的过程。Common Navigator View是一种通用的视图结构,通常用于显示项目的资源层次结构...

    使用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查看器中展示特定文件类型数据的方法...

    【资料整理】中国Eclipse社区开发资料整理

    《中国Eclipse社区开发资料整理》是一份针对Eclipse开发工具的...通过阅读并实践这些教程,开发者可以更深入地理解Eclipse的内在工作原理,并能自如地利用Common Navigator Framework构建出符合项目需求的个性化视图。

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

    在Eclipse插件开发中,`CommonNavigator`框架是一个用于构建自定义资源管理器的关键组件。这个框架允许开发者创建和扩展资源视图,比如Eclipse的项目管理器。本篇文章将详细讲解如何利用`CommonNavigator`开发资源...

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

    在前一篇文章中,我们探讨了如何为一个通用导航器(Common Navigator)实例配置弹出菜单。我们了解到,通用导航器可以通过 `org.eclipse.ui.navigator.viewer` 扩展点声明所有菜单插入点,并且可以指定是否应尊重对 ...

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

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

    Eclipse Rcp comon Navigator demo

    在本"Common Navigator demo"中,我们将深入探讨如何利用Eclipse RCP创建一个基于Common Navigator的简单应用,并了解如何扩展这一基础功能。 首先,Common Navigator是Eclipse RCP中用于显示项目、文件和其他资源...

    LJ-Navigator2安装包文件

    互换积分是LJ-Navigator2的核心特性之一,这可能涉及到数据处理、通信协议解析或者设备状态监控等方面。在调试过程中,用户可以通过此功能来检查和调整设备间的交互数据,确保数据交换的准确性和效率。这对于保证...

    OptiX Navigator

    本文将深入探讨OptiX Navigator的功能特性、使用方法及其在华为传输系统中的关键作用。 一、OptiX Navigator简介 OptiX Navigator是华为传输网络管理系统的核心组件,主要用于实现对华为OptiX系列传输设备的远程...

Global site tag (gtag.js) - Google Analytics