eroself
关于人生的程式,在这里谱写......
BlogJava :: 首页 :: 新随笔 :: 联系 :: :: 管理
留言簿(1)
给我留言
查看公开留言
查看私人留言
随笔分类
Eclipse(7)
GEF&EMF&GMF(1)
Java(7)
Trivial Life(11)
Ubuntu
WTP
相册
Maidenhair Tree
My University Life
Friends
cping1982(一睨天下)
octal system(八进制)
OpenSource(开源)
pupple(海边泡沫)
reloadcn(荒野困兽)
sparon(同事)
最新随笔
1. 构建基于通用导航器架构(CNF)的视图 第三部分:配置菜单
2. 构建基于通用导航器架构(CNF)的视图 第二部分:增加内容
3. 构建基于通用导航器架构(CNF)的视图 第一部分:定义ViewPart
4. 养生堂
5. 喜事到
6. 宝马忆
7. 静
8. 蔓草歌
9. 无题
10. Extension Object/Interface模式
搜索
最新评论
1. re: 方便管理plugin或rcp的icons[未登录]
评论内容较长,点击标题查看
--鬼谷子
2. re: 方便管理plugin或rcp的icons
PwdgatePlugin 类代码是什么,能否贴出来看看?
--noia_zhou
3. re: 养生堂[未登录]
很好很养生
--bobo
4. re: 喜事到
丫的思想咋长的?
啥都写....
--一叶清秋
5. re: 无题
作者遁入空门了...可喜可贺啊~
--遛弯儿
构建基于通用导航器架构(CNF)的视图 第二部分:增加内容
Posted on 2008-07-15 11:02 鬼谷子 阅读(184) 评论(0) 编辑 收藏 所属分类: Eclipse
转自:http://blog.csdn.net/windy444/archive/2007/12/31/2006304.aspx
由windy444翻译,转载请注明
原文名:Building a Common Navigator Framework (CNF) Viewer Part II: Adding Content,作者: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.
在这篇文章中,我们将学习如何为我们上篇文章定义的例子增加一个简单的内容扩展。为避免陷于过度复杂的内容和标签提供者,我们将关注于一个简单的文件结构模型,简单文本文件*.properties。当完成时,我们的内容扩展将允许在Example viewer展开任意*.properties文件,并在下面正确排列出数据。
首先,让我们看一下,内容扩展在plugin.xml中看起来是怎样的。(译者注:略过一些基本操作,plugin.xml如下:)
该扩展用id "org.eclipse.ui.examples.navigator.propertiesContent"定义了一个内容扩展,显示的名称是"Properties File Contents"。该名称会出现在过滤器对话框的"Available Extensions"标签中。我们马上会去看一下内容和标签提供者的Java代码,但现在只是注意一下,两者都被指定了。只指定其中的一个是不行的。
最后,我们设置一些属性,告诉框架,我们需要怎样的扩展:
• activeByDefault 决定扩展是否在缺省配置中被激活(如:新工作空间)
• icon 决定在用户界面引用该扩展时,显示什么图标
• priority 有几种不同的用法。最主要的作用是指定视图中项的相对位置(视图中从上到下排列的分别是最高优先级(highest priority)项到最低优先级(lowest priority)项)。一般的说,“一般级”("normal")或“高级”("high")对于大多数的扩展来说,足够了,两者分别预示着与资源扩展混合在一起(优先级一样的话,则按字母顺序)或恰好放在工程下的资源之上。
在每个<navigatorContent />元素内,我们能指定不同类别的扩展。但在扩展我们的例子之前,我们必须向架构定义,我们的扩展何时被调用。我们必须定义,什么时候视图中树的节点能够提供children,parents,或者标签和图标。我们用Eclipse 核心表达式来做这个工作。
对于内容扩展,这里有两个重要的表达式:<triggerPoints /> 和<possibleChildren />。
<triggerPoints />表达式指定树中哪种类型的节点对我们的扩展感兴趣。当架构找到了匹配<triggerPoints />的节点,我们的扩展会被调用,为该节点提供子元素。我们的扩展并不一定是唯一能有机会为该节点提供子元素的扩展,架构会聚集该节点下所有的子元素(译者注:可以是不同扩展提供的)。
<possibleChildren />表达式指定我们的扩展能为树中哪种类型的节点提供标签或父节点(译者注:注意与triggerPoints 的不同)。若你的场景中必须在视图中支持link with editor, 或者 setSelection(),<possibleChildren />表达式必须是完整且正确的。
一旦我们定义了一个扩展,我们必须把它绑定到想要关联的视图上。设定一个<viewerContentBinding />,来指定任何匹配include中模式的扩展,这些扩展对于在<viewerContentBinding />元素中指定的任何viewerId的视图是可见的。可以参考上一篇文章。
既然我们已经设置好了扩展,现在可以来看一下真正处理事务的代码了。
首先,我们需要一个模型。一个属性文件的结构是相当简单的,我们只要用一个模型对象PropertiesTreeData,就能够建模了。这个对象有三个域:name(属性的名称),value(属性的值),container(拥有属性模型的文件)。每一个模型元素,指示属性文件中的一条属性。
在我们的例子中,模型只有当被内容提供者请求时,才被载入。内容提供者被框架用来决定树中每个元素的子元素,或者被用来指定给定元素的父元素(可能有多个)。
我们的示例内容提供者实现了接口org.eclipse.jface.viewers.ITreeContentProvider,用来提供树形结构的信息。通用导航器架构也支持实现org.eclipse.jface.viewers.ITreePathContentProvider接口的内容提供者,但这个超出了本例的范围。
PropertiesContentProvider也提供了我们的扩展需要的其它一些功能,比如监听资源变化和更新模型(以及视图)。在本文中不会涉及,读者可以到本文的源码中了解这个是如何工作的。
现在,我们将关注ITreeContentProvider提供的视图集成方法。
ITreeContentProvider必须实现getElements(Object input),getChildren(Object parent), hasChildren(Object element) 和 getParent(Object element)方法。
getElements()方法被用来查询在视图根目录下有哪些元素。许多实现会直接调用getChildren()来处理,我们在这边也如此。
getChildren()方法接受一个对象(我们这里是*.properties结尾的IFile,或者是由于在<triggerPoints />中描述而必须引入的PropertiesTreeData模型实例)。
在接下来的实现中,我们检查接受的对象是否为org.eclipse.core.resources.IFile,并且是否以*.properties结尾。如果接受的对象满足这些要求,我们检查载入模型的缓存,当未缓存时,尝试载入模型。updateModel()方法将为每个属性创建一个PropertiesTreeData对象,并且在cachedModelMap中缓存所找到的模型。请读者在源码中查看updateModel()方法是如何实现的。
hasChildren()方法被优化了,知道当传入的对象是以*.properties结尾的IFile,就返回true。另一种替换的方法,是在这边载入文件,作一些计算,但这样性能会受损。
如果传入的对象是PropertiesTreeData模型元素,则返回false。因为我们的模型元素没有子元素。(属性没有子元素,但其它模型可能就会有了)。
getParent()方法返回包含PropertiesTreeData项的IFile,若传入其它参数,返回null。通用导航器架构会继续询问其它扩展,直到一个非null的的父元素被找到或者已经遍历了所有扩展。回忆一下,如果元素匹配<possibleChildren />表达式,扩展会被要求为该元素提供父节点。
最后,我们内容扩展的标签提供者,会告诉视图如何为我们的模型元素(PropertiesTreeData)来展现标签和图标。既然我们只关注这些元素,我们不必担心如何为其它元素来提供标签和图标。这些元素将由其它的扩展来展现标签和图标。
PropertiesLabelProvider实现了org.eclipse.jface.viewers.ILabelProvider 和
org.eclipse.ui.navigator.IDescriptionProvider接口。
ILabelProvider是JFace中提供标签和图标的缺省接口要求。
IDescriptionProvider是特定用于通用导航器架构的,用于在Eclipse窗口左下角的状态栏显示文本。
ILabelProvider要求的方法是getText() 和 getImage()。我们将让模型标签显示"name= value"的字符串。对于图标,我们使用平台提供的一个共享图标。
标签提供者在下面两种情况下会被访问到:1.自己的扩展定义的元素。2.所有匹配<possibleChildren />的元素。如果图标或标签返回了null,框架会基于<possibleChildren />和视图bindings,继续查找其它扩展(来显示标签和图标)。如果你的扩展希望由其它人来定义标签和图标,则要返回null。
就这些了,最终的视图Example View在属性文件下列出了属性。
IT新闻 新用户注册 刷新评论列表
IT新闻:
· Emotify.com:情绪网站
· AT&T成苹果iPad合作伙伴 成功阻击Verizon
· 纽约时报:三原因决定iPad不会让Kindle消亡
· 美股评论:甲骨文的正剧与插曲
· 北京晨报:互联网正在重塑中国商业
博客园首页 IT新闻 闪存 Java程序员招聘 学英语
标题 请输入标题
姓名 请输入你的姓名
主页
请输入验证码
验证码 *
内容(请不要发表任何与政治相关的内容) 请输入评论内容
Remember Me?
登录
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
博客园首页随笔:
· 超级简单的抽奖工具
· 分享一个完整的SAP RFC调用接口封装
· Net设计模式实例之访问者模式(Visitor Pattern)
· 【ASP.NET直达列车在哪里?】——当耐特砖家网上答疑
· Integration Services 学习(7):包部署
招聘信息:
· 中级java工程师(北京朝鲁天成科技有限公司)
· .Net C# 网站工程师(北京)(上海艾瑞市场咨询有限公司北京办事处)
· 九思诚聘软件销售(九思科技)
· 高级工程师(wap网游开发)增值电信事业部招聘信息(uusee)
· 资深手机软件开发工程师(某某某公司)
在知识库中查看:
构建基于通用导航器架构(CNF)的视图 第二部分:增加内容
网站导航:
博客园 IT新闻 个人主页 博客生活 IT博客网 C++博客 博客园社区 管理
相关文章:
构建基于通用导航器架构(CNF)的视图 第三部分:配置菜单
构建基于通用导航器架构(CNF)的视图 第二部分:增加内容
构建基于通用导航器架构(CNF)的视图 第一部分:定义ViewPart
RCP系统开发
扩展Eclipse视图弹出菜单
扩展Eclipse视图弹出菜单(二)
方便管理plugin或rcp的icons
Powered by:
BlogJava
Copyright © 鬼谷子
分享到:
相关推荐
### 构建通用导航框架(CNF)查看器——定义视图部分 #### 一、引言 在本文档中,我们将深入探讨如何构建一个基于Eclipse平台的通用导航框架(Common Navigator Framework, CNF)查看器。这不仅适用于Eclipse平台的...
### 构建通用导航框架查看器 (CNF) 第四部分:对象贡献 #### 概述 在前一篇文章中,我们探讨了如何为一个通用导航器(Common Navigator)实例配置弹出菜单。我们了解到,通用导航器可以通过 `org.eclipse.ui....
### 构建通用导航框架查看器 (CNF):配置菜单结构 在本文档中,我们将探讨如何构建一个通用导航框架 (CNF) 查看器,并重点介绍如何配置该查看器的菜单以及如何向其中添加操作来操控内容。文档分为几个部分进行详细...
MySQL5.6 数据库配置文件my.cnf,内容详细解释了各个配置。根据个人安装路径,手动修改资源中相应的路径即可使用。
CommonNavigatorFramework(CNF)是Eclipse平台中的一个框架,用于构建导航视图,它提供了在IDE中组织和浏览项目、文件以及各种资源的一种标准方式。这个框架使得开发者能够创建自定义的导航视图,以适应不同的开发...
### 构建通用导航框架(CNF)查看器——第二部分:添加内容 #### 概述 本篇文章将继续深入探讨如何构建一个通用导航框架(Common Navigator Framework,简称CNF)查看器,并着重介绍如何向该查看器添加内容扩展。...
Eclipse CNF(Container Network Function)框架文档是一个详细介绍Eclipse平台下如何构建和管理网络功能容器的资源。CNF框架是Eclipse社区为云原生网络功能(CNFs)提供的一种开发和部署环境,它结合了Eclipse PTP...
`org.eclipse.ui.navigator.viewer`和`org.eclipse.ui.navigator.resourceViewer`是与CNF相关的两个主要扩展点,用于注册新的导航视图和资源查看器。 7. **适配器(Adapters)**:适配器机制是CNF中的一大特色,它...
根据提供的文件内容,我们可以提炼出以下关于香港佳盈CNF101光电转换器的知识点: ***F101光电转换器的基本功能: CNF101是一款光电转换器,能够将10/100Base-T(X)电信号转换为10/100Base-FX光信号,进而扩展通信...
mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接可以用。 mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接可以用。 mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能和效率很大程度上取决于配置文件my.cnf。my.cnf文件包含了MySQL服务器的启动参数和配置选项,它决定了数据库的行为、资源使用以及性能优化策略。在这个名为...
用于docker配置mysql数据库需要的配置文件
标题中的“CNF.rar”可能是一个包含有关CNF算法详细资料的压缩文件,而“cnf.cnf算法”指的是CNF算法的具体实现或讨论,最后的“编译原理cfg”暗示了CNF在配置语法分析(CFG,Context-Free Grammar)中的应用。...
MySQL 8.0.35 版本 my.cnf文件
本文提出了一种基于自适应模糊补偿的机器人CNF控制器,其核心思想是将自适应模糊控制与CNF控制相结合,利用自适应模糊控制对系统的不确定性进行在线逼近,并将其作为CNF控制器的补偿项。这种方法结合了自适应模糊...
`openssl.cnf` 文件是 OpenSSL 工具集中的一个配置文件,它包含了各种设置和指令,用于指导 OpenSSL 库在执行各种操作时的行为,比如创建证书、密钥、CSR(Certificate Signing Request)等。当你尝试使用 OpenSSL ...
本文主要给大家介绍了关于MySQL中配置文件my.cnf因权限问题导致无法启动的相关解决过程,分享出来供大家参考学习,下面来一起看看详细的介绍: 问题描述 MySQL 无法启动,报如下错误: 问题分析 查看 MySQL 错误...
要求基于DPLL算法实现一个完备SAT求解器,对输入的CNF范式算例文件,解析并建立其内部表示;精心设计问题中变元、文字、子句、公式等有效的物理存储结构以及一定的分支变元处理策略,使求解器具有优化的执行性能;对...
MySQL 教程 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库 MySQL8.0数据库的一般配置 Linux环境的配置文件
Salever Common Navigator Framework(CNF)是基于Eclipse平台的一个可扩展的导航框架,它为开发人员提供了一种高效的方式来构建和展示复杂的、层次化的数据结构。CNF的核心目标是将数据模型与用户界面(UI)分离,...