cmake: avoid de-duplication of user's CXXFLAGS
[quassel.git] / src / qtui / settingspages / corehighlightsettingspage.cpp
index 9315f3f..cb13489 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2018 by the Quassel Project                        *
+ *   Copyright (C) 2005-2022 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
+#include "corehighlightsettingspage.h"
+
+#include <algorithm>
+
 #include <QHeaderView>
 #include <QMessageBox>
 #include <QTableWidget>
 
 #include "client.h"
-#include "corehighlightsettingspage.h"
 #include "icon.h"
 #include "qtui.h"
+#include "util.h"
 
-CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent)
-    : SettingsPage(tr("Interface"),
-                   // In Monolithic mode, local highlights are replaced by remote highlights
-                   Quassel::runMode() == Quassel::Monolithic ?
-                       tr("Highlights") : tr("Remote Highlights"),
+CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget* parent)
+    : SettingsPage(tr("Interface"), tr("Highlights"),
                    parent)
 {
     ui.setupUi(this);
@@ -43,88 +44,65 @@ CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent)
     ui.highlightNicksComboBox->addItem(tr("Current Nick"), QVariant(HighlightRuleManager::CurrentNick));
     ui.highlightNicksComboBox->addItem(tr("None"), QVariant(HighlightRuleManager::NoNick));
 
-    coreConnectionStateChanged(Client::isConnected()); // need a core connection!
-    connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool)));
+    coreConnectionStateChanged(Client::isConnected());  // need a core connection!
+    connect(Client::instance(), &Client::coreConnectionStateChanged, this, &CoreHighlightSettingsPage::coreConnectionStateChanged);
 
-    connect(ui.highlightAdd, SIGNAL(clicked(bool)), this, SLOT(addNewHighlightRow()));
-    connect(ui.highlightRemove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedHighlightRows()));
-    connect(ui.highlightImport, SIGNAL(clicked(bool)), this, SLOT(importRules()));
+    connect(ui.highlightAdd, &QAbstractButton::clicked, this, [this]() { addNewHighlightRow(); });
+    connect(ui.highlightRemove, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::removeSelectedHighlightRows);
+    connect(ui.highlightImport, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::importRules);
 
-    connect(ui.ignoredAdd, SIGNAL(clicked(bool)), this, SLOT(addNewIgnoredRow()));
-    connect(ui.ignoredRemove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedIgnoredRows()));
+    connect(ui.ignoredAdd, &QAbstractButton::clicked, this, [this]() { addNewIgnoredRow(); });
+    connect(ui.ignoredRemove, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::removeSelectedIgnoredRows);
 
-    // TODO: search for a better signal (one that emits everytime a selection has been changed for one item)
-    connect(ui.highlightTable,
-            SIGNAL(itemClicked(QTableWidgetItem * )),
-            this,
-            SLOT(selectHighlightRow(QTableWidgetItem * )));
-    connect(ui.ignoredTable,
-            SIGNAL(itemClicked(QTableWidgetItem * )),
-            this,
-            SLOT(selectIgnoredRow(QTableWidgetItem * )));
+    // TODO: search for a better signal (one that emits every time a selection has been changed for one item)
+    connect(ui.highlightTable, &QTableWidget::itemClicked, this, &CoreHighlightSettingsPage::selectHighlightRow);
+    connect(ui.ignoredTable, &QTableWidget::itemClicked, this, &CoreHighlightSettingsPage::selectIgnoredRow);
 
     // Update the "Case sensitive" checkbox
     connect(ui.highlightNicksComboBox,
-            SIGNAL(currentIndexChanged(int)),
+            selectOverload<int>(&QComboBox::currentIndexChanged),
             this,
-            SLOT(highlightNicksChanged(int)));
-
-    connect(ui.highlightNicksComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged()));
-    connect(ui.nicksCaseSensitive, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged()));
+            &CoreHighlightSettingsPage::highlightNicksChanged);
+    connect(ui.highlightNicksComboBox, selectOverload<int>(&QComboBox::currentIndexChanged), this, &CoreHighlightSettingsPage::widgetHasChanged);
+    connect(ui.nicksCaseSensitive, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::widgetHasChanged);
 
