快速业务通道

如何使用Eclipse CNF的Saveable Protocol实现对View的保存 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
firePropertyChange() 方法将编辑器的界面状态更新,此时标题栏的星号(*)消失。

publicabstractbooleanisSaveAsAllowed(): 表明编辑器的“另存为”按钮是否可用。

publicabstractvoiddoSaveAs(): 在 isSaveAsAllowed() 返回 true 的情况下,用户点击“另存为”,doSaveAs() 方法将被调用。与 doSave 方法类似,用户可以在该方法里实现对模型的保存逻辑。一般情况下我们可能复用 doSave 的逻辑完成对模型内容的另存为。

protectedvoidfirePropertyChange(finalintpropertyId):当编辑器属性发生变化时,可以通过调用该方法通知所注册的监听器。例如,当修改发生时,在编辑器标题前出现的“*”前缀。

CNF 的 Saveable Protocol 的实现原理

与 Editor 的保存不同,View 往往是及时保存,即 view 上的修改在完成时就保存了,如我们选择了导航器上某个结点,并通过 PropertiesView 修改了结点的属性,例如结点的名字时,此时,属性的修改便及时地反映到导航器上。这是 Eclipse 应用开发所倡导的最佳实践之一,因为视图的主要用于对模型的导航,而不是对模型进行修改。因此,在 ViewPart 的实现上并不提供 doSave(),doSaveAs() 来对模型进行保存。

然而,一些 Eclipse 应用希望通过 view 来完成对模型结点的保存,例如,用户同时在 editor 上对几个不同的结点进行编辑,当编辑结束时,用户只想保存其中几个 editor 的修改,些时,如果只是通过逐一地对每个 editor 进行保存,这将大大地影响操作的效率。由于导航器起着对结点的导航功能,如果能通过在导航器上完成对多个不同结点的保存,将大大方便用户的操作。

ContentProvider 类用于帮助 CommonViewer 访问树型结点元素的,在 CNF 中,如果 Viewer 上的元素可以被保存,则该类必须实现 IAdaptable 可适配于 SaveablesProvider 实例。SaveablesProvider 将要保存的模型与树型结点元素进行映射,用于为导航器提供可保存的对象。SaveblesProvider 包含以下几个关键的方法:

public abstract Saveable[] getSaveables():返回该 provider 所能访问到的所有对象。

public abstract Object[] getElements(Saveable saveable):返回可保存对象所对应的树型结点上的模型元素。

public abstract Saveable getSaveable(Object element):返回树型结点元素所对应的可保存元素。

final protected void fireSaveablesOpened(Saveable[] models):通知所注册的监听器参数数组中的可保存的模型元素已经被打开。

final protected boolean fireSaveablesClosing(Saveable[] models, boolean force):通知所注册的监听器参数数组中的可保存的模型元素正在被关闭。

final protected void fireSaveablesClosed(Saveable[] models):通知所注册的监听器参数数组中的可保存的模型元素已经关闭。

如何使用Eclipse CNF的Saveable Protocol实现对View的保存(3)

时间:2012-01-28 IBM 黄飞

其中,fire* 方法必须在 UI 线程中被执行。同时,在 CommonNavigator 实现了 ISaveablesSourcer 接口,用于提供可保存对象。

Saveable[] getSaveables():返回所有可保存的模型元素。当其中的元素发生改变时,navigator 会通知所注册的监听器做出相应的反应。 Saveable[] getActiveSaveables():返回当前处于活动状态的可保存元素,所返回的元素基于用户当前所选择的元素。

图 4. Saveables 框架的调用过程

如上图所示,当所需要保存的元素发生改变时,调用 CommonNavigator 的 firePropertyChange 方法,表明其中的元素发生了变化,些时注册在其中的监听器,如 SaveAction, SaveAllAction 会通过 CommonNavigator 的 getActiveSaveables() 计算是否有可保存的元素发生

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号