File indexing completed on 2024-05-12 04:45:35
0001 /* 0002 SnoreNotify is a Notification Framework based on Qt 0003 Copyright (C) 2015 Hannah von Reth <vonreth@kde.org> 0004 0005 SnoreNotify is free software: you can redistribute it and/or modify 0006 it under the terms of the GNU Lesser General Public License as published by 0007 the Free Software Foundation, either version 3 of the License, or 0008 (at your option) any later version. 0009 0010 SnoreNotify is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 GNU Lesser General Public License for more details. 0014 0015 You should have received a copy of the GNU Lesser General Public License 0016 along with SnoreNotify. If not, see <http://www.gnu.org/licenses/>. 0017 */ 0018 0019 #include "settingsdialog.h" 0020 #include "ui_settingsdialog.h" 0021 #include "snore.h" 0022 #include "snore_p.h" 0023 #include "snoreconstants.h" 0024 #include "settings.h" 0025 0026 #include <QTabWidget> 0027 #include <QCheckBox> 0028 0029 using namespace Snore; 0030 0031 SettingsDialog::SettingsDialog(QWidget *parent) : 0032 QWidget(parent), 0033 ui(new Ui::SettingsDialog) 0034 { 0035 ui->setupUi(this); 0036 initTabs(); 0037 } 0038 0039 SettingsDialog::~SettingsDialog() 0040 { 0041 delete ui; 0042 } 0043 0044 void SettingsDialog::initTabs() 0045 { 0046 SnorePlugin::PluginTypes types = SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::PluginTypes).value<SnorePlugin::PluginTypes>(); 0047 if (types == SnorePlugin::None) { 0048 types = SnorePlugin::All; 0049 } 0050 auto addWidgets = [&](QTabWidget * target, QWidget * container, SnorePlugin::PluginTypes type) { 0051 bool enabled = false; 0052 target->clear(); 0053 if (types & type) { 0054 foreach(PluginSettingsWidget * widget, Settings::settingWidgets(type)) { 0055 target->addTab(widget, widget->name()); 0056 m_tabs.append(widget); 0057 enabled = true; 0058 } 0059 } 0060 if (enabled) { 0061 if (ui->tabWidget->indexOf(container) == -1) { 0062 ui->tabWidget->addTab(container, container->property("TAB_NAME").toString()); 0063 } 0064 } else { 0065 int index = ui->tabWidget->indexOf(container); 0066 container->setProperty("TAB_NAME", ui->tabWidget->tabText(index)); 0067 ui->tabWidget->removeTab(index); 0068 } 0069 }; 0070 addWidgets(ui->tabWidget_backends, ui->tab_backends, SnorePlugin::Backend); 0071 addWidgets(ui->tabWidget_secondary_backends, ui->tab_secondaryBackends, SnorePlugin::SecondaryBackend); 0072 addWidgets(ui->tabWidget_frontends, ui->tab_frontends, SnorePlugin::Frontend); 0073 addWidgets(ui->tabWidget_plugins, ui->tab_plugins, SnorePlugin::Plugin); 0074 0075 ui->errorLabel->setVisible(false); 0076 ui->errorLineEdit->setVisible(false); 0077 0078 connect(&SnoreCore::instance(), &SnoreCore::primaryNotificationBackendChanged, this, &SettingsDialog::loadPrimaryBackendBox); 0079 connect(&SnoreCore::instance(), &SnoreCore::primaryNotificationBackendError, [this](const QString & error) { 0080 ui->errorLabel->setVisible(true); 0081 ui->errorLineEdit->setVisible(true); 0082 ui->errorLineEdit->setText(error); 0083 }); 0084 } 0085 0086 void SettingsDialog::on_pushButton_clicked() 0087 { 0088 SnoreCore::instance().displayExampleNotification(); 0089 } 0090 0091 void SettingsDialog::load() 0092 { 0093 qCDebug(SNORE) << "loading"; 0094 loadPrimaryBackendBox(SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::PrimaryBackend).toString()); 0095 ui->timeoutSpinBox->setValue(SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::Timeout).toInt()); 0096 ui->disableNotificationSoundCheckBox->setChecked(SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::Silent).toBool()); 0097 foreach(auto widget, m_tabs) { 0098 widget->loadSettings(); 0099 } 0100 } 0101 0102 void SettingsDialog::loadPrimaryBackendBox(const QString &backend) 0103 { 0104 if (SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::PluginTypes).value<SnorePlugin::PluginTypes>() & SnorePlugin::Backend) { 0105 ui->primaryBackendComboBox->clear(); 0106 QStringList list = SnoreCore::instance().pluginNames(SnorePlugin::Backend); 0107 ui->primaryBackendComboBox->addItems(list); 0108 ui->primaryBackendComboBox->setCurrentIndex(list.indexOf(backend)); 0109 ui->primaryBackendComboBox->setVisible(true); 0110 ui->primaryBackendLabel->setVisible(true); 0111 } else { 0112 ui->primaryBackendComboBox->setVisible(false); 0113 ui->primaryBackendLabel->setVisible(false); 0114 } 0115 } 0116 0117 void SettingsDialog::save() 0118 { 0119 qCDebug(SNORE) << "saving"; 0120 bool dirty = false; 0121 foreach(auto w, m_tabs) { 0122 w->saveSettings(); 0123 dirty |= w->isDirty(); 0124 } 0125 dirty |= SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::PrimaryBackend).toString() != ui->primaryBackendComboBox->currentText(); 0126 dirty |= SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::Timeout).toInt() != ui->timeoutSpinBox->value(); 0127 dirty |= SnoreCore::instance().settingsValue(Snore::Constants::SettingsKeys::Silent).toBool() != ui->disableNotificationSoundCheckBox->isChecked(); 0128 0129 SnoreCore::instance().setSettingsValue(Snore::Constants::SettingsKeys::PrimaryBackend, ui->primaryBackendComboBox->currentText()); 0130 SnoreCore::instance().setSettingsValue(Snore::Constants::SettingsKeys::Timeout, ui->timeoutSpinBox->value()); 0131 SnoreCore::instance().setSettingsValue(Snore::Constants::SettingsKeys::Silent, ui->disableNotificationSoundCheckBox->isChecked()); 0132 0133 if (dirty) { 0134 SnoreCorePrivate::instance()->syncSettings(); 0135 } 0136 } 0137 0138 void SettingsDialog::setVisible(bool b) 0139 { 0140 if (b) { 0141 load(); 0142 } 0143 QWidget::setVisible(b); 0144 } 0145 0146 void SettingsDialog::accept() 0147 { 0148 save(); 0149 } 0150 0151 void SettingsDialog::reset() 0152 { 0153 load(); 0154 } 0155