Вызов Eclipse ViewPart saveState on View закрыть - PullRequest
4 голосов
/ 28 февраля 2012

У меня есть плагин Eclipse, который использует представление, которое расширяет ViewPartViewPart есть метод saveState, который требует IMemento.

. Я добавил свой код к saveState и соответствующий метод init, и он работает.К сожалению, saveState вызывается только в том случае, если все рабочее пространство закрывается.Мой взгляд не так важен, что я могу ожидать, что он будет открыт все время.Следовательно, было бы здорово, если бы saveState был вызван при закрытии вида.

Я нашел слушателя части представления как средство реагирования на закрытие вида, но я не понимаю, где IMementoпроисходит от.Где взять объект памятки, который используется при закрытии рабочего пространства?Или где я должен хранить свой собственный объект memento, чтобы заставить часть представления использовать его в методе init, если представление (повторно) открыто?

@Override
public void saveState(IMemento memento) {
    super.saveState(memento);
    memento = memento.createChild(MEMENTO_GUI_STATE);
    memento.putBoolean(MEMENTO_IS_FLAT, !isHierarchicalModeActive());
    memento.putBoolean(MEMENTO_IS_CATEGORY_MODE_ACTIVE, comboViewer.isVisible());
}

Это моя saveState - можетЯ говорю своему представлению, как-то сказать, чтобы вызывать его каждый раз, когда представление закрывается?

Ответы [ 3 ]

4 голосов
/ 23 апреля 2012

Взгляните на этот вопрос в Eclipse FAQ:

Сохранение состояния просмотра выполняется двумя общими способами, в зависимости от того, Вы хотите сохранить настройки между сеансами рабочего места или через вызовы вашего взгляда. Первый из этих объектов найден прямо на IViewPart. Когда верстак выключен, метод saveState вызывается для всех открытых представлений.

Другим механизмом сохранения состояния просмотра является JFace IDialogSettings средство. Преимущество настроек диалога над механизм сохранения / инициализации просмотра позволяет контролировать настройки сохранялось. Метод saveState вызывается, только если ваше представление открыто когда верстак выключается, так что это не полезно для сохранения вида состояние, когда представление закрыто пользователем. Настройки диалога, на с другой стороны, может быть изменен и сохранен в любое время.

Перейдите к этому другому вопросу или к документации по Eclipse для механизма настройки.

2 голосов
/ 28 февраля 2012

Ну, это может быть "немного" некрасиво, но больше ничего не приходило мне в голову: сохранить переменную memento в качестве переменной поля, инициализировать ее в вашем методе init(IViewSite site, IMemento memento), переопределить dispose() и явно вызвать saveState(IMemento memento).

0 голосов
/ 06 марта 2012

Вы можете читать и писать свой собственный XMLMemento из вашего org.eclipse.core.runtime.Plugin.getStateLocation() в любое время. Как упоминал @BelaViser, вы можете написать свой файл в методе IViewPart#dispose() и прочитать его в конструкторе представления.

...