/***************************************************************************
- * Copyright (C) 2005-07 by the Quassel IRC Team *
+ * Copyright (C) 2005-08 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) {
ui.setupUi(this);
+ _currentPage = 0;
//ui.settingsFrame->setWidgetResizable(true);
//ui.settingsFrame->setWidget(ui.settingsStack);
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
}
+SettingsPage *SettingsDlg::currentPage() const {
+ return _currentPage;
+}
void SettingsDlg::registerSettingsPage(SettingsPage *sp) {
sp->setParent(ui.settingsStack);
ui.settingsStack->addWidget(sp);
+ connect(sp, SIGNAL(changed(bool)), this, SLOT(setButtonStates()));
QTreeWidgetItem *cat;
QList<QTreeWidgetItem *> cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly);
pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp;
updateGeometry();
// TESTING
- //selectPage(sp->category(), sp->title());
+ selectPage(sp->category(), sp->title());
}
void SettingsDlg::selectPage(const QString &cat, const QString &title) {
- 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)];
+ Q_ASSERT(sp); // FIXME allow for invalid settings pages
+ ui.settingsStack->setCurrentWidget(sp);
+ _currentPage = sp;
+ setButtonStates();
}
void SettingsDlg::itemSelected() {
+ // Check if we have changed anything...
+ // TODO
+
QList<QTreeWidgetItem *> items = ui.settingsTree->selectedItems();
if(!items.count()) {
return;
}
}
+void SettingsDlg::setButtonStates() {
+ SettingsPage *sp = currentPage();
+ ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(sp && sp->hasChanged());
+ ui.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(sp && sp->hasChanged());
+ ui.buttonBox->button(QDialogButtonBox::Reset)->setEnabled(sp && sp->hasChanged());
+}
+
void SettingsDlg::buttonClicked(QAbstractButton *button) {
switch(ui.buttonBox->standardButton(button)) {
case QDialogButtonBox::Ok:
- applyChanges();
- accept();
+ if(applyChanges()) accept();
break;
case QDialogButtonBox::Apply:
applyChanges();
}
}
-void SettingsDlg::applyChanges() {
- foreach(SettingsPage *page, pages.values()) {
- page->save();
+bool SettingsDlg::applyChanges() {
+ if(!currentPage()) return false;
+ if(currentPage()->aboutToSave()) {
+ currentPage()->save();
+ return true;
}
+ return false;
}
+// TODO add messagebox
void SettingsDlg::reload() {
SettingsPage *page = qobject_cast<SettingsPage *>(ui.settingsStack->currentWidget());
if(page) page->load();