在我的应用程序中,我希望用户在离开选项卡之前保存所有更改(实现为CTabFolder
)。
我尝试处理SelectionEvent
,但在标签更改后触发了(为什么它还有doit
字段?是否在更改之前触发一些其他控件?)
在Bugzilla上,我找到https://bugs.eclipse.org/bugs/show_bug.cgi?id=193453和https://bugs.eclipse.org/bugs/show_bug.cgi?id=193064,但两者都没有修复。
由于这个要求可能很常见,有没有人有解决方法?
答案 0 :(得分:1)
我有一个与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()中,我弹出一个你想要保存的对话框,并让用户有机会选择是,否或取消。是保存信息并返回true。不将信息恢复为上次保存的状态并返回true。取消只是返回false。您可能只想尝试保存并仅在保存失败时返回false。
在调用canChangePages()之前切换回旧页面可能看起来很奇怪。此调用快速执行,因此它给出了从不切换选项卡的错觉。无论canChangePages()花多长时间,用户都不会看到标签更改,除非它被该方法批准。