-    connect(ui.highlightAdd, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
-    connect(ui.highlightRemove, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
+    connect(ui.highlightAdd, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::widgetHasChanged);
+    connect(ui.highlightRemove, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::widgetHasChanged);
 
-    connect(ui.ignoredAdd, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
-    connect(ui.ignoredRemove, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
+    connect(ui.ignoredAdd, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::widgetHasChanged);
+    connect(ui.ignoredRemove, &QAbstractButton::clicked, this, &CoreHighlightSettingsPage::widgetHasChanged);
 
-    connect(ui.highlightTable,
-            SIGNAL(itemChanged(QTableWidgetItem * )),
-            this,
-            SLOT(highlightTableChanged(QTableWidgetItem * )));
+    connect(ui.highlightTable, &QTableWidget::itemChanged, this, &CoreHighlightSettingsPage::highlightTableChanged);
 
-    connect(ui.ignoredTable,
-            SIGNAL(itemChanged(QTableWidgetItem * )),
-            this,
-            SLOT(ignoredTableChanged(QTableWidgetItem * )));
+    connect(ui.ignoredTable, &QTableWidget::itemChanged, this, &CoreHighlightSettingsPage::ignoredTableChanged);
 
-    connect(Client::instance(), SIGNAL(connected()), this, SLOT(clientConnected()));
+    connect(Client::instance(), &Client::connected, this, &CoreHighlightSettingsPage::clientConnected);
 
     // Warning icon
-    ui.coreUnsupportedIcon->setPixmap(icon::get("dialog-warning").pixmap(16));
+    ui.coreUnsupportedIcon->setPixmap(icon::get({"emblem-unavailable", "dialog-warning"}).pixmap(16));
 
     // Set up client/monolithic remote highlights information
-    if (Quassel::runMode() == Quassel::Monolithic) {
-        // We're running in Monolithic mode, local highlights are considered legacy
-        ui.highlightImport->setText(tr("Import Legacy"));
-        ui.highlightImport->setToolTip(tr("Import highlight rules configured in <i>%1</i>.")
-                                       .arg(tr("Legacy Highlights").replace(" ", "&nbsp;")));
-        // Re-use translations of "Legacy Highlights" as this is a word-for-word reference, forcing
-        // all spaces to be non-breaking
-    } else {
-        // We're running in client/split mode, local highlights are distinguished from remote
-        ui.highlightImport->setText(tr("Import Local"));
-        ui.highlightImport->setToolTip(tr("Import highlight rules configured in <i>%1</i>.")
-                                       .arg(tr("Local Highlights").replace(" ", "&nbsp;")));
-        // Re-use translations of "Local Highlights" as this is a word-for-word reference, forcing
-        // all spaces to be non-breaking
-    }
+    // Local highlights are considered legacy
+    ui.highlightImport->setText(tr("Import Legacy"));
+    ui.highlightImport->setToolTip(
+        tr("Import highlight rules configured in <i>%1</i>.").arg(tr("Legacy Highlights").replace(" ", "&nbsp;")));
+    // Re-use translations of "Legacy Highlights" as this is a word-for-word reference, forcing
+    // all spaces to be non-breaking
 }
 
-
 void CoreHighlightSettingsPage::coreConnectionStateChanged(bool state)
 {
     updateCoreSupportStatus(state);
     setEnabled(state);
     if (state) {
         load();
-    } else {
+    }
+    else {
         revert();
     }
 }
 
-
-void CoreHighlightSettingsPage::setupRuleTable(QTableWidget *table) const
+void CoreHighlightSettingsPage::setupRuleTable(QTableWidget* table) const
 {
     table->verticalHeader()->hide();
     table->setShowGrid(false);
@@ -144,7 +122,6 @@ void CoreHighlightSettingsPage::setupRuleTable(QTableWidget *table) const
     table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents);
 }
 
-
 QString CoreHighlightSettingsPage::getTableTooltip(column tableColumn) const
 {
     switch (tableColumn) {
@@ -197,10 +174,8 @@ QString CoreHighlightSettingsPage::getTableTooltip(column tableColumn) const
     }
 }
 
-
-void CoreHighlightSettingsPage::setupTableTooltips(QWidget *enableWidget, QWidget *nameWidget,
-                                                   QWidget *regExWidget, QWidget *csWidget,
-                                                   QWidget *senderWidget, QWidget *chanWidget) const
+void CoreHighlightSettingsPage::setupTableTooltips(
+    QWidget* enableWidget, QWidget* nameWidget, QWidget* regExWidget, QWidget* csWidget, QWidget* senderWidget, QWidget* chanWidget) const
 {
     // Make sure everything's valid
     Q_ASSERT(enableWidget);
@@ -236,13 +211,12 @@ void CoreHighlightSettingsPage::setupTableTooltips(QWidget *enableWidget, QWidge
     chanWidget->setWhatsThis(chanWidget->toolTip());
 }
 
-
-void CoreHighlightSettingsPage::setupTableTooltips(QTableWidgetItem *enableWidget,
-                                                   QTableWidgetItem *nameWidget,
-                                                   QTableWidgetItem *regExWidget,
-                                                   QTableWidgetItem *csWidget,
-                                                   QTableWidgetItem *senderWidget,
-                                                   QTableWidgetItem *chanWidget) const
+void CoreHighlightSettingsPage::setupTableTooltips(QTableWidgetItem* enableWidget,
+                                                   QTableWidgetItem* nameWidget,
+                                                   QTableWidgetItem* regExWidget,
+                                                   QTableWidgetItem* csWidget,
+                                                   QTableWidgetItem* senderWidget,
+                                                   QTableWidgetItem* chanWidget) const
 {
     // Make sure everything's valid
     Q_ASSERT(enableWidget);
@@ -278,7 +252,6 @@ void CoreHighlightSettingsPage::setupTableTooltips(QTableWidgetItem *enableWidge
     chanWidget->setWhatsThis(chanWidget->toolTip());
 }
 
-
 void CoreHighlightSettingsPage::updateCoreSupportStatus(bool state)
 {
     // Assume connected state as enforced by the settings page UI
@@ -287,20 +260,19 @@ void CoreHighlightSettingsPage::updateCoreSupportStatus(bool state)
         // warning.  Don't show the warning needlessly when disconnected.
         ui.highlightsConfigWidget->setEnabled(true);
         ui.coreUnsupportedWidget->setVisible(false);
-    } else {
+    }
+    else {
         // Core does not support highlights, show warning and disable highlight configuration
         ui.highlightsConfigWidget->setEnabled(false);
         ui.coreUnsupportedWidget->setVisible(true);
     }
 }
 
-
 void CoreHighlightSettingsPage::clientConnected()
 {
-    connect(Client::highlightRuleManager(), SIGNAL(updated()), SLOT(revert()));
+    connect(Client::highlightRuleManager(), &SyncableObject::updated, this, &CoreHighlightSettingsPage::revert);
 }
 
-
 void CoreHighlightSettingsPage::revert()
 {
     if (!hasChanged())
@@ -310,13 +282,11 @@ void CoreHighlightSettingsPage::revert()
     load();
 }
 
-
 bool CoreHighlightSettingsPage::hasDefaults() const
 {
     return true;
 }
 
-
 void CoreHighlightSettingsPage::defaults()
 {
     int highlightNickType = HighlightRuleManager::HighlightNickType::CurrentNick;
@@ -329,9 +299,8 @@ void CoreHighlightSettingsPage::defaults()
     widgetHasChanged();
 }
 
-
-void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, int id, const QString &name, bool regex, bool cs,
-                                                   const QString &sender, const QString &chanName, bool self)
+void CoreHighlightSettingsPage::addNewHighlightRow(
+    bool enable, int id, const QString& name, bool regex, bool cs, const QString& sender, const QString& chanName, bool self)
 {
     ui.highlightTable->setRowCount(ui.highlightTable->rowCount() + 1);
 
@@ -339,32 +308,32 @@ void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, int id, const QS
         id = nextId();
     }
 
-    auto *nameItem = new QTableWidgetItem(name);
+    autonameItem = new QTableWidgetItem(name);
 
-    auto *regexItem = new QTableWidgetItem("");
+    autoregexItem = new QTableWidgetItem("");
     if (regex)
         regexItem->setCheckState(Qt::Checked);
     else
         regexItem->setCheckState(Qt::Unchecked);
     regexItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *csItem = new QTableWidgetItem("");
+    autocsItem = new QTableWidgetItem("");
     if (cs)
         csItem->setCheckState(Qt::Checked);
     else
         csItem->setCheckState(Qt::Unchecked);
     csItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *enableItem = new QTableWidgetItem("");
+    autoenableItem = new QTableWidgetItem("");
     if (enable)
         enableItem->setCheckState(Qt::Checked);
     else
         enableItem->setCheckState(Qt::Unchecked);
     enableItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *senderItem = new QTableWidgetItem(sender);
+    autosenderItem = new QTableWidgetItem(sender);
 
-    auto *chanNameItem = new QTableWidgetItem(chanName);
+    autochanNameItem = new QTableWidgetItem(chanName);
 
     setupTableTooltips(enableItem, nameItem, regexItem, csItem, senderItem, chanNameItem);
 
@@ -382,9 +351,8 @@ void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, int id, const QS
     highlightList << HighlightRuleManager::HighlightRule(id, name, regex, cs, enable, false, sender, chanName);
 }
 
-
-void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, int id, const QString &name, bool regex, bool cs,
-                                                 const QString &sender, const QString &chanName, bool self)
+void CoreHighlightSettingsPage::addNewIgnoredRow(
+    bool enable, int id, const QString& name, bool regex, bool cs, const QString& sender, const QString& chanName, bool self)
 {
     ui.ignoredTable->setRowCount(ui.ignoredTable->rowCount() + 1);
 
@@ -392,32 +360,32 @@ void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, int id, const QStr
         id = nextId();
     }
 
