Есть ли обходные пути к отсутствию событий PreSelection в SWT / JFace? - PullRequest
1 голос
/ 02 июня 2010

В моем приложении я хочу, чтобы пользователь сохранил любые изменения, прежде чем покинет вкладку (реализовано как CTabFolder).

Я пытался обработать SelectionEvent, но он срабатывает после вкладка была изменена (так почему у нее даже есть поле doit? Она срабатывает до изменения для некоторых другихэлементы управления?)

Глядя на Bugzilla, я обнаружил https://bugs.eclipse.org/bugs/show_bug.cgi?id=193453 и https://bugs.eclipse.org/bugs/show_bug.cgi?id=193064,, ни одно из которых не является фиксированным.

Поскольку это требование, вероятно, распространено,У кого-нибудь есть обходной путь?

1 Ответ

1 голос
/ 04 июня 2010

У меня есть обходной путь, который работает с org.eclipse.ui.part.MultiPageEditorPart, который поддерживается CTabFolder. Я адаптирую его для прямой реализации CTabFolder.

Сначала используйте слушатель выбора:

tabFolder.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        pageChange(tabFolder.indexOf((CTabItem) e.item));
    }
});

Затем я реализую pageChange () следующим образом:

protected void pageChange(int newPageIndex) {
    boolean changingPages = this.changingPages;
    this.changingPages = true;
    int oldPageIndex = tabFolder.getSelectionIndex();

    if (isDirty() && !changingPages) {
        tabFolder.setSelection(oldPageIndex);

        if (canChangePages()) {
            tabFolder.setSelection(newPageIndex);
        }
    }

    this.changingPages = false;
}

В canChangePages () я выскакиваю, хотите ли вы сохранить диалог и дать пользователю возможность выбрать да, нет или отменить. Да сохраняет информацию и возвращает истину. Нет возвращает информацию к последнему сохраненному состоянию и возвращает истину. Отмена просто возвращает ложь. Вы можете просто попытаться сохранить и вернуть false только в случае сбоя сохранения.

Может показаться странным, что я переключаюсь на старую страницу перед вызовом canChangePages (). Этот вызов выполняется быстро, поэтому иллюзия вкладки никогда не переключается. Независимо от того, сколько времени занимает canChangePages (), пользователь не увидит изменения вкладки, если он не одобрен этим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...