Сохранение состояния TreeViewer прежде setInput ()

Здесь существует сравнительная таблица:

Сравнение Разновидности Regex

10
задан flavio.donze 1 April 2016 в 07:29
поделиться

2 ответа

Вам необходимо убедиться, что ваш контент-провайдер TreeViewer предоставляет объекты, у которых их методы hashCode и равны ] правильно определены. AbstractTreeViewer должен иметь возможность сравнивать старые и новые объекты, чтобы определить их состояние расширения.

10
ответ дан 3 December 2019 в 23:50
поделиться

Как упоминалось в этой ветке , взгляните на последний ResourceNavigator из пакет org.eclipse.ui.views.navigator .
(«поздно», потому что этот класс больше не используется напрямую, см. Eclipse Wiki ).

alt text (как видно в модели Java eclipse )

Он использует TreeViewer и сохраняет развернутые элементы и выбранные элементы, среди прочего.
Элементами модели являются объекты IResource , которые сохраняются с помощью механизма IPersistableElement / IElementFactory .
Адаптер IPersistableElement зарегистрирован в IResource в классе WorkbenchAdapter , но вместо этого он может быть получен с помощью элемента модели, непосредственно реализующего IPersistableElement . 1138708] Соответствующий 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());
            }
        }
    }
    [...]
 }
3
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: