void QtMultimediaNotificationBackend::ConfigWidget::save() { NotificationSettings s; s.setValue("QtMultimedia/Enabled", ui.enabled->isChecked()); s.setValue("QtMultimedia/AudioFile", ui.filename->text()); load(); }
void SystemTray::init() { ActionCollection *coll = QtUi::actionCollection("General"); _minimizeRestoreAction = new Action(tr("&Minimize"), this, this, SLOT(minimizeRestore())); #ifdef HAVE_KDE KMenu *kmenu; _trayMenu = kmenu = new KMenu(); kmenu->addTitle(_activeIcon, "Quassel IRC"); #else _trayMenu = new QMenu(associatedWidget()); #endif _trayMenu->setTitle("Quassel IRC"); #ifndef HAVE_KDE _trayMenu->setAttribute(Qt::WA_Hover); #endif _trayMenu->addAction(coll->action("ConnectCore")); _trayMenu->addAction(coll->action("DisconnectCore")); _trayMenu->addAction(coll->action("CoreInfo")); _trayMenu->addSeparator(); _trayMenu->addAction(_minimizeRestoreAction); _trayMenu->addAction(coll->action("Quit")); connect(_trayMenu, SIGNAL(aboutToShow()), SLOT(trayMenuAboutToShow())); NotificationSettings notificationSettings; notificationSettings.initAndNotify("Systray/Animate", this, SLOT(enableAnimationChanged(QVariant)), true); }
void SystrayNotificationBackend::ConfigWidget::load() { NotificationSettings s; _showBubble = s.value("Systray/ShowBubble", false).toBool(); _showBubbleBox->setChecked(_showBubble); setChangedState(false); }
void TaskbarNotificationBackend::ConfigWidget::save() { NotificationSettings s; s.setValue("Taskbar/Enabled", enabledBox->isChecked()); s.setValue("Taskbar/Timeout", timeoutBox->value() * 1000); load(); }
void DockManagerNotificationBackend::ConfigWidget::load() { NotificationSettings s; enabled = s.value("DockManager/Enabled", false).toBool(); enabledBox->setChecked(enabled); setChangedState(false); }
TaskbarNotificationBackend::TaskbarNotificationBackend(QObject* parent) : AbstractNotificationBackend(parent) { NotificationSettings notificationSettings; _enabled = notificationSettings.value("Taskbar/Enabled", true).toBool(); _timeout = notificationSettings.value("Taskbar/Timeout", 0).toInt(); notificationSettings.notify("Taskbar/Enabled", this, &TaskbarNotificationBackend::enabledChanged); notificationSettings.notify("Taskbar/Timeout", this, &TaskbarNotificationBackend::timeoutChanged); }
QtMultimediaNotificationBackend::QtMultimediaNotificationBackend(QObject* parent) : AbstractNotificationBackend(parent) { NotificationSettings notificationSettings; notificationSettings.notify("QtMultimedia/Enabled", this, &QtMultimediaNotificationBackend::enabledChanged); notificationSettings.notify("QtMultimedia/AudioFile", this, &QtMultimediaNotificationBackend::audioFileChanged); createMediaObject(notificationSettings.value("QtMultimedia/AudioFile", QString()).toString()); _enabled = notificationSettings.value("QtMultimedia/Enabled", true).toBool(); }
void QtMultimediaNotificationBackend::ConfigWidget::load() { NotificationSettings s; _enabled = s.value("QtMultimedia/Enabled", false).toBool(); _filename = s.value("QtMultimedia/AudioFile", QString()).toString(); ui.enabled->setChecked(_enabled); ui.filename->setText(_filename); setChangedState(false); }
void TaskbarNotificationBackend::ConfigWidget::load() { NotificationSettings s; enabled = s.value("Taskbar/Enabled", true).toBool(); timeout = s.value("Taskbar/Timeout", 0).toInt(); enabledBox->setChecked(enabled); timeoutBox->setValue(timeout / 1000); setChangedState(false); }
SystrayNotificationBackend::SystrayNotificationBackend(QObject *parent) : AbstractNotificationBackend(parent), _blockActivation(false) { NotificationSettings notificationSettings; notificationSettings.initAndNotify("Systray/ShowBubble", this, SLOT(showBubbleChanged(QVariant)), true); notificationSettings.initAndNotify("Systray/Animate", this, SLOT(animateChanged(QVariant)), true); connect(QtUi::mainWindow()->systemTray(), SIGNAL(messageClicked(uint)), SLOT(notificationActivated(uint))); connect(QtUi::mainWindow()->systemTray(), SIGNAL(activated(SystemTray::ActivationReason)), SLOT(notificationActivated(SystemTray::ActivationReason))); QApplication::instance()->installEventFilter(this); updateToolTip(); }
DockManagerNotificationBackend::DockManagerNotificationBackend(QObject* parent) : AbstractNotificationBackend(parent) , _bus(QDBusConnection::sessionBus()) { NotificationSettings notificationSettings; _enabled = notificationSettings.value("DockManager/Enabled", false).toBool(); notificationSettings.notify("DockManager/Enabled", this, &DockManagerNotificationBackend::enabledChanged); _dock = new QDBusInterface("net.launchpad.DockManager", "/net/launchpad/DockManager", "net.launchpad.DockManager", _bus, this); if (_dock->isValid()) { _bus.connect("net.launchpad.DockManager", "/net/launchpad/DockManager", "net.launchpad.DockManager", "ItemAdded", this, SLOT(itemAdded(QDBusObjectPath))); } else { // evil implementations (awn) use fd.o _dock = new QDBusInterface("org.freedesktop.DockManager", "/org/freedesktop/DockManager", "org.freedesktop.DockManager", _bus, this); if (_dock->isValid()) { _bus.connect("org.freedesktop.DockManager", "/org/freedesktop/DockManager", "org.freedesktop.DockManager", "ItemAdded", this, SLOT(itemAdded(QDBusObjectPath))); } else { _available = _enabled = false; return; } } _available = true; itemAdded(QDBusObjectPath()); connect(Client::coreConnection(), &CoreConnection::progressValueChanged, this, selectOverload<int>(&DockManagerNotificationBackend::updateProgress)); connect(Client::coreConnection(), &CoreConnection::synchronized, this, &DockManagerNotificationBackend::synchronized); }
void DockManagerNotificationBackend::ConfigWidget::save() { NotificationSettings s; s.setValue("DockManager/Enabled", enabledBox->isChecked()); load(); }
void CoreHighlightSettingsPage::importRules() { NotificationSettings notificationSettings; const auto localHighlightList = notificationSettings.highlightList(); // Re-use translations of "Legacy/Local Highlights" as this is a word-for-word reference, // forcing all spaces to non-breaking QString localHighlightsName; if (Quassel::runMode() == Quassel::Monolithic) { localHighlightsName = tr("Legacy Highlights").replace(" ", " "); } else { localHighlightsName = tr("Local Highlights").replace(" ", " "); } if (localHighlightList.count() == 0) { // No highlight rules exist to import, do nothing QMessageBox::information(this, tr("No highlights to import"), tr("No highlight rules in <i>%1</i>." ).arg(localHighlightsName)); return; } int ret = QMessageBox::question(this, tr("Import highlights?"), tr("Import all highlight rules from <i>%1</i>?" ).arg(localHighlightsName), QMessageBox::Yes|QMessageBox::No, QMessageBox::No); if (ret != QMessageBox::Yes) { // Only two options, Yes or No, return if not Yes return; } auto clonedManager = HighlightRuleManager(); clonedManager.fromVariantMap(Client::highlightRuleManager()->toVariantMap()); for (const auto &variant : notificationSettings.highlightList()) { auto highlightRule = variant.toMap(); clonedManager.addHighlightRule( clonedManager.nextId(), highlightRule["Name"].toString(), highlightRule["RegEx"].toBool(), highlightRule["CS"].toBool(), highlightRule["Enable"].toBool(), false, "", highlightRule["Channel"].toString() ); } Client::highlightRuleManager()->requestUpdate(clonedManager.toVariantMap()); setChangedState(false); load(); // Give a heads-up that all succeeded QMessageBox::information(this, tr("Imported highlights"), tr("%1 highlight rules successfully imported." ).arg(QString::number(localHighlightList.count()))); }
void SystrayNotificationBackend::ConfigWidget::save() { NotificationSettings s; s.setValue("Systray/ShowBubble", _showBubbleBox->isChecked()); load(); }
bool QtUiApplication::applySettingsMigration(QtUiSettings settings, const uint newVersion) { switch (newVersion) { // Version 0 and 1 aren't valid upgrade paths - one represents no version, the other is the // oldest version. Ignore those, start from 2 and higher. // Each missed version will be called in sequence. E.g. to upgrade from '1' to '3', this // function will be called with '2', then '3'. // Use explicit scope via { ... } to avoid cross-initialization // // In most cases, the goal is to preserve the older default values for keys that haven't been // saved. Exceptions will be noted below. // NOTE: If you add new upgrade logic here, you MUST ALSO increase VERSION_MINOR_CURRENT in // migrateSettings()! Otherwise, your upgrade logic won't ever be called. case 9: { // New default changes: show highest sender prefix mode, if available // -------- // ChatView settings ChatViewSettings chatViewSettings; const QString senderPrefixModeId = "SenderPrefixMode"; if (!chatViewSettings.valueExists(senderPrefixModeId)) { // New default is HighestMode, preserve previous behavior by setting to NoModes chatViewSettings.setValue(senderPrefixModeId, static_cast<int>(UiStyle::SenderPrefixMode::NoModes)); } // -------- // Migration complete! return true; } case 8: { // New default changes: RegEx checkbox now toggles Channel regular expressions, too // // This only affects local highlights. Core-side highlights weren't released in stable when // this change was made, so no need to migrate those. // -------- // NotificationSettings NotificationSettings notificationSettings; // Check each highlight rule for a "Channel" field. If one exists, convert to RegEx mode. // This might be more efficient with std::transform() or such. It /is/ only run once... auto highlightList = notificationSettings.highlightList(); bool changesMade = false; for (int index = 0; index < highlightList.count(); ++index) { // Load the highlight rule... auto highlightRule = highlightList[index].toMap(); // Check if "Channel" has anything set and RegEx is disabled if (!highlightRule["Channel"].toString().isEmpty() && highlightRule["RegEx"].toBool() == false) { // We have a rule to convert // Mark as a regular expression, allowing the Channel filtering to work the same as // before the upgrade highlightRule["RegEx"] = true; // Convert the main rule to regular expression, mirroring the conversion to wildcard // format from QtUiMessageProcessor::checkForHighlight() highlightRule["Name"] = "(^|\\W)" + QRegExp::escape(highlightRule["Name"].toString()) + "(\\W|$)"; // Save the rule back highlightList[index] = highlightRule; changesMade = true; } } // Save the modified rules if any changes were made if (changesMade) { notificationSettings.setHighlightList(highlightList); } // -------- // Migration complete! return true; } case 7: { // New default changes: UseProxy is no longer used in CoreAccountSettings CoreAccountSettings s; for (auto &&accountId : s.knownAccounts()) { auto map = s.retrieveAccountData(accountId); if (!map.value("UseProxy", false).toBool()) { map["ProxyType"] = static_cast<int>(QNetworkProxy::ProxyType::NoProxy); } map.remove("UseProxy"); s.storeAccountData(accountId, map); } // Migration complete! return true; } case 6: { // New default changes: sender colors switched around to Tango-ish theme // -------- // QtUiStyle settings QtUiStyleSettings settingsUiStyleColors("Colors"); // Preserve the old default values for all variants const QColor oldDefaultSenderColorSelf = QColor(0, 0, 0); const QList<QColor> oldDefaultSenderColors = QList<QColor> { QColor(204, 13, 127), /// Sender00 QColor(142, 85, 233), /// Sender01 QColor(179, 14, 14), /// Sender02 QColor( 23, 179, 57), /// Sender03 QColor( 88, 175, 179), /// Sender04 QColor(157, 84, 179), /// Sender05 QColor(179, 151, 117), /// Sender06 QColor( 49, 118, 179), /// Sender07 QColor(233, 13, 127), /// Sender08 QColor(142, 85, 233), /// Sender09 QColor(179, 14, 14), /// Sender10 QColor( 23, 179, 57), /// Sender11 QColor( 88, 175, 179), /// Sender12 QColor(157, 84, 179), /// Sender13 QColor(179, 151, 117), /// Sender14 QColor( 49, 118, 179), /// Sender15 }; if (!settingsUiStyleColors.valueExists("SenderSelf")) { // Preserve the old default sender color if none set settingsUiStyleColors.setValue("SenderSelf", oldDefaultSenderColorSelf); } QString senderColorId; for (int i = 0; i < oldDefaultSenderColors.count(); i++) { // Get the sender color ID for each available color QString dez = QString::number(i); if (dez.length() == 1) dez.prepend('0'); senderColorId = QString("Sender" + dez); if (!settingsUiStyleColors.valueExists(senderColorId)) { // Preserve the old default sender color if none set settingsUiStyleColors.setValue(senderColorId, oldDefaultSenderColors[i]); } } // Update the settings stylesheet with old defaults QtUiStyle qtUiStyle; qtUiStyle.generateSettingsQss(); // -------- // Migration complete! return true; } case 5: { // New default changes: sender colors apply to nearly all messages with nicks // -------- // QtUiStyle settings QtUiStyleSettings settingsUiStyleColors("Colors"); const QString useNickGeneralColorsId = "UseNickGeneralColors"; if (!settingsUiStyleColors.valueExists(useNickGeneralColorsId)) { // New default is true, preserve previous behavior by setting to false settingsUiStyleColors.setValue(useNickGeneralColorsId, false); } // Update the settings stylesheet with old defaults QtUiStyle qtUiStyle; qtUiStyle.generateSettingsQss(); // -------- // Migration complete! return true; } case 4: { // New default changes: system locale used to generate a timestamp format string, deciding // 24-hour or 12-hour timestamp. // -------- // ChatView settings const QString useCustomTimestampFormatId = "ChatView/__default__/UseCustomTimestampFormat"; if (!settings.valueExists(useCustomTimestampFormatId)) { // New default value is false, preserve previous behavior by setting to true settings.setValue(useCustomTimestampFormatId, true); } // -------- // Migration complete! return true; } case 3: { // New default changes: per-chat history and line wrapping enabled by default. // -------- // InputWidget settings UiSettings settingsInputWidget("InputWidget"); const QString enableInputPerChatId = "EnablePerChatHistory"; if (!settingsInputWidget.valueExists(enableInputPerChatId)) { // New default value is true, preserve previous behavior by setting to false settingsInputWidget.setValue(enableInputPerChatId, false); } const QString enableInputLinewrap = "EnableLineWrap"; if (!settingsInputWidget.valueExists(enableInputLinewrap)) { // New default value is true, preserve previous behavior by setting to false settingsInputWidget.setValue(enableInputLinewrap, false); } // -------- // Migration complete! return true; } case 2: { // New default changes: sender <nick> brackets disabled, sender colors and sender CTCP // colors enabled. // -------- // ChatView settings const QString timestampFormatId = "ChatView/__default__/TimestampFormat"; if (!settings.valueExists(timestampFormatId)) { // New default value is " hh:mm:ss", preserve old default of "[hh:mm:ss]" settings.setValue(timestampFormatId, "[hh:mm:ss]"); } const QString showSenderBracketsId = "ChatView/__default__/ShowSenderBrackets"; if (!settings.valueExists(showSenderBracketsId)) { // New default is false, preserve previous behavior by setting to true settings.setValue(showSenderBracketsId, true); } // -------- // -------- // QtUiStyle settings QtUiStyleSettings settingsUiStyleColors("Colors"); const QString useSenderColorsId = "UseSenderColors"; if (!settingsUiStyleColors.valueExists(useSenderColorsId)) { // New default is true, preserve previous behavior by setting to false settingsUiStyleColors.setValue(useSenderColorsId, false); } const QString useSenderActionColorsId = "UseSenderActionColors"; if (!settingsUiStyleColors.valueExists(useSenderActionColorsId)) { // New default is true, preserve previous behavior by setting to false settingsUiStyleColors.setValue(useSenderActionColorsId, false); } // Update the settings stylesheet with old defaults QtUiStyle qtUiStyle; qtUiStyle.generateSettingsQss(); // -------- // Migration complete! return true; } default: // Something unexpected happened return false; } }