From: Manuel Nickschas Date: Fri, 10 Oct 2008 15:03:02 +0000 (+0200) Subject: Change NotificationsSettingsPage such that it plugs in the registered backends' X-Git-Tag: 0.3.1~179 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=dd72455b0cdade40fe5ff0cef7d464d71cdca45f Change NotificationsSettingsPage such that it plugs in the registered backends' configWidgets() rather than specifying its own UI. --- diff --git a/src/qtui/settingspages/notificationssettingspage.cpp b/src/qtui/settingspages/notificationssettingspage.cpp index fa2e7275..2c9585e4 100644 --- a/src/qtui/settingspages/notificationssettingspage.cpp +++ b/src/qtui/settingspages/notificationssettingspage.cpp @@ -18,26 +18,25 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include + #include "notificationssettingspage.h" #include "qtui.h" -#include "uisettings.h" -#include "buffersettings.h" NotificationsSettingsPage::NotificationsSettingsPage(QWidget *parent) : SettingsPage(tr("Behaviour"), tr("Notifications"), parent) { - ui.setupUi(this); - - connect(ui.animateTrayIcon, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.showBubble, SIGNAL(toggled(bool)), this, SLOT(widgetHasChanged())); - connect(ui.desktopBox, SIGNAL(toggled(bool)), this, SLOT(widgetHasChanged())); - connect(ui.timeout_value, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); - connect(ui.x_value, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); - connect(ui.y_value, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); -#ifndef HAVE_DBUS - ui.desktopBox->setVisible(false); -#endif + QVBoxLayout *layout = new QVBoxLayout(this); + foreach(AbstractNotificationBackend *backend, QtUi::notificationBackends()) { + SettingsPage *cw = backend->configWidget(); + if(cw) { + _configWidgets.append(cw); + layout->addWidget(cw); + connect(cw, SIGNAL(changed(bool)), SLOT(widgetHasChanged())); + } + } + layout->addStretch(1); } bool NotificationsSettingsPage::hasDefaults() const { @@ -45,65 +44,30 @@ bool NotificationsSettingsPage::hasDefaults() const { } void NotificationsSettingsPage::defaults() { - ui.animateTrayIcon->setChecked(true); - ui.showBubble->setChecked(true); - ui.desktopBox->setChecked(false); - ui.timeout_value->setValue(5000); - ui.x_value->setValue(0); - ui.y_value->setValue(0); - + foreach(SettingsPage *cw, _configWidgets) + cw->defaults(); widgetHasChanged(); } void NotificationsSettingsPage::load() { - // uiSettings: - UiSettings uiSettings; - - settings["AnimateTrayIcon"] = uiSettings.value("AnimateTrayIcon", QVariant(true)); - ui.animateTrayIcon->setChecked(settings["AnimateTrayIcon"].toBool()); - - settings["NotificationBubble"] = uiSettings.value("NotificationBubble", QVariant(true)); - ui.showBubble->setChecked(settings["NotificationBubble"].toBool()); - - settings["NotificationDesktop"] = uiSettings.value("NotificationDesktop", QVariant(false)); - ui.desktopBox->setChecked(settings["NotificationDesktop"].toBool()); - settings["NotificationDesktopTimeout"] = uiSettings.value("NotificationDesktopTimeout", QVariant(5000)); - ui.timeout_value->setValue(settings["NotificationDesktopTimeout"].toInt()); - settings["NotificationDesktopHintX"] = uiSettings.value("NotificationDesktopHintX", QVariant(0)); - ui.x_value->setValue(settings["NotificationDesktopHintX"].toInt()); - settings["NotificationDesktopHintY"] = uiSettings.value("NotificationDesktopHintY", QVariant(0)); - ui.y_value->setValue(settings["NotificationDesktopHintY"].toInt()); - + foreach(SettingsPage *cw, _configWidgets) + cw->load(); setChangedState(false); } void NotificationsSettingsPage::save() { - UiSettings uiSettings; - - uiSettings.setValue("AnimateTrayIcon", ui.animateTrayIcon->isChecked()); - - uiSettings.setValue("NotificationBubble", ui.showBubble->isChecked()); - uiSettings.setValue("NotificationDesktop", ui.desktopBox->isChecked()); - uiSettings.setValue("NotificationDesktopTimeout", ui.timeout_value->value()); - uiSettings.setValue("NotificationDesktopHintX", ui.x_value->value()); - uiSettings.setValue("NotificationDesktopHintY", ui.y_value->value()); - - load(); + foreach(SettingsPage *cw, _configWidgets) + cw->save(); setChangedState(false); } void NotificationsSettingsPage::widgetHasChanged() { - bool changed = testHasChanged(); + bool changed = false; + foreach(SettingsPage *cw, _configWidgets) { + if(cw->hasChanged()) { + changed = true; + break; + } + } if(changed != hasChanged()) setChangedState(changed); } - -bool NotificationsSettingsPage::testHasChanged() { - if(settings["AnimateTrayIcon"].toBool() != ui.animateTrayIcon->isChecked()) return true; - if(settings["NotificationBubble"].toBool() != ui.showBubble->isChecked()) return true; - if(settings["NotificationDesktop"].toBool() != ui.desktopBox->isChecked()) return true; - if(settings["NotificationDesktopTimeout"].toInt() != ui.timeout_value->value()) return true; - if(settings["NotificationDesktopHintX"].toInt() != ui.x_value->value()) return true; - if(settings["NotificationDesktopHintY"].toInt() != ui.y_value->value()) return true; - - return false; -} diff --git a/src/qtui/settingspages/notificationssettingspage.h b/src/qtui/settingspages/notificationssettingspage.h index d1559141..653c097a 100644 --- a/src/qtui/settingspages/notificationssettingspage.h +++ b/src/qtui/settingspages/notificationssettingspage.h @@ -24,8 +24,12 @@ #include #include "settingspage.h" -#include "ui_notificationssettingspage.h" +//! A settings page for configuring notifications +/** This class just vertically stacks the ConfigWidgets of the registered notification backends. + * \NOTE: When this is called, all backends need to be already registered. No dynamic changes + * are tracked or reacted to! + */ class NotificationsSettingsPage : public SettingsPage { Q_OBJECT @@ -43,10 +47,7 @@ class NotificationsSettingsPage : public SettingsPage { void widgetHasChanged(); private: - Ui::NotificationsSettingsPage ui; - QHash settings; - - bool testHasChanged(); + QList _configWidgets; }; #endif diff --git a/src/qtui/settingspages/notificationssettingspage.ui b/src/qtui/settingspages/notificationssettingspage.ui deleted file mode 100644 index 17ffed9f..00000000 --- a/src/qtui/settingspages/notificationssettingspage.ui +++ /dev/null @@ -1,139 +0,0 @@ - - NotificationsSettingsPage - - - - 0 - 0 - 422 - 386 - - - - Form - - - - - - System Tray - - - - - - Animate tray icon - - - true - - - - - - - Show Bubble - - - - - - - - - - Sends Quassel's notifications to a notification daemon compliant to Freedesktop's Notification specification (org.freedesktop.Notification). - - - Desktop Notification (via DBus) - - - true - - - - - - - - Timeout - - - - - - - -1 - - - 100000 - - - 5000 - - - - - - - X - - - - - - - 10000 - - - - - - - Y - - - - - - - 10000 - - - - - - - - - Qt::Horizontal - - - - 261 - 20 - - - - - - - - - - - Qt::Vertical - - - - 20 - 143 - - - - - - - - - diff --git a/src/qtui/settingspages/settingspages.inc b/src/qtui/settingspages/settingspages.inc index d2072341..9549d99e 100644 --- a/src/qtui/settingspages/settingspages.inc +++ b/src/qtui/settingspages/settingspages.inc @@ -1,9 +1,9 @@ # Putting $FOO in SETTINGSPAGES automatically includes # $FOOsettingspage.cpp, $FOOsettingspage.h and $FOOsettingspage.ui -set(SETTINGSPAGES aliases appearance bufferview color fonts general highlight identities networks notifications) +set(SETTINGSPAGES aliases appearance bufferview color fonts general highlight identities networks) # Specify additional files (e.g. for subdialogs) here! -set(SP_SOURCES aliasesmodel.cpp) -set(SP_HEADERS aliasesmodel.h) +set(SP_SOURCES aliasesmodel.cpp notificationssettingspage.cpp) +set(SP_HEADERS aliasesmodel.h notificationssettingspage.h) set(SP_FORMS buffervieweditdlg.ui createidentitydlg.ui saveidentitiesdlg.ui networkeditdlg.ui nickeditdlg.ui servereditdlg.ui)