// For license of this file, see /LICENSE.md. #include "gui/settings/settingsnotifications.h" #include "gui/notifications/notificationseditor.h" #include "miscellaneous/application.h" #include "miscellaneous/notificationfactory.h" #include "miscellaneous/settings.h" #include #include #include SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent) : SettingsPanel(settings, parent) { m_ui.setupUi(this); m_ui.m_lblInfo ->setHelpText(tr("There are some built-in notification sounds. Just start typing \":\" and they will show up."), true); connect(m_ui.m_checkEnableNotifications, &QCheckBox::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_editor, &NotificationsEditor::someNotificationChanged, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_rbCustomNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_rbCustomNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); connect(m_ui.m_sbScreen, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_sbMargin, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_sbWidth, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_sbOpacity, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_sbScreen, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::showScreenInfo); connect(m_ui.m_cbCustomNotificationsPosition, QOverload::of(&QComboBox::currentIndexChanged), this, &SettingsNotifications::dirtifySettings); } void SettingsNotifications::loadSettings() { onBeginLoadSettings(); m_ui.m_sbScreen->setMinimum(-1); m_ui.m_sbScreen->setMaximum(QGuiApplication::screens().size() - 1); QMetaEnum enm = QMetaEnum::fromType(); for (int i = 0; i < enm.keyCount(); i++) { m_ui.m_cbCustomNotificationsPosition ->addItem(ToastNotificationsManager:: textForPosition(ToastNotificationsManager::NotificationPosition(enm.value(i))), enm.value(i)); } // Load fancy notification settings. m_ui.m_checkEnableNotifications ->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::EnableNotifications)).toBool()); m_ui.m_editor->loadNotifications(qApp->notifications()->allNotifications()); m_ui.m_rbNativeNotifications ->setChecked(!settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool()); m_ui.m_sbScreen->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt()); m_ui.m_sbWidth->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsWidth)).toInt()); m_ui.m_sbMargin->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsMargin)).toInt()); m_ui.m_sbOpacity->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsOpacity)).toDouble() * 100); m_ui.m_cbCustomNotificationsPosition ->setCurrentIndex(m_ui.m_cbCustomNotificationsPosition ->findData(settings() ->value(GROUP(GUI), SETTING(GUI::ToastNotificationsPosition)) .value())); onEndLoadSettings(); } void SettingsNotifications::saveSettings() { onBeginSaveSettings(); // Save notifications. settings()->setValue(GROUP(GUI), GUI::EnableNotifications, m_ui.m_checkEnableNotifications->isChecked()); qApp->notifications()->save(m_ui.m_editor->allNotifications(), settings()); settings()->setValue(GROUP(GUI), GUI::UseToastNotifications, m_ui.m_rbCustomNotifications->isChecked()); settings()->setValue(GROUP(GUI), GUI::ToastNotificationsScreen, m_ui.m_sbScreen->value()); settings()->setValue(GROUP(GUI), GUI::ToastNotificationsWidth, m_ui.m_sbWidth->value()); settings()->setValue(GROUP(GUI), GUI::ToastNotificationsMargin, m_ui.m_sbMargin->value()); settings()->setValue(GROUP(GUI), GUI::ToastNotificationsOpacity, m_ui.m_sbOpacity->value() / 100.0); settings()->setValue(GROUP(GUI), GUI::ToastNotificationsPosition, m_ui.m_cbCustomNotificationsPosition->currentData() .value()); qApp->toastNotifications()->resetNotifications(true); qApp->toastNotifications()->showNotification(Notification::Event::GeneralEvent, GuiMessage(tr("How do I look?"), tr("Just testing new notifications settings. " "That's all."), QSystemTrayIcon::MessageIcon::Warning)); onEndSaveSettings(); } void SettingsNotifications::showScreenInfo(int index) { QScreen* scr; if (index < 0 || index >= QGuiApplication::screens().size()) { scr = QGuiApplication::primaryScreen(); } else { scr = QGuiApplication::screens().at(index); } m_ui.m_lblScreenInfo->setText(QSL("%1 (%2x%3)") .arg(scr->name(), QString::number(scr->virtualSize().width()), QString::number(scr->virtualSize().height()))); }