- QWidget *w = pages[QString("%1$%2").arg(cat, title)];
- Q_ASSERT(w);
- ui.settingsStack->setCurrentWidget(w);
+ SettingsPage *sp = pages[QString("%1$%2").arg(cat, title)];
+ if(!sp) {
+ _currentPage = 0;
+ ui.settingsStack->setCurrentIndex(0);
+ ui.settingsTree->setCurrentItem(0);
+ return;
+ }
+ if(sp != currentPage() && currentPage() != 0 && currentPage()->hasChanged()) {
+ int ret = QMessageBox::warning(this, tr("Save changes"),
+ tr("There are unsaved changes on the current configuration page. Would you like to apply your changes now?"),
+ QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel);
+ if(ret == QMessageBox::Save) {
+ if(!applyChanges()) sp = currentPage();
+ } else if(ret == QMessageBox::Discard) {
+ undoChanges();
+ } else sp = currentPage();
+ }
+ if(sp != currentPage()) {
+ ui.pageTitle->setText(sp->title());
+ ui.settingsStack->setCurrentWidget(sp);
+ ui.settingsStack->setMinimumSize(sp->minimumSizeHint()); // we don't want our page shrinked, use scrollbars instead...
+ _currentPage = sp;
+ }
+ ui.settingsTree->setCurrentItem(treeItems[sp]);
+ setButtonStates();