正如这个线程中提到的,看看后期ResourceNavigator
,从
org.eclipse.ui.views.navigator
包。
(“迟到”是因为不再直接使用该类,请参阅Eclipse Wiki)。
(如eclipse Java Model中所见)
它使用TreeViewer
, 并保存展开的元素和选定的元素等状态。
模型元素是使用/机制IResource
持久化的对象。适配器在 class
中注册,但这可以通过模型元素直接实现来获得。
对应的声明在's的扩展中。IPersistableElement
IElementFactory
IPersistableElement
IResource
WorkbenchAdapter
IPersistableElement
IElementFactory
elementFactory
org.eclipse.ui.ide
plugin.xml
恢复的资源知道如何通过树的内容提供者获取他们自己的孩子(和父母),因此并非树的所有元素都需要持久化。
可以使用类似的方法来保存观众的输入资源。
对于ResourceNavigator
,这里通过它FrameList
的当前帧存在一定程度的间接性,但是如果您在调试器中单步执行它,您会发现它本质上是在做同样的事情。
小摘录(但其余代码还保存了许多其他内容,包括选择)
if (frameList.getCurrentIndex() > 0) {
//save frame, it's not the "home"/workspace frame
TreeFrame currentFrame = (TreeFrame) frameList.getCurrentFrame();
IMemento frameMemento = memento.createChild(TAG_CURRENT_FRAME);
currentFrame.saveState(frameMemento);
} else {
//save visible expanded elements
Object JavaDoc expandedElements[] = viewer.getVisibleExpandedElements();
if (expandedElements.length > 0) {
IMemento expandedMem = memento.createChild(TAG_EXPANDED);
for (int i = 0; i < expandedElements.length; i++) {
if (expandedElements[i] instanceof IResource) {
IMemento elementMem = expandedMem
.createChild(TAG_ELEMENT);
elementMem.putString(TAG_PATH,
((IResource) expandedElements[i]).getFullPath()
.toString());
}
}
}
[...]
}