Как уже упоминалось в this thread, посмотрите на конце ResourceNavigator
из пакета org.eclipse.ui.views.navigator
.
(«поздно», потому что этот класс больше не используется напрямую, см. Eclipse Wiki).
(как видно в eclipse Java Model)
Он использует TreeViewer
, и сохраняет расширенные элементы и выбранные элементы, среди прочего состояния.
Элементы модели: IResource
Объекты, которые сохраняются с использованием механизма IPersistableElement
/IElementFactory
.
Адаптер IPersistableElement
зарегистрирован в отношении IResource
в классе WorkbenchAdapter
, но вместо этого он может быть получен с помощью элемента модели, реализующего непосредственно IPersistableElement
.
Соответствующий IElementFactory
указан в номере elementFactory
в org.eclipse.ui.ide
's 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());
}
}
}
[...]
}
Спасибо, он работает после реализации методов equals и hashset. – penguru