From: Alexander von Renteln Date: Thu, 3 Apr 2008 16:26:18 +0000 (+0000) Subject: highlights can now be checked case insensitive X-Git-Tag: 0.2.0-alpha5~21 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=9ced25191b84390d1867cf3ee19f5aec741795a8 highlights can now be checked case insensitive nick highlights can now be selected between current nick and all nicks in the identity --- diff --git a/src/client/client.cpp b/src/client/client.cpp index 69ffbfc7..8c7a0430 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -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) diff --git a/src/client/clientsettings.cpp b/src/client/clientsettings.cpp index 1c3c5cf1..64274a37 100644 --- a/src/client/clientsettings.cpp +++ b/src/client/clientsettings.cpp @@ -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(); } diff --git a/src/client/clientsettings.h b/src/client/clientsettings.h index ee0b0d2d..da1fc880 100644 --- a/src/client/clientsettings.h +++ b/src/client/clientsettings.h @@ -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 diff --git a/src/qtui/settingspages/highlightsettingspage.cpp b/src/qtui/settingspages/highlightsettingspage.cpp index 09887ba7..9c290af4 100644 --- a/src/qtui/settingspages/highlightsettingspage.cpp +++ b/src/qtui/settingspages/highlightsettingspage.cpp @@ -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("RegEx: This option determines if the highlight rule should be interpreted as a regular expression or just as a keyword."); + ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setWhatsThis("RegEx: This option determines if the highlight rule should be interpreted as a regular expression or just as a keyword."); + + ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setToolTip("CS: This option determines if the highlight rule should be interpreted case sensitive."); + ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setWhatsThis("CS: This option determines if the highlight rule should be interpreted case sensitive."); + + 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; diff --git a/src/qtui/settingspages/highlightsettingspage.h b/src/qtui/settingspages/highlightsettingspage.h index 04dfd117..cc8bdbc7 100644 --- a/src/qtui/settingspages/highlightsettingspage.h +++ b/src/qtui/settingspages/highlightsettingspage.h @@ -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(); diff --git a/src/qtui/settingspages/highlightsettingspage.ui b/src/qtui/settingspages/highlightsettingspage.ui index 3d83985d..ea210206 100644 --- a/src/qtui/settingspages/highlightsettingspage.ui +++ b/src/qtui/settingspages/highlightsettingspage.ui @@ -21,17 +21,25 @@ + + + - RexEx + Highlight - Highlight + RegEx + + + + + CS @@ -72,13 +80,36 @@ - - - Highlight current nick - - - true + + + Highlight nicks + + + + + All nicks from identity + + + + + + + Current nick + + + true + + + + + + + None + + + + diff --git a/version.inc b/version.inc index b005cf83..33628192 100644 --- a/version.inc +++ b/version.inc @@ -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;