Implement inverse highlight rules
[quassel.git] / src / qtui / settingspages / corehighlightsettingspage.cpp
index bad2400..467991f 100644 (file)
@@ -53,6 +53,7 @@ CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent)
     ui.highlightTable->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents);
     ui.highlightTable->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents);
     ui.highlightTable->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents);
+    ui.highlightTable->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::InverseColumn, QHeaderView::ResizeToContents);
     ui.highlightTable->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents);
 #endif
 
@@ -106,7 +107,7 @@ void CoreHighlightSettingsPage::defaults()
 }
 
 
-void CoreHighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool enable, QString chanName, bool self)
+void CoreHighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool enable, bool inverse, QString chanName, bool self)
 {
     ui.highlightTable->setRowCount(ui.highlightTable->rowCount()+1);
 
@@ -133,6 +134,13 @@ void CoreHighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, boo
         enableItem->setCheckState(Qt::Unchecked);
     enableItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
 
+    auto *inverseItem = new QTableWidgetItem("");
+    if (inverse)
+        inverseItem->setCheckState(Qt::Checked);
+    else
+        inverseItem->setCheckState(Qt::Unchecked);
+    inverseItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
+
     auto *chanNameItem = new QTableWidgetItem(chanName);
 
     int lastRow = ui.highlightTable->rowCount()-1;
@@ -140,12 +148,13 @@ void CoreHighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, boo
     ui.highlightTable->setItem(lastRow, CoreHighlightSettingsPage::RegExColumn, regexItem);
     ui.highlightTable->setItem(lastRow, CoreHighlightSettingsPage::CsColumn, csItem);
     ui.highlightTable->setItem(lastRow, CoreHighlightSettingsPage::EnableColumn, enableItem);
+    ui.highlightTable->setItem(lastRow, CoreHighlightSettingsPage::InverseColumn, inverseItem);
     ui.highlightTable->setItem(lastRow, CoreHighlightSettingsPage::ChanColumn, chanNameItem);
 
     if (!self)
         ui.highlightTable->setCurrentItem(nameItem);
 
-    highlightList << HighlightRuleManager::HighlightRule(name, regex, cs, enable, chanName);
+    highlightList << HighlightRuleManager::HighlightRule(name, regex, cs, enable, inverse, chanName);
 }
 
 
@@ -215,6 +224,9 @@ void CoreHighlightSettingsPage::tableChanged(QTableWidgetItem *item)
     case CoreHighlightSettingsPage::EnableColumn:
         highlightRule.isEnabled = (item->checkState() == Qt::Checked);
         break;
+    case CoreHighlightSettingsPage::InverseColumn:
+        highlightRule.isInverse = (item->checkState() == Qt::Checked);
+        break;
     case CoreHighlightSettingsPage::ChanColumn:
         if (!item->text().isEmpty() && item->text().trimmed().isEmpty())
             item->setText("");
@@ -232,7 +244,7 @@ void CoreHighlightSettingsPage::load()
 
     auto ruleManager = Client::highlightRuleManager();
     for (HighlightRuleManager::HighlightRule rule : ruleManager->highlightRuleList()) {
-        addNewRow(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, rule.chanName);
+        addNewRow(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, rule.isInverse, rule.chanName);
     }
 
     switch (ruleManager->highlightNick())
@@ -270,7 +282,7 @@ void CoreHighlightSettingsPage::save()
     clonedManager.clear();
 
     for (const HighlightRuleManager::HighlightRule &rule : highlightList) {
-        clonedManager.addHighlightRule(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isRegEx, rule.chanName);
+        clonedManager.addHighlightRule(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, rule.isInverse, rule.chanName);
     }
 
     HighlightRuleManager::HighlightNickType highlightNickType = HighlightRuleManager::NoNick;