-    auto *nameItem = new QTableWidgetItem(name);
+    autonameItem = new QTableWidgetItem(name);
 
-    auto *regexItem = new QTableWidgetItem("");
+    autoregexItem = new QTableWidgetItem("");
     if (regex)
         regexItem->setCheckState(Qt::Checked);
     else
         regexItem->setCheckState(Qt::Unchecked);
     regexItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *csItem = new QTableWidgetItem("");
+    autocsItem = new QTableWidgetItem("");
     if (cs)
         csItem->setCheckState(Qt::Checked);
     else
         csItem->setCheckState(Qt::Unchecked);
     csItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *enableItem = new QTableWidgetItem("");
+    autoenableItem = new QTableWidgetItem("");
     if (enable)
         enableItem->setCheckState(Qt::Checked);
     else
         enableItem->setCheckState(Qt::Unchecked);
     enableItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
-    auto *chanNameItem = new QTableWidgetItem(chanName);
+    autochanNameItem = new QTableWidgetItem(chanName);
 
-    auto *senderItem = new QTableWidgetItem(sender);
+    autosenderItem = new QTableWidgetItem(sender);
 
     setupTableTooltips(enableItem, nameItem, regexItem, csItem, senderItem, chanNameItem);
 
@@ -435,15 +403,14 @@ void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, int id, const QStr
     ignoredList << HighlightRuleManager::HighlightRule(id, name, regex, cs, enable, true, sender, chanName);
 }
 
