У меня есть обходной путь, который работает с 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 (), пользователь не увидит изменения вкладки, если он не одобрен этим методом.