From 1f66ad13ed96b2ad22d017f7f43eee4ea88ee37a Mon Sep 17 00:00:00 2001 From: salnx Date: Mon, 8 Jun 2009 16:07:55 +0400 Subject: [PATCH 1/4] Initial Channel specific highlights feature implementation --- src/qtui/qtuimessageprocessor.cpp | 15 ++++++++++++++- src/qtui/qtuimessageprocessor.h | 5 +++-- src/qtui/settingspages/highlightsettingspage.cpp | 18 ++++++++++++++++-- src/qtui/settingspages/highlightsettingspage.h | 5 +++-- src/qtui/settingspages/highlightsettingspage.ui | 5 +++++ 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/qtui/qtuimessageprocessor.cpp b/src/qtui/qtuimessageprocessor.cpp index 353928a..8c924b0 100644 --- a/src/qtui/qtuimessageprocessor.cpp +++ b/src/qtui/qtuimessageprocessor.cpp @@ -132,6 +132,18 @@ void QtUiMessageProcessor::checkForHighlight(Message &msg) { if(!rule.isEnabled) 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; + } + } + bool match = false; if(rule.isRegExp) { QRegExp rx(rule.name, rule.caseSensitive? Qt::CaseSensitive : Qt::CaseInsensitive); @@ -162,7 +174,8 @@ void QtUiMessageProcessor::highlightListChanged(const QVariant &variant) { _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++; } } diff --git a/src/qtui/qtuimessageprocessor.h b/src/qtui/qtuimessageprocessor.h index 40eb860..3073c7b 100644 --- a/src/qtui/qtuimessageprocessor.h +++ b/src/qtui/qtuimessageprocessor.h @@ -67,8 +67,9 @@ private: 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 _highlightRules; diff --git a/src/qtui/settingspages/highlightsettingspage.cpp b/src/qtui/settingspages/highlightsettingspage.cpp index c247925..3bd2e56 100644 --- a/src/qtui/settingspages/highlightsettingspage.cpp +++ b/src/qtui/settingspages/highlightsettingspage.cpp @@ -38,10 +38,14 @@ HighlightSettingsPage::HighlightSettingsPage(QWidget *parent) 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->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setToolTip("Chan: This regular expression determines for which Channels the highlight rule works. Leave blank to match any channel. Put ! in the beginning to negate. Case insensitive."); + ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setWhatsThis("Chan: This regular expression determines for which Channels the highlight rule works. Leave blank to match any channel. Put ! 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::ChanColumn, QHeaderView::ResizeToContents); 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(); } -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); @@ -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); + 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); + ui.highlightTable->setItem(lastRow, HighlightSettingsPage::ChanColumn, chanNameItem); QVariantMap highlightRule; highlightRule["Name"] = name; highlightRule["RegEx"] = regex; highlightRule["CS"] = cs; highlightRule["Enable"] = enable; + highlightRule["Chan"] = chanName; highlightList.append(highlightRule); } @@ -168,6 +176,11 @@ void HighlightSettingsPage::tableChanged(QTableWidgetItem *item) { 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(); @@ -184,8 +197,9 @@ void HighlightSettingsPage::load() { 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()) diff --git a/src/qtui/settingspages/highlightsettingspage.h b/src/qtui/settingspages/highlightsettingspage.h index 8fdb708..60996f1 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(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); @@ -59,7 +59,8 @@ class HighlightSettingsPage : public SettingsPage { RegExColumn = 1, CsColumn = 2, EnableColumn = 3, - ColumnCount = 4 + ChanColumn = 4, + ColumnCount = 5 }; void emptyTable(); diff --git a/src/qtui/settingspages/highlightsettingspage.ui b/src/qtui/settingspages/highlightsettingspage.ui index 1929460..e2b8a70 100644 --- a/src/qtui/settingspages/highlightsettingspage.ui +++ b/src/qtui/settingspages/highlightsettingspage.ui @@ -47,6 +47,11 @@ Enable + + + Chan + + -- 1.6.2.3