Initial Channel specific highlights feature implementation
authorsalnx <linuxstalker@gmail.com>
Mon, 8 Jun 2009 12:07:55 +0000 (16:07 +0400)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 22 May 2012 18:50:18 +0000 (20:50 +0200)
Signed-off-by: Bas Pape <baspape@gmail.com>
src/qtui/qtuimessageprocessor.cpp
src/qtui/qtuimessageprocessor.h
src/qtui/settingspages/highlightsettingspage.cpp
src/qtui/settingspages/highlightsettingspage.h
src/qtui/settingspages/highlightsettingspage.ui

index a80dcd2..aa24f08 100644 (file)
@@ -129,7 +129,19 @@ void QtUiMessageProcessor::checkForHighlight(Message &msg) {
     for(int i = 0; i < _highlightRules.count(); i++) {
       const HighlightRule &rule = _highlightRules.at(i);
       if(!rule.isEnabled)
     for(int i = 0; i < _highlightRules.count(); i++) {
       const HighlightRule &rule = _highlightRules.at(i);
       if(!rule.isEnabled)
-       continue;
+        continue;
+
+      if(rule.chanName.size() > 0 && rule.chanName.compare(".*") != 0) {
+        if(rule.chanName.startsWith("!")) {
+          QRegExp rx(rule.chanName.mid(1), Qt::CaseInsensitive);
+          if(rx.exactMatch(msg.bufferInfo().bufferName()))
+            continue;
+        } else {
+          QRegExp rx(rule.chanName, Qt::CaseInsensitive);
+          if(!rx.exactMatch(msg.bufferInfo().bufferName()))
+            continue;
+        }
+      }
 
       QRegExp rx;
       if(rule.isRegExp) {
 
       QRegExp rx;
       if(rule.isRegExp) {
@@ -160,7 +172,8 @@ void QtUiMessageProcessor::highlightListChanged(const QVariant &variant) {
     _highlightRules << HighlightRule(rule["Name"].toString(),
                                      rule["Enable"].toBool(),
                                      rule["CS"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive,
     _highlightRules << HighlightRule(rule["Name"].toString(),
                                      rule["Enable"].toBool(),
                                      rule["CS"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive,
-                                     rule["RegEx"].toBool());
+                                     rule["RegEx"].toBool(),
+                                     rule["Chan"].toString());
     iter++;
   }
 }
     iter++;
   }
 }
index 40eb860..3073c7b 100644 (file)
@@ -67,8 +67,9 @@ private:
     bool isEnabled;
     Qt::CaseSensitivity caseSensitive;
     bool isRegExp;
     bool isEnabled;
     Qt::CaseSensitivity caseSensitive;
     bool isRegExp;
-    inline HighlightRule(const QString &name, bool enabled, Qt::CaseSensitivity cs, bool regExp)
-    : name(name), isEnabled(enabled), caseSensitive(cs), isRegExp(regExp) {}
+    QString chanName;
+    inline HighlightRule(const QString &name, bool enabled, Qt::CaseSensitivity cs, bool regExp, const QString &chanName)
+    : name(name), isEnabled(enabled), caseSensitive(cs), isRegExp(regExp), chanName(chanName) {}
   };
 
   QList<HighlightRule> _highlightRules;
   };
 
   QList<HighlightRule> _highlightRules;
index c122a82..4d169f2 100644 (file)
@@ -38,10 +38,14 @@ HighlightSettingsPage::HighlightSettingsPage(QWidget *parent)
   ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setToolTip("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>.");
   ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setWhatsThis("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>.");
 
   ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setToolTip("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>.");
   ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setWhatsThis("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>.");
 
+  ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setToolTip("<b>Chan</b>: This regular expression determines for which <b>Channels</b> the highlight rule works. Leave blank to match any channel. Put <b>!</b> in the beginning to negate. Case insensitive.");
+  ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setWhatsThis("<b>Chan</b>: This regular expression determines for which <b>Channels</b> the highlight rule works. Leave blank to match any channel. Put <b>!</b> in the beginning to negate. Case insensitive.");
+
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents);
   ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents);
+  ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents);
 
   connect(ui.add, SIGNAL(clicked(bool)), this, SLOT(addNewRow()));
   connect(ui.remove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedRows()));
 
   connect(ui.add, SIGNAL(clicked(bool)), this, SLOT(addNewRow()));
   connect(ui.remove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedRows()));
@@ -69,7 +73,7 @@ void HighlightSettingsPage::defaults() {
   widgetHasChanged();
 }
 
   widgetHasChanged();
 }
 
-void HighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool enable) {
+void HighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool enable, QString chanName) {
   ui.highlightTable->setRowCount(ui.highlightTable->rowCount()+1);
 
   QTableWidgetItem *nameItem = new QTableWidgetItem(name);
   ui.highlightTable->setRowCount(ui.highlightTable->rowCount()+1);
 
   QTableWidgetItem *nameItem = new QTableWidgetItem(name);
@@ -95,17 +99,21 @@ void HighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool en
     enableItem->setCheckState(Qt::Unchecked);
   enableItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
 
     enableItem->setCheckState(Qt::Unchecked);
   enableItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
 
+  QTableWidgetItem *chanNameItem = new QTableWidgetItem(chanName);
+
   int lastRow = ui.highlightTable->rowCount()-1;
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::NameColumn, nameItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::RegExColumn, regexItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::CsColumn, csItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::EnableColumn, enableItem);
   int lastRow = ui.highlightTable->rowCount()-1;
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::NameColumn, nameItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::RegExColumn, regexItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::CsColumn, csItem);
   ui.highlightTable->setItem(lastRow, HighlightSettingsPage::EnableColumn, enableItem);
+  ui.highlightTable->setItem(lastRow, HighlightSettingsPage::ChanColumn, chanNameItem);
 
   QVariantMap highlightRule;
   highlightRule["Name"] = name;
   highlightRule["RegEx"] = regex;
   highlightRule["CS"] = cs;
   highlightRule["Enable"] = enable;
 
   QVariantMap highlightRule;
   highlightRule["Name"] = name;
   highlightRule["RegEx"] = regex;
   highlightRule["CS"] = cs;
   highlightRule["Enable"] = enable;
+  highlightRule["Chan"] = chanName;
 
   highlightList.append(highlightRule);
 }
 
   highlightList.append(highlightRule);
 }
@@ -168,6 +176,11 @@ void HighlightSettingsPage::tableChanged(QTableWidgetItem *item) {
     case HighlightSettingsPage::EnableColumn:
       highlightRule["Enable"] = (item->checkState() == Qt::Checked);
       break;
     case HighlightSettingsPage::EnableColumn:
       highlightRule["Enable"] = (item->checkState() == Qt::Checked);
       break;
+    case HighlightSettingsPage::ChanColumn:
+      if(item->text().size() > 0 && item->text().trimmed().size() == 0)
+        item->setText("");
+      highlightRule["Chan"] = item->text();
+      break;
   }
   highlightList[item->row()] = highlightRule;
   emit widgetHasChanged();
   }
   highlightList[item->row()] = highlightRule;
   emit widgetHasChanged();
@@ -184,8 +197,9 @@ void HighlightSettingsPage::load() {
     bool regex = highlightRule["RegEx"].toBool();
     bool cs = highlightRule["CS"].toBool();
     bool enable = highlightRule["Enable"].toBool();
     bool regex = highlightRule["RegEx"].toBool();
     bool cs = highlightRule["CS"].toBool();
     bool enable = highlightRule["Enable"].toBool();
+    QString chanName = highlightRule["Chan"].toString();
 
 
-    addNewRow(name, regex, cs, enable);
+    addNewRow(name, regex, cs, enable, chanName);
   }
 
   switch(notificationSettings.highlightNick())
   }
 
   switch(notificationSettings.highlightNick())
index 8fdb708..60996f1 100644 (file)
@@ -42,7 +42,7 @@ class HighlightSettingsPage : public SettingsPage {
 
   private slots:
     void widgetHasChanged();
 
   private slots:
     void widgetHasChanged();
-    void addNewRow(QString name = tr("highlight rule"), bool regex = false, bool cs = true, bool enable = true);
+    void addNewRow(QString name = tr("highlight rule"), bool regex = false, bool cs = true, bool enable = true, QString chanName = "");
     void removeSelectedRows();
     void selectRow(QTableWidgetItem *item);
     void tableChanged(QTableWidgetItem *item);
     void removeSelectedRows();
     void selectRow(QTableWidgetItem *item);
     void tableChanged(QTableWidgetItem *item);
@@ -59,7 +59,8 @@ class HighlightSettingsPage : public SettingsPage {
       RegExColumn = 1,
       CsColumn = 2,
       EnableColumn = 3,
       RegExColumn = 1,
       CsColumn = 2,
       EnableColumn = 3,
-      ColumnCount = 4
+      ChanColumn = 4,
+      ColumnCount = 5
     };
 
     void emptyTable();
     };
 
     void emptyTable();
index 1929460..e2b8a70 100644 (file)
           <string>Enable</string>
          </property>
         </column>
           <string>Enable</string>
          </property>
         </column>
+        <column>
+         <property name="text" >
+          <string>Chan</string>
+         </property>
+        </column>
        </widget>
       </item>
       <item row="0" column="1" >
        </widget>
       </item>
       <item row="0" column="1" >