-
 void CoreHighlightSettingsPage::removeSelectedHighlightRows()
 {
     QList<int> selectedRows;
-    QList<QTableWidgetItem *> selectedItemList = ui.highlightTable->selectedItems();
+    QList<QTableWidgetItem*> selectedItemList = ui.highlightTable->selectedItems();
     for (auto selectedItem : selectedItemList) {
         selectedRows.append(selectedItem->row());
     }
-    qSort(selectedRows.begin(), selectedRows.end(), qGreater<int>());
+    std::sort(selectedRows.begin(), selectedRows.end(), std::greater<>());
     int lastRow = -1;
     for (auto row : selectedRows) {
         if (row != lastRow) {
@@ -454,15 +421,14 @@ void CoreHighlightSettingsPage::removeSelectedHighlightRows()
     }
 }
 
-
 void CoreHighlightSettingsPage::removeSelectedIgnoredRows()
 {
     QList<int> selectedRows;
-    QList<QTableWidgetItem *> selectedItemList = ui.ignoredTable->selectedItems();
+    QList<QTableWidgetItem*> selectedItemList = ui.ignoredTable->selectedItems();
     for (auto selectedItem : selectedItemList) {
         selectedRows.append(selectedItem->row());
     }
-    qSort(selectedRows.begin(), selectedRows.end(), qGreater<int>());
+    std::sort(selectedRows.begin(), selectedRows.end(), std::greater<>());
     int lastRow = -1;
     for (auto row : selectedRows) {
         if (row != lastRow) {
@@ -473,7 +439,6 @@ void CoreHighlightSettingsPage::removeSelectedIgnoredRows()
     }
 }
 
-
 void CoreHighlightSettingsPage::highlightNicksChanged(const int index)
 {
     // Only allow toggling "Case sensitive" when a nickname will be highlighted
@@ -481,27 +446,20 @@ void CoreHighlightSettingsPage::highlightNicksChanged(const int index)
     ui.nicksCaseSensitive->setEnabled(highlightNickType != HighlightRuleManager::NoNick);
 }
 
-
-void CoreHighlightSettingsPage::selectHighlightRow(QTableWidgetItem *item)
+void CoreHighlightSettingsPage::selectHighlightRow(QTableWidgetItem* item)
 {
     int row = item->row();
     bool selected = item->isSelected();
-    ui.highlightTable
-        ->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, CoreHighlightSettingsPage::ColumnCount - 1),
-                           selected);
+    ui.highlightTable->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, CoreHighlightSettingsPage::ColumnCount - 1), selected);
 }
 
