这二个方法就是实现界面状态持久化的关键,注意saveState方法是在IPersistable接口中定义的。这些我们暂时忽略,主要是看如何使用这些机制。 如果去看JDT的实现或是org.eclipse.ui.ide一些视图的实现,你可以发现一些比较常用的实现形式。下面先看一段示例
这是重写你自定义视图的init方法,定义一个全局的IMemento对象,初始化的时候为它赋值。并定义一系列的标识常量,用来表示你要保存的数据的标识。这一点与IDialogSettings是一致的。 下面是保存视图实现代码,如果你第一次接触可能有点晕,不过没关系,熟悉了以后你会发现Eclipse的内部实现也是类似的。下面的代码就是从Eclipse里面改过来的。
要保存的数据是key--value形式,可以定义Boolean Integer Float String等基本类型对应的值,这些值就以key--value形式持久化到文件中。 上面的实现内容其实就是把视图中的树组件中的二部分状态转换成数据:展开元素和被选中元素。通过把它们转换成String类型(其实就是树路径)保存起来。IMemento的具体用法请查找Eclipse帮助文档。 完成了保存,下面我们看如何重新把数据取出来,使得打开的时候还原之前关闭时的状态。 init()方法调用的时候界面控件是还没有被创建的,所以不能在init()方法中添加还原的方法,应用在控件都创建完成后还原。
完成控件创建后就调用restoreState方法,这是我们自定义的用于还原视图状态的方法。下面看一下,内容基本上就是saveState方法的逆向。
这些工作就可以完成视图状态的保存与还原,还有一个特别要注意的地方,你必须对插件的WorkbenchAdvisor类的public void initialize(IWorkbenchConfigurer configurer)方法进行重写,添加configurer.setSaveAndRestore(true);这个方法就可以打开保存机制。如果没有这个步骤,上面的工作不会起任何效果。 GUI状态的持久化都保存在运行时生成的.metadata\.plugins目录下的xml文件,你可以手动去打开这些文件查看数据结果是否跟你预期的一样。IEditorPart以及Perspective和其它的全局信息持久化的也是同样的原理。只是复杂度不一样。建议可以查看org.eclipse.ui.ide中的实现原理。
posted on 2007-10-31 08:46 liaojiyong 阅读(1310) 评论(0) 编辑 收藏
Powered by: BlogJava Copyright © liaojiyong