所谓的Navigator,可以简单的理解为Eclipse中的资源导航视图,例如:
Project Explorer视图 |
Project Explorer视图 |
这一系列,我们就要来实现一个类似的Navigator视图。
一、 定义Navigator
在开始之前,我们先了解一下做Navigator需要的扩展点:
1. org.eclipse.ui.navigator.viewer
这个扩展点就是用来定义整个Navigator用的。例如:Navigator绑定到哪个View上;它的Content是什么;它的actions是什么;它怎么支持拖动的,等等。
这个扩展点的实质是将一些内容组合到一起来决定这个Navigator的,所以它本身几乎是不需要写代码的。
2. org.eclipse.ui.navigator.navigatorContent
上一个扩展点,我们讲它需要有content的提供、action的提供者等等。这个扩展点就是用来提供这个用的。
当然,除了上面两个扩展点,我们也说是我们的Navigator需要绑定到一个view上,所以也需要一个org.eclipse.ui.views扩展点,因为这个扩展点比较通用,这里就不具体说了。
Navigator部分的API帮助,可以到以下包去找:org.eclipse.ui.navigator。所以显然你需要把这个插件包添加到依赖项里。
我们在做的时候也可以参照已有的实现:
图一
图一中,红色部分就是对应需要用到的两个扩展点,蓝色部分就是对应的定义了这个扩展点的插件。我们可以参考它们相应的实现来了解更多的应用方面的知识。
好。下面我们就来开始我们自己的Navigator。首先我们需要有一个插件工程。这个就不说了。首先我们定义一个org.eclipse.ui.views的扩展声明,如下:
<extension
point="org.eclipse.ui.views">
<category
id="com.tibco.cdc.liugang.navigator.category"
name="Common Navigator">
</category>
<view
allowMultiple="false"
category="com.tibco.cdc.liugang.navigator.category"
class="org.eclipse.ui.navigator.CommonNavigator"
icon="icons/alt_window_16.gif"
id="com.tibco.cdc.liugang.navigator.view"
name="Sample Navigator">
</view>
</extension>
这里需要注意的是:
class需要设定为“org.eclipse.ui.navigator.CommonNavigator”,当然你也可以定义自己的实现。一般来说都没有必要。
现在我们已经可以运行,看到一个view了:
图二
Ok,一个view就定义完了,下面就是我们要关注的两个扩展点的实现了。这一节,我们先讲第一个扩展点org.eclipse.ui.navigator.viewer,后两节会讲到另一个扩展点:org.eclipse.ui.navigator.navigatorContent
所以我们再定义一个org.eclipse.ui.navigator.viewer扩展声明。在继续之前我们先看一下下图:
图三
其中:viewerActionBinding对应于action的支持,例如选择某个对象,显示一个什么的右键菜单;viewerContentBinding对应于内容提供,就是在这navigator上显示什么内容;viewer对应的就是这个navigator要显示在哪个view上。
这一节里,我们将利用已经有的定义来充实这个扩展点。具体哪些内容可以填充,请到图一的各个实现里去找就可以了。这里我参照resources的实现(后面我们会讲到自定义实现),如下:
<extension
point="org.eclipse.ui.navigator.viewer">
<viewer
viewerId="com.tibco.cdc.liugang.navigator.view">
</viewer>
<viewerActionBinding
viewerId="com.tibco.cdc.liugang.navigator.view">
<includes>
<actionExtension
pattern="org.eclipse.ui.navigator.resources.*">
</actionExtension>
</includes>
</viewerActionBinding>
<viewerContentBinding
viewerId="com.tibco.cdc.liugang.navigator.view">
<includes>
<contentExtension
pattern="org.eclipse.ui.navigator.resourceContent">
</contentExtension>
</includes>
</viewerContentBinding>
</extension>
好,我们现在运行看看:
图四
OK,我们的view里已经有内容了,而且已经支持了右键菜单了。现在还不支持过滤,如果要支持一个过滤器也是容易的。我们只要加一个content声明就可以了。例如加上:
<contentExtension
pattern="org.eclipse.ui.navigator.resources.*">
</contentExtension>
加上上面声明,我们就支持所有resource的实现。显示如下:
图五
看图五中,以“.”开始的资源已经被过滤了。并且我们也支持了一些其他的过滤和内容显示设置。
OK,我们已经初步有了一个自己的Navigator了。下面我们会逐渐的增加更多的内定。
分享到:
相关推荐
这篇博客“定义自己的Common Navigator二”将深入探讨如何利用源码和工具来自定义这一组件,以满足特定项目的需求。 首先,我们来理解Common Navigator的核心概念。Common Navigator Framework (CNF) 是Eclipse中...
Common Navigator Framework(CNF)是Eclipse平台中的一个重要组件,主要负责提供一种统一的方式来展示和操作项目的导航结构。这个框架允许开发者创建自定义的导航视图,以适应各种不同的项目类型和开发环境。以下是...
1. **Common Navigator Model**:这是框架的核心,它定义了一个通用的数据模型,用于表示各种类型的数据结构。该模型抽象了数据源,使得不同的数据源可以通过适配器转换为统一的表示。 2. **Navigator Viewer**:它...
例如,添加一个名为`DemoNavigator`的视图,并指定视图类为`org.eclipse.ui.navigator.CommonNavigator`。 6. **运行和测试**:完成配置后,将XML内容复制到`plugin.xml`文件中,然后运行插件,可以看到一个简单的...
`CommonNavigator`类是实现此功能的基础,开发者可以通过扩展这个类并重写相关方法来自定义视图行为。 3. **AdapterFactories**:CNF使用适配器工厂(AdapterFactory)将模型对象转换为可以被视图渲染的结构。...
7. **Part Descriptor**:定义Common Navigator视图在工作台中的位置和行为,通过`org.eclipse.ui.perspectiveExtensions`和`org.eclipse.ui.views`元素进行配置。 8. **Perspective**:你可以创建或修改现有透视图...
第 1 章:插入 JFace 和 Common Navigator 框架 第 2 章:使用自定义扩展点扩展 Eclipse 第 3 章:使用 OSGi 服务动态连接应用程序 第 4 章:为 Gogo shell 定义命令 第 5 章:本机代码和片段包 第 6 章:理解服务...
在MQL Navigator的Dictionary部分,有Syntax、Data type、Operations & Expressions、Operators、Functions、Variables和Preprocessor等主题。如果你有C语言基础,快速浏览即可;如果没有,结合实际例子进行学习会更...
- **plugins**:插件目录存放了扩展jqGrid功能的各种插件,如`subgrid`用于子网格,`treegrid`用于树形结构展示,`navigator`提供额外的导航按钮,如添加、删除、编辑等。 - **js**:JavaScript代码的核心部分,...
CDT 是完全用 Java 实现的开放源码项目(根据 Common Public License 特许的),它作为 Eclipse SDK 平台的一组插件。这些插件将 C/C++ 透视图添加到 Eclipse 工作台(Workbench)中, 现在后者可以用许多视图和向导...
这套丛书深入探讨了Delphi 5这一经典开发平台的高级编程技术,涵盖了数据库、MIDAS(Middleware Data Services,中间件数据服务)、COM(Component Object Model,组件对象模型)以及CORBA(Common Object Request ...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...
import { Navigator } from '../../common'; Vue.$openRouter = Vue.prototype.$openRouter = Navigator.openRouter; ``` 然后在每个具体的页面入口文件中,引入并使用这个公共配置: ```javascript // index.js ...
为了在实际项目中应用这个功能,你可以在公共的JavaScript文件(如`Common.js`)中定义这个函数,并在每个页面加载时调用它。对于手机端和PC端,只需在相应的位置插入跳转页面的URL即可。例如,在手机端的公共JS中,...
最近抽些时间,更新到eclipse3.6上来,既作为为广大Eclipser入门plugin/RCP开发的一个方便之门,也是对自己近年来学习的一个总结吧。 每一章都会单独提取出来,并尽可能的独立于其他章节,更新中的源代码工程也会...
1 富客户端平台 ...................................................................................................................................... 9 1.1 概述 ..........................................