From afdffa2f77ba0444495eaf857724345e5596eb19 Mon Sep 17 00:00:00 2001
From: Daniel Albers <daniel@lbers.com>
Date: Tue, 19 Aug 2008 17:56:33 +0200
Subject: [PATCH] Allow highlights to match identity nicknames case insensitively
 configurable via NotificationSettings

---
 src/client/clientsettings.h                      |    5 ++-
 src/qtui/qtuimessageprocessor.cpp                |    7 +++-
 src/qtui/settingspages/highlightsettingspage.cpp |   33 ++++++++++++++-------
 src/qtui/settingspages/highlightsettingspage.ui  |   23 ++++++++++++++-
 4 files changed, 52 insertions(+), 16 deletions(-)

diff --git a/src/client/clientsettings.h b/src/client/clientsettings.h
index da1fc88..bf29ec2 100644
--- a/src/client/clientsettings.h
+++ b/src/client/clientsettings.h
@@ -74,7 +74,10 @@ class NotificationSettings : public ClientSettings {
     enum HighlightNickType {
       NoNick = 0x00,
       CurrentNick= 0x01,
-      AllNicks = 0x02
+      AllNicks = 0x02,
+      CS = 0x04,
+      CurrentNickCS = 0x05,
+      AllNicksCS = 0x06
     };
 
     NotificationSettings();
diff --git a/src/qtui/qtuimessageprocessor.cpp b/src/qtui/qtuimessageprocessor.cpp
index a9209ae..0494081 100644
--- a/src/qtui/qtuimessageprocessor.cpp
+++ b/src/qtui/qtuimessageprocessor.cpp
@@ -108,15 +108,18 @@ void QtUiMessageProcessor::checkForHighlight(Message &msg) {
   const Network *net = Client::network(msg.bufferInfo().networkId());
   if(net && !net->myNick().isEmpty()) {
     QStringList nickList;
-    if(notificationSettings.highlightNick() == NotificationSettings::CurrentNick) {
+    if(notificationSettings.highlightNick() & NotificationSettings::CurrentNick) {
       nickList << net->myNick();
-    } else if(notificationSettings.highlightNick() == NotificationSettings::AllNicks) {
+    } else if(notificationSettings.highlightNick() & NotificationSettings::AllNicks) {
       const Identity *myIdentity = Client::identity(net->identity());
       if(myIdentity)
         nickList = myIdentity->nicks();
     }
     foreach(QString nickname, nickList) {
       QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(nickname) + "(\\W.*)?$");
+      (notificationSettings.highlightNick() & NotificationSettings::CS) ?
+        nickRegExp.setCaseSensitivity(Qt::CaseSensitive)
+      : nickRegExp.setCaseSensitivity(Qt::CaseInsensitive);
       if(nickRegExp.exactMatch(msg.contents())) {
         msg.setFlags(msg.flags() | Message::Highlight);
         return;
diff --git a/src/qtui/settingspages/highlightsettingspage.cpp b/src/qtui/settingspages/highlightsettingspage.cpp
index 9c290af..c7b427c 100644
--- a/src/qtui/settingspages/highlightsettingspage.cpp
+++ b/src/qtui/settingspages/highlightsettingspage.cpp
@@ -51,6 +51,9 @@ HighlightSettingsPage::HighlightSettingsPage(QWidget *parent)
   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.highlightNoNick, SIGNAL(toggled(bool)), ui.highlightCS, SLOT(setDisabled(bool)));
+  connect(ui.highlightCS, 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 *)));
@@ -62,6 +65,7 @@ bool HighlightSettingsPage::hasDefaults() const {
 
 void HighlightSettingsPage::defaults() {
   ui.highlightCurrentNick->setChecked(true);
+  ui.highlightCS->setChecked(false);
   emptyTable();
 
   widgetHasChanged();
@@ -186,7 +190,14 @@ void HighlightSettingsPage::load() {
     addNewRow(name, regex, cs, enable);
   }
 
-  switch(notificationSettings.highlightNick())
+  NotificationSettings::HighlightNickType highlightNick = notificationSettings.highlightNick();
+
+  if (highlightNick & 0x04) {
+    ui.highlightCS->setChecked(true);
+    highlightNick = NotificationSettings::HighlightNickType(highlightNick - 0x04);
+  }
+
+  switch(highlightNick)
   {
     case NotificationSettings::NoNick:
       ui.highlightNoNick->setChecked(true);
@@ -207,12 +218,14 @@ void HighlightSettingsPage::save() {
   notificationSettings.setHighlightList(highlightList);
 
   NotificationSettings::HighlightNickType highlightNickType;
-  if(ui.highlightNoNick->isChecked()) 
+  if(ui.highlightNoNick->isChecked())
     highlightNickType = NotificationSettings::NoNick;
-  if(ui.highlightCurrentNick->isChecked()) 
+  if(ui.highlightCurrentNick->isChecked())
     highlightNickType = NotificationSettings::CurrentNick;
-  if(ui.highlightAllNicks->isChecked()) 
+  if(ui.highlightAllNicks->isChecked())
     highlightNickType = NotificationSettings::AllNicks;
+  if(ui.highlightCS->isChecked())
+    highlightNickType = NotificationSettings::HighlightNickType(highlightNickType | NotificationSettings::CS);
 
   notificationSettings.setHighlightNick(highlightNickType);
 
@@ -229,12 +242,14 @@ bool HighlightSettingsPage::testHasChanged() {
   NotificationSettings notificationSettings;
 
   NotificationSettings::HighlightNickType highlightNickType;
-  if(ui.highlightNoNick->isChecked()) 
+  if(ui.highlightNoNick->isChecked())
     highlightNickType = NotificationSettings::NoNick;
-  if(ui.highlightCurrentNick->isChecked()) 
+  if(ui.highlightCurrentNick->isChecked())
     highlightNickType = NotificationSettings::CurrentNick;
-  if(ui.highlightAllNicks->isChecked()) 
+  if(ui.highlightAllNicks->isChecked())
     highlightNickType = NotificationSettings::AllNicks;
+  if(ui.highlightCS->isChecked())
+    highlightNickType = NotificationSettings::HighlightNickType(highlightNickType | NotificationSettings::CS);
 
   if(notificationSettings.highlightNick() != highlightNickType) return true;
 
@@ -242,7 +257,3 @@ bool HighlightSettingsPage::testHasChanged() {
 
   return true;
 }
-
-
-
-
diff --git a/src/qtui/settingspages/highlightsettingspage.ui b/src/qtui/settingspages/highlightsettingspage.ui
index ea21020..8390dbe 100644
--- a/src/qtui/settingspages/highlightsettingspage.ui
+++ b/src/qtui/settingspages/highlightsettingspage.ui
@@ -25,7 +25,7 @@
          <string/>
         </property>
         <property name="styleSheet" >
-         <string/>
+         <string notr="true" />
         </property>
         <column>
          <property name="text" >
@@ -68,7 +68,7 @@
         <property name="orientation" >
          <enum>Qt::Vertical</enum>
         </property>
-        <property name="sizeHint" >
+        <property name="sizeHint" stdset="0" >
          <size>
           <width>20</width>
           <height>40</height>
@@ -107,6 +107,25 @@
         <property name="text" >
          <string>None</string>
         </property>
+        <property name="checkable" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="highlightCS" >
+        <property name="enabled" >
+         <bool>true</bool>
+        </property>
+        <property name="text" >
+         <string>Case Sensitive</string>
+        </property>
+        <property name="checkable" >
+         <bool>true</bool>
+        </property>
+        <property name="checked" >
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
      </layout>
-- 
1.5.4.3