-
-void CoreHighlightSettingsPage::selectIgnoredRow(QTableWidgetItem *item)
+void CoreHighlightSettingsPage::selectIgnoredRow(QTableWidgetItem* item)
 {
     int row = item->row();
     bool selected = item->isSelected();
-    ui.ignoredTable
-        ->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, CoreHighlightSettingsPage::ColumnCount - 1),
-                           selected);
+    ui.ignoredTable->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, CoreHighlightSettingsPage::ColumnCount - 1), selected);
 }
 
-
 void CoreHighlightSettingsPage::emptyHighlightTable()
 {
     // ui.highlight and highlightList should have the same size, but just to make sure.
@@ -514,7 +472,6 @@ void CoreHighlightSettingsPage::emptyHighlightTable()
     highlightList.clear();
 }
 
-
 void CoreHighlightSettingsPage::emptyIgnoredTable()
 {
     // ui.highlight and highlightList should have the same size, but just to make sure.
@@ -527,81 +484,76 @@ void CoreHighlightSettingsPage::emptyIgnoredTable()
     ignoredList.clear();
 }
 
-
-void CoreHighlightSettingsPage::highlightTableChanged(QTableWidgetItem *item)
+void CoreHighlightSettingsPage::highlightTableChanged(QTableWidgetItem* item)
 {
     if (item->row() + 1 > highlightList.size())
         return;
 
     auto highlightRule = highlightList.value(item->row());
 
-
     switch (item->column()) {
-        case CoreHighlightSettingsPage::EnableColumn:
-            highlightRule.setIsEnabled(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::NameColumn:
-            highlightRule.setContents(item->text());
-            break;
-        case CoreHighlightSettingsPage::RegExColumn:
-            highlightRule.setIsRegEx(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::CsColumn:
-            highlightRule.setIsCaseSensitive(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::SenderColumn:
-            if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
-                item->setText("");
-            highlightRule.setSender(item->text());
-            break;
-        case CoreHighlightSettingsPage::ChanColumn:
-            if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
-                item->setText("");
-            highlightRule.setChanName(item->text());
-            break;
+    case CoreHighlightSettingsPage::EnableColumn:
+        highlightRule.setIsEnabled(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::NameColumn:
+        highlightRule.setContents(item->text());
+        break;
+    case CoreHighlightSettingsPage::RegExColumn:
+        highlightRule.setIsRegEx(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::CsColumn:
+        highlightRule.setIsCaseSensitive(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::SenderColumn:
+        if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
+            item->setText("");
+        highlightRule.setSender(item->text());
+        break;
+    case CoreHighlightSettingsPage::ChanColumn:
+        if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
+            item->setText("");
+        highlightRule.setChanName(item->text());
+        break;
     }
     highlightList[item->row()] = highlightRule;
     emit widgetHasChanged();
 }
 
-
-void CoreHighlightSettingsPage::ignoredTableChanged(QTableWidgetItem *item)
+void CoreHighlightSettingsPage::ignoredTableChanged(QTableWidgetItem* item)
 {
     if (item->row() + 1 > ignoredList.size())
         return;
 
     auto ignoredRule = ignoredList.value(item->row());
 
-
     switch (item->column()) {
-        case CoreHighlightSettingsPage::EnableColumn:
-            ignoredRule.setIsEnabled(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::NameColumn:
-            ignoredRule.setContents(item->text());
-            break;
-        case CoreHighlightSettingsPage::RegExColumn:
-            ignoredRule.setIsRegEx(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::CsColumn:
-            ignoredRule.setIsCaseSensitive(item->checkState() == Qt::Checked);
-            break;
-        case CoreHighlightSettingsPage::SenderColumn:
-            if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
-                item->setText("");
-            ignoredRule.setSender(item->text());
-            break;
-        case CoreHighlightSettingsPage::ChanColumn:
-            if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
-                item->setText("");
-            ignoredRule.setChanName(item->text());
-            break;
+    case CoreHighlightSettingsPage::EnableColumn:
+        ignoredRule.setIsEnabled(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::NameColumn:
+        ignoredRule.setContents(item->text());
+        break;
+    case CoreHighlightSettingsPage::RegExColumn:
+        ignoredRule.setIsRegEx(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::CsColumn:
+        ignoredRule.setIsCaseSensitive(item->checkState() == Qt::Checked);
+        break;
+    case CoreHighlightSettingsPage::SenderColumn:
+        if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
+            item->setText("");
+        ignoredRule.setSender(item->text());
+        break;
+    case CoreHighlightSettingsPage::ChanColumn:
+        if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
+            item->setText("");
+        ignoredRule.setChanName(item->text());
+        break;
     }
     ignoredList[item->row()] = ignoredRule;
     emit widgetHasChanged();
 }
 
-
 void CoreHighlightSettingsPage::load()
 {
     emptyHighlightTable();
@@ -609,14 +561,24 @@ void CoreHighlightSettingsPage::load()
 
     auto ruleManager = Client::highlightRuleManager();
     if (ruleManager) {
-        for (auto &rule : ruleManager->highlightRuleList()) {
+        for (autorule : ruleManager->highlightRuleList()) {
             if (rule.isInverse()) {
-                addNewIgnoredRow(rule.isEnabled(), rule.id(), rule.contents(), rule.isRegEx(),
-                                 rule.isCaseSensitive(), rule.sender(), rule.chanName());
+                addNewIgnoredRow(rule.isEnabled(),
+                                 rule.id(),
+                                 rule.contents(),
+                                 rule.isRegEx(),
+                                 rule.isCaseSensitive(),
+                                 rule.sender(),
+                                 rule.chanName());
             }
             else {
-                addNewHighlightRow(rule.isEnabled(), rule.id(), rule.contents(), rule.isRegEx(),
-                                   rule.isCaseSensitive(), rule.sender(), rule.chanName());
+                addNewHighlightRow(rule.isEnabled(),
+                                   rule.id(),
+                                   rule.contents(),
+                                   rule.isRegEx(),
+                                   rule.isCaseSensitive(),
+                                   rule.sender(),
+                                   rule.chanName());
             }
         }
 
@@ -628,12 +590,12 @@ void CoreHighlightSettingsPage::load()
 
         setChangedState(false);
         _initialized = true;
-    } else {
+    }
+    else {
         defaults();
     }
 }
 
-
 void CoreHighlightSettingsPage::save()
 {
     if (!hasChanged())
@@ -646,20 +608,30 @@ void CoreHighlightSettingsPage::save()
     if (ruleManager == nullptr)
         return;
 
-    auto clonedManager = HighlightRuleManager();
+    HighlightRuleManager clonedManager;
     clonedManager.fromVariantMap(ruleManager->toVariantMap());
     clonedManager.clear();
 
-    for (auto &rule : highlightList) {
-        clonedManager.addHighlightRule(rule.id(), rule.contents(), rule.isRegEx(),
-                                       rule.isCaseSensitive(), rule.isEnabled(), false,
-                                       rule.sender(), rule.chanName());
+    for (auto& rule : highlightList) {
+        clonedManager.addHighlightRule(rule.id(),
+                                       rule.contents(),
+                                       rule.isRegEx(),
+                                       rule.isCaseSensitive(),
+                                       rule.isEnabled(),
+                                       false,
+                                       rule.sender(),
+                                       rule.chanName());
     }
 
-    for (auto &rule : ignoredList) {
-        clonedManager.addHighlightRule(rule.id(), rule.contents(), rule.isRegEx(),
-                                       rule.isCaseSensitive (), rule.isEnabled(), true,
-                                       rule.sender(), rule.chanName());
+    for (auto& rule : ignoredList) {
+        clonedManager.addHighlightRule(rule.id(),
+                                       rule.contents(),
+                                       rule.isRegEx(),
+                                       rule.isCaseSensitive(),
+                                       rule.isEnabled(),
+                                       true,
+                                       rule.sender(),
+                                       rule.chanName());
     }
 
     auto highlightNickType = ui.highlightNicksComboBox->itemData(ui.highlightNicksComboBox->currentIndex()).value<int>();
@@ -672,7 +644,6 @@ void CoreHighlightSettingsPage::save()
     load();
 }
 
-
 int CoreHighlightSettingsPage::nextId()
 {
     int max = 0;
@@ -691,32 +662,27 @@ int CoreHighlightSettingsPage::nextId()
     return max + 1;
 }
 
-
 void CoreHighlightSettingsPage::widgetHasChanged()
 {
     setChangedState(true);
 }
 
-
 void CoreHighlightSettingsPage::on_coreUnsupportedDetails_clicked()
 {
-    // Re-use translations of "Local Highlights" as this is a word-for-word reference, forcing all
+    // Re-use translations of "Legacy Highlights" as this is a word-for-word reference, forcing all
     // spaces to non-breaking
-    const QString localHighlightsName = tr("Local Highlights").replace(" ", "&nbsp;");
-
-    const QString remoteHighlightsMsgText =
-            QString("<p><b>%1</b></p></br><p>%2</p></br><p>%3</p>"
-                    ).arg(tr("Your Quassel core is too old to support remote highlights"),
-                          tr("You need a Quassel core v0.13.0 or newer to configure remote "
-                             "highlights."),
-                          tr("You can still configure highlights for this device only in "
-                             "<i>%1</i>.").arg(localHighlightsName));
-
-    QMessageBox::warning(this,
-                         tr("Remote Highlights unsupported"),
-                         remoteHighlightsMsgText);
-}
+    const QString localHighlightsName = tr("Legacy Highlights").replace(" ", "&nbsp;");
 
+    const QString remoteHighlightsMsgText = QString("<p><b>%1</b></p></br><p>%2</p></br><p>%3</p>")
+                                                .arg(tr("Your Quassel core is too old to support remote highlights"),
+                                                     tr("You need a Quassel core v0.13.0 or newer to configure remote "
+                                                        "highlights."),
+                                                     tr("You can still configure highlights for this device only in "
+                                                        "<i>%1</i>.")
+                                                         .arg(localHighlightsName));
+
+    QMessageBox::warning(this, tr("Remote Highlights unsupported"), remoteHighlightsMsgText);
+}
 
 void CoreHighlightSettingsPage::importRules()
 {
@@ -726,27 +692,19 @@ void CoreHighlightSettingsPage::importRules()
 
     // 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(" ", "&nbsp;");
-    } else {
-        localHighlightsName = tr("Local Highlights").replace(" ", "&nbsp;");
-    }
+    // "Local Highlights" has been removed; it's always called "Legacy" now.
+    QString localHighlightsName = tr("Legacy Highlights").replace(" ", "&nbsp;");
 
     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));
+        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,
+                                    tr("Import all highlight rules from <i>%1</i>?").arg(localHighlightsName),
+                                    QMessageBox::Yes | QMessageBox::No,
                                     QMessageBox::No);
 
     if (ret != QMessageBox::Yes) {
@@ -759,35 +717,65 @@ void CoreHighlightSettingsPage::importRules()
         save();
     }
 
-    auto clonedManager = HighlightRuleManager();
+    HighlightRuleManager clonedManager;
     clonedManager.fromVariantMap(Client::highlightRuleManager()->toVariantMap());
 
-    for (const auto &variant : notificationSettings.highlightList()) {
+    for (const autovariant : 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()
-        );
+        clonedManager.addHighlightRule(clonedManager.nextId(),
+                                       highlightRule["Name"].toString(),
+                                       highlightRule["RegEx"].toBool(),
+                                       highlightRule["CS"].toBool(),
+                                       highlightRule["Enable"].toBool(),
+                                       false,
+                                       "",
+                                       highlightRule["Channel"].toString());
+    }
+
+    // Copy nickname highlighting settings
+    clonedManager.setNicksCaseSensitive(notificationSettings.nicksCaseSensitive());
+    if (notificationSettings.highlightNick() == NotificationSettings::HighlightNickType::AllNicks) {
+        clonedManager.setHighlightNick(HighlightRuleManager::HighlightNickType::AllNicks);
+    }
+    else if (notificationSettings.highlightNick() == NotificationSettings::HighlightNickType::CurrentNick) {
+       clonedManager.setHighlightNick(HighlightRuleManager::HighlightNickType::CurrentNick);
     }
+    // else - Don't copy "NoNick", "NoNick" is now default and should be ignored
 
     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())));
-}
+    // Give a heads-up that all succeeded, ask about removing old rules
+    //
+    // Hypothetically, someone might use a common set of highlight rules across multiple cores.
+    // This won't matter once client highlights are disabled entirely on newer cores.
+    //
+    // Remove this once client-side highlights are disabled for newer cores.
+    ret = QMessageBox::question(this, tr("Imported highlights"),
+                                QString("<p>%1</p></br><p>%2</p>").arg(
+                                    tr("%1 highlight rules successfully imported.").arg(QString::number(localHighlightList.count())),
+                                    tr("Clean up old, duplicate highlight rules?")),
+                                QMessageBox::Yes | QMessageBox::No,
+                                QMessageBox::Yes);
+
+    if (ret != QMessageBox::Yes) {
+        // Only two options, Yes or No, return if not Yes
+        return;
+    }
 
+    // Remove all local highlight rules
+    notificationSettings.setHighlightList({});
+    // Disable local nickname highlighting
+    notificationSettings.setHighlightNick(NotificationSettings::HighlightNickType::NoNick);
+    // Disable nickname sensitivity
+    // This isn't needed to disable local highlights, but it's part of appearing reset-to-default
+    notificationSettings.setNicksCaseSensitive(false);
+
+    // Refresh HighlightSettingsPage in case it was already loaded
+    emit localHighlightsChanged();
+}
 
 bool CoreHighlightSettingsPage::isSelectable() const
 {