From 12028f7dfb31ebf5694f5dae95bfc31bcde83b43 Mon Sep 17 00:00:00 2001 From: Janne Koschinski Date: Thu, 21 Dec 2017 22:18:11 +0100 Subject: [PATCH] Only enable the relevant highlight depending on core features - If connected to a modern core, disable local highlights - Otherwise, disable remote highlights --- src/qtui/settingsdlg.cpp | 4 +++- src/qtui/settingspages/corehighlightsettingspage.cpp | 6 +++++- src/qtui/settingspages/corehighlightsettingspage.h | 2 ++ src/qtui/settingspages/highlightsettingspage.cpp | 7 ++++++- src/qtui/settingspages/highlightsettingspage.h | 2 ++ src/uisupport/settingspage.h | 7 +++++++ 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 7d413467..82548b3a 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -81,7 +81,9 @@ void SettingsDlg::setItemState(QTreeWidgetItem *item) { SettingsPage *sp = qobject_cast(item->data(0, SettingsPageRole).value()); Q_ASSERT(sp); - item->setDisabled(!Client::isConnected() && sp->needsCoreConnection()); + bool disabledDueToConnection = !Client::isConnected() && sp->needsCoreConnection(); + bool disabledDueToOwnChoice = !sp->isSelectable(); + item->setDisabled(disabledDueToConnection || disabledDueToOwnChoice); } diff --git a/src/qtui/settingspages/corehighlightsettingspage.cpp b/src/qtui/settingspages/corehighlightsettingspage.cpp index d8eaa9f9..3a6d6eb0 100644 --- a/src/qtui/settingspages/corehighlightsettingspage.cpp +++ b/src/qtui/settingspages/corehighlightsettingspage.cpp @@ -26,7 +26,7 @@ #include "qtui.h" CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent) - : SettingsPage(tr("Interface"), tr("Core-Side Highlights"), parent) + : SettingsPage(tr("Interface"), tr("Remote Highlights"), parent) { ui.setupUi(this); @@ -496,3 +496,7 @@ void CoreHighlightSettingsPage::importRules() { setChangedState(false); load(); } + +bool CoreHighlightSettingsPage::isSelectable() const { + return Client::isConnected() && Client::isCoreFeatureEnabled(Quassel::Feature::CoreSideHighlights); +} diff --git a/src/qtui/settingspages/corehighlightsettingspage.h b/src/qtui/settingspages/corehighlightsettingspage.h index bd4dd465..637c3ba5 100644 --- a/src/qtui/settingspages/corehighlightsettingspage.h +++ b/src/qtui/settingspages/corehighlightsettingspage.h @@ -37,6 +37,8 @@ public: bool hasDefaults() const override; + bool isSelectable() const override; + public slots: void save() override; void load() override; diff --git a/src/qtui/settingspages/highlightsettingspage.cpp b/src/qtui/settingspages/highlightsettingspage.cpp index 57bd526d..cb84b9fa 100644 --- a/src/qtui/settingspages/highlightsettingspage.cpp +++ b/src/qtui/settingspages/highlightsettingspage.cpp @@ -20,13 +20,14 @@ #include "highlightsettingspage.h" +#include "client.h" #include "qtui.h" #include "uisettings.h" #include HighlightSettingsPage::HighlightSettingsPage(QWidget *parent) - : SettingsPage(tr("Interface"), tr("Highlight"), parent) + : SettingsPage(tr("Interface"), tr("Local Highlights"), parent) { ui.setupUi(this); ui.highlightTable->verticalHeader()->hide(); @@ -292,3 +293,7 @@ bool HighlightSettingsPage::testHasChanged() return false; } + +bool HighlightSettingsPage::isSelectable() const { + return !Client::isConnected() || !Client::isCoreFeatureEnabled(Quassel::Feature::CoreSideHighlights); +} diff --git a/src/qtui/settingspages/highlightsettingspage.h b/src/qtui/settingspages/highlightsettingspage.h index 563074c0..87ff64b6 100644 --- a/src/qtui/settingspages/highlightsettingspage.h +++ b/src/qtui/settingspages/highlightsettingspage.h @@ -36,6 +36,8 @@ public: bool hasDefaults() const; + bool isSelectable() const override; + public slots: void save(); void load(); diff --git a/src/uisupport/settingspage.h b/src/uisupport/settingspage.h index c3c9a600..c158c6b7 100644 --- a/src/uisupport/settingspage.h +++ b/src/uisupport/settingspage.h @@ -74,6 +74,13 @@ public: */ inline virtual bool needsCoreConnection() const { return false; } + /** + * Whether the settingspage should be selectable or not, in a given situation + * Used for pages that should only be visible if certain features are available (or not). + * @return + */ + inline virtual bool isSelectable() const { return true; } + //! The key this settings page stores its values under /** This needs to be overriden to enable automatic loading/saving/hasChanged checking of widgets. * The child widgets' values will be stored in client settings under this key. Every widget that -- 2.20.1