highlights can now be checked case insensitive
authorAlexander von Renteln <phon@quassel-irc.org>
Thu, 3 Apr 2008 16:26:18 +0000 (16:26 +0000)
committerAlexander von Renteln <phon@quassel-irc.org>
Thu, 3 Apr 2008 16:26:18 +0000 (16:26 +0000)
nick highlights can now be selected between current nick and all nicks in the identity

src/client/client.cpp
src/client/clientsettings.cpp
src/client/clientsettings.h
src/qtui/settingspages/highlightsettingspage.cpp
src/qtui/settingspages/highlightsettingspage.h
src/qtui/settingspages/highlightsettingspage.ui
version.inc

index 69ffbfc..8c7a043 100644 (file)
@@ -546,25 +546,33 @@ void Client::checkForHighlight(Message &msg) {
   NotificationSettings notificationSettings;
   const Network *net = network(msg.bufferInfo().networkId());
   if(net && !net->myNick().isEmpty()) {
-    if(notificationSettings.highlightCurrentNick()) {
-      QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$");
+    QStringList nickList;
+    if(notificationSettings.highlightNick() == NotificationSettings::CurrentNick) {
+      nickList << net->myNick();
+    } else if(notificationSettings.highlightNick() == NotificationSettings::AllNicks) {
+      nickList = identity(net->identity())->nicks();
+    }
+    foreach(QString nickname, nickList) {
+      QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(nickname) + "(\\W.*)?$");
       if((msg.type() & (Message::Plain | Message::Notice | Message::Action))
           && !(msg.flags() & Message::Self)
           && nickRegExp.exactMatch(msg.text())) {
-            msg.setFlags(msg.flags() | Message::Highlight);
-            return;
+        msg.setFlags(msg.flags() | Message::Highlight);
+        return;
       }
     }
+
     foreach(QVariant highlight, notificationSettings.highlightList()) {
       QVariantMap highlightRule = highlight.toMap();
       if(!highlightRule["enable"].toBool())
         continue;
+      Qt::CaseSensitivity caseSensitivity = highlightRule["cs"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive;
       QString name = highlightRule["name"].toString();
       QRegExp userRegExp;
       if(highlightRule["regex"].toBool()) {
-        userRegExp = QRegExp(name);
+        userRegExp = QRegExp(name, caseSensitivity);
       } else {
-        userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(name) + "(\\W.*)?$");
+        userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(name) + "(\\W.*)?$", caseSensitivity);
       }
       if((msg.type() & (Message::Plain | Message::Notice | Message::Action))
           && !(msg.flags() & Message::Self)
index 1c3c5cf..64274a3 100644 (file)
@@ -118,10 +118,10 @@ QVariantList NotificationSettings::highlightList() {
   return localValue("highlightList").toList();
 }
 
-void NotificationSettings::setHighlightCurrentNick(const bool &highlightCurrentNick) {
-  setLocalValue("highlightCurrentNick", highlightCurrentNick);
+void NotificationSettings::setHighlightNick(NotificationSettings::HighlightNickType highlightNickType) {
+  setLocalValue("highlightNick", highlightNickType);
 }
 
-bool NotificationSettings::highlightCurrentNick() {
-  return localValue("highlightCurrentNick", true).toBool();
+NotificationSettings::HighlightNickType NotificationSettings::highlightNick() {
+  return (NotificationSettings::HighlightNickType) localValue("highlightNick", CurrentNick).toInt();
 }
index ee0b0d2..da1fc88 100644 (file)
@@ -71,13 +71,19 @@ class CoreAccountSettings : public ClientSettings {
 class NotificationSettings : public ClientSettings {
 
   public:
+    enum HighlightNickType {
+      NoNick = 0x00,
+      CurrentNick= 0x01,
+      AllNicks = 0x02
+    };
+
     NotificationSettings();
 
     void setHighlightList(const QVariantList &highlightList);
     QVariantList highlightList();
 
-    void setHighlightCurrentNick(const bool &highlightCurrentNick);
-    bool highlightCurrentNick();
+    void setHighlightNick(HighlightNickType);
+    HighlightNickType highlightNick();
 
 };
 #endif
index 09887ba..9c290af 100644 (file)
@@ -31,18 +31,26 @@ HighlightSettingsPage::HighlightSettingsPage(QWidget *parent)
   ui.setupUi(this);
   ui.highlightTable->verticalHeader()->hide();
   ui.highlightTable->setShowGrid(false);
-  ui.highlightTable->setColumnWidth( 0, 50 );
-  ui.highlightTable->setColumnWidth( 2, 50 );
-  ui.highlightTable->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed); 
-  ui.highlightTable->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);
-  ui.highlightTable->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed); 
+
+  ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setToolTip("<b>RegEx</b>: This option determines if the highlight rule should be interpreted as a <b>regular expression</b> or just as a keyword.");
+  ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setWhatsThis("<b>RegEx</b>: This option determines if the highlight rule should be interpreted as a <b>regular expression</b> or just as a keyword.");
+
+  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->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); 
 
   connect(ui.add, SIGNAL(clicked(bool)), this, SLOT(addNewRow()));
   connect(ui.remove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedRows()));
   //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(selectRow(QTableWidgetItem *)));
 
+  connect(ui.highlightAllNicks, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged()));
   connect(ui.highlightCurrentNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged()));
+  connect(ui.highlightNoNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged()));
   connect(ui.add, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
   connect(ui.remove, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
   connect(ui.highlightTable, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(tableChanged(QTableWidgetItem *)));
@@ -59,15 +67,25 @@ void HighlightSettingsPage::defaults() {
   widgetHasChanged();
 }
 
-void HighlightSettingsPage::addNewRow(bool regex, QString name, bool enable) {
+void HighlightSettingsPage::addNewRow(QString name, bool regex, bool cs, bool enable) {
   ui.highlightTable->setRowCount(ui.highlightTable->rowCount()+1);
+
+  QTableWidgetItem *nameItem = new QTableWidgetItem(name);
+
   QTableWidgetItem *regexItem = new QTableWidgetItem("");
   if(regex)
     regexItem->setCheckState(Qt::Checked);
   else
     regexItem->setCheckState(Qt::Unchecked);
   regexItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
-  QTableWidgetItem *nameItem = new QTableWidgetItem(name);
+
+  QTableWidgetItem *csItem = new QTableWidgetItem("");
+  if(cs)
+    csItem->setCheckState(Qt::Checked);
+  else
+    csItem->setCheckState(Qt::Unchecked);
+  csItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
+
   QTableWidgetItem *enableItem = new QTableWidgetItem("");
   if(enable)
     enableItem->setCheckState(Qt::Checked);
@@ -76,13 +94,15 @@ void HighlightSettingsPage::addNewRow(bool regex, QString name, bool enable) {
   enableItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
 
   int lastRow = ui.highlightTable->rowCount()-1;
-  ui.highlightTable->setItem(lastRow, 0, regexItem);
-  ui.highlightTable->setItem(lastRow, 1, nameItem);
-  ui.highlightTable->setItem(lastRow, 2, enableItem);
+  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);
 
   QVariantMap highlightRule;
-  highlightRule["regex"] = regex;
   highlightRule["name"] = name;
+  highlightRule["regex"] = regex;
+  highlightRule["cs"] = cs;
   highlightRule["enable"] = enable;
 
   highlightList.append(highlightRule);
@@ -108,7 +128,7 @@ void HighlightSettingsPage::removeSelectedRows() {
 void HighlightSettingsPage::selectRow(QTableWidgetItem *item) {
   int row = item->row();
   bool selected = item->isSelected();
-  ui.highlightTable->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, 2), selected);
+  ui.highlightTable->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, HighlightSettingsPage::ColumnCount-1), selected);
 }
 
 void HighlightSettingsPage::emptyTable() {
@@ -132,15 +152,18 @@ void HighlightSettingsPage::tableChanged(QTableWidgetItem *item) {
 
   switch(item->column())
   {
-    case 0:
-      highlightRule["regex"] = (item->checkState() == Qt::Checked);
-      break;
-    case 1:
-      if(item->text() == "") 
+    case HighlightSettingsPage::NameColumn:
+      if(item->text() == "")
         item->setText(tr("this shouldn't be empty"));
       highlightRule["name"] = item->text();
       break;
-    case 2:
+    case HighlightSettingsPage::RegExColumn:
+      highlightRule["regex"] = (item->checkState() == Qt::Checked);
+      break;
+    case HighlightSettingsPage::CsColumn:
+      highlightRule["cs"] = (item->checkState() == Qt::Checked);
+      break;
+    case HighlightSettingsPage::EnableColumn:
       highlightRule["enable"] = (item->checkState() == Qt::Checked);
       break;
   }
@@ -155,14 +178,26 @@ void HighlightSettingsPage::load() {
 
   foreach(QVariant highlight, notificationSettings.highlightList()) {
     QVariantMap highlightRule = highlight.toMap();
-    bool regex = highlightRule["regex"].toBool();
     QString name = highlightRule["name"].toString();
+    bool regex = highlightRule["regex"].toBool();
+    bool cs = highlightRule["cs"].toBool();
     bool enable = highlightRule["enable"].toBool();
 
-    addNewRow(regex, name, enable);
+    addNewRow(name, regex, cs, enable);
   }
 
-  ui.highlightCurrentNick->setChecked(notificationSettings.highlightCurrentNick());
+  switch(notificationSettings.highlightNick())
+  {
+    case NotificationSettings::NoNick:
+      ui.highlightNoNick->setChecked(true);
+      break;
+    case NotificationSettings::CurrentNick:
+      ui.highlightCurrentNick->setChecked(true);
+      break;
+    case NotificationSettings::AllNicks:
+      ui.highlightAllNicks->setChecked(true);
+      break;
+  }
 
   setChangedState(false);
 }
@@ -170,7 +205,16 @@ void HighlightSettingsPage::load() {
 void HighlightSettingsPage::save() {
   NotificationSettings notificationSettings;
   notificationSettings.setHighlightList(highlightList);
-  notificationSettings.setHighlightCurrentNick(ui.highlightCurrentNick->isChecked());
+
+  NotificationSettings::HighlightNickType highlightNickType;
+  if(ui.highlightNoNick->isChecked()) 
+    highlightNickType = NotificationSettings::NoNick;
+  if(ui.highlightCurrentNick->isChecked()) 
+    highlightNickType = NotificationSettings::CurrentNick;
+  if(ui.highlightAllNicks->isChecked()) 
+    highlightNickType = NotificationSettings::AllNicks;
+
+  notificationSettings.setHighlightNick(highlightNickType);
 
   load();
   setChangedState(false);
@@ -184,7 +228,16 @@ void HighlightSettingsPage::widgetHasChanged() {
 bool HighlightSettingsPage::testHasChanged() {
   NotificationSettings notificationSettings;
 
-  if(notificationSettings.highlightCurrentNick() != ui.highlightCurrentNick->isChecked()) return true;
+  NotificationSettings::HighlightNickType highlightNickType;
+  if(ui.highlightNoNick->isChecked()) 
+    highlightNickType = NotificationSettings::NoNick;
+  if(ui.highlightCurrentNick->isChecked()) 
+    highlightNickType = NotificationSettings::CurrentNick;
+  if(ui.highlightAllNicks->isChecked()) 
+    highlightNickType = NotificationSettings::AllNicks;
+
+  if(notificationSettings.highlightNick() != highlightNickType) return true;
+
   if(notificationSettings.highlightList() != highlightList) return true;
 
   return true;
index 04dfd11..cc8bdbc 100644 (file)
@@ -42,7 +42,7 @@ class HighlightSettingsPage : public SettingsPage {
 
   private slots:
     void widgetHasChanged();
-    void addNewRow(bool regex = false, QString name = tr("highlight rule"), bool enable = true);
+    void addNewRow(QString name = tr("highlight rule"), bool regex = false, bool cs = true, bool enable = true);
     void removeSelectedRows();
     void selectRow(QTableWidgetItem *item);
     void tableChanged(QTableWidgetItem *item);
@@ -54,6 +54,13 @@ class HighlightSettingsPage : public SettingsPage {
     //    regex:  bool
     //    name:   QString
     //    enable: bool
+    enum column {
+      NameColumn = 0,
+      RegExColumn = 1,
+      CsColumn = 2,
+      EnableColumn = 3,
+      ColumnCount = 4
+    };
 
     void emptyTable();
 
index 3d83985..ea21020 100644 (file)
      <layout class="QGridLayout" >
       <item rowspan="3" row="0" column="0" >
        <widget class="QTableWidget" name="highlightTable" >
+        <property name="toolTip" >
+         <string/>
+        </property>
         <property name="styleSheet" >
          <string/>
         </property>
         <column>
          <property name="text" >
-          <string>RexEx</string>
+          <string>Highlight</string>
          </property>
         </column>
         <column>
          <property name="text" >
-          <string>Highlight</string>
+          <string>RegEx</string>
+         </property>
+        </column>
+        <column>
+         <property name="text" >
+          <string>CS</string>
          </property>
         </column>
         <column>
     </widget>
    </item>
    <item>
-    <widget class="QCheckBox" name="highlightCurrentNick" >
-     <property name="text" >
-      <string>Highlight current nick</string>
-     </property>
-     <property name="checked" >
-      <bool>true</bool>
+    <widget class="QGroupBox" name="groupBox_2" >
+     <property name="title" >
+      <string>Highlight nicks</string>
      </property>
+     <layout class="QVBoxLayout" >
+      <item>
+       <widget class="QRadioButton" name="highlightAllNicks" >
+        <property name="text" >
+         <string>All nicks from identity</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="highlightCurrentNick" >
+        <property name="text" >
+         <string>Current nick</string>
+        </property>
+        <property name="checked" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="highlightNoNick" >
+        <property name="text" >
+         <string>None</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
   </layout>
index b005cf8..3362819 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-alpha5-pre";
   quasselDate = "2008-04-03";
-  quasselBuild = 696;
+  quasselBuild = 697;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 642;