NotificationSettings::HighlightNickType NotificationSettings::highlightNick() {
return (NotificationSettings::HighlightNickType) localValue("highlightNick", CurrentNick).toInt();
}
+
+void NotificationSettings::setNicksCaseSensitive(bool cs) {
+ setLocalValue("Highlights/NicksCaseSensitive", cs);
+}
+
+bool NotificationSettings::nicksCaseSensitive() {
+ return localValue("Highlights/NicksCaseSensitive", true).toBool();
+}
};
NotificationSettings();
-
+
inline void setValue(const QString &key, const QVariant &data) { setLocalValue(key, data); }
inline QVariant value(const QString &key, const QVariant &def = QVariant()) { return localValue(key, def); }
inline void remove(const QString &key) { removeLocalKey(key); }
-
+
void setHighlightList(const QVariantList &highlightList);
QVariantList highlightList();
void setHighlightNick(HighlightNickType);
HighlightNickType highlightNick();
+ void setNicksCaseSensitive(bool);
+ bool nicksCaseSensitive();
+
};
#endif
_msgCount(0)
{
NotificationSettings notificationSettings;
+ _nicksCaseSensitive = notificationSettings.nicksCaseSensitive();
_highlightNick = notificationSettings.highlightNick();
highlightListChanged(notificationSettings.highlightList());
+ notificationSettings.notify("Highlights/NicksCaseSensitive", this, SLOT(nicksCaseSensitiveChanged(const QVariant &)));
notificationSettings.notify("highlightList", this, SLOT(highlightListChanged(const QVariant &)));
notificationSettings.notify("highlightNick", this, SLOT(highlightNickChanged(const QVariant &)));
-
+
_processTimer.setInterval(0);
connect(&_processTimer, SIGNAL(timeout()), this, SLOT(processNextMessage()));
}
Client::messageModel()->insertMessages(msgs);
return;
-
+
if(msgs.isEmpty()) return;
_processQueue.append(msgs);
_msgCount += msgs.count();
if(!((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && !(msg.flags() & Message::Self)))
return;
- //NotificationSettings notificationSettings;
+ // TODO: Cache this (per network)
const Network *net = Client::network(msg.bufferInfo().networkId());
if(net && !net->myNick().isEmpty()) {
QStringList nickList;
nickList = myIdentity->nicks();
}
foreach(QString nickname, nickList) {
- QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(nickname) + "(\\W.*)?$");
- if(nickRegExp.exactMatch(msg.contents())) {
+ QRegExp nickRegExp("\\b" + QRegExp::escape(nickname) + "\\b",
+ _nicksCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive);
+ if(nickRegExp.indexIn(msg.contents()) >= 0) {
msg.setFlags(msg.flags() | Message::Highlight);
return;
}
}
for(int i = 0; i < _highlightRules.count(); i++) {
- const HighlightRule &rule = _highlightRules[i];
+ const HighlightRule &rule = _highlightRules.at(i);
if(!rule.isEnabled)
continue;
QRegExp userRegExp;
if(rule.isRegExp) {
- userRegExp = QRegExp(rule.name, rule.caseSensitive);
+ userRegExp = QRegExp(rule.name, rule.caseSensitive? Qt::CaseSensitive : Qt::CaseInsensitive);
} else {
- userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(rule.name) + "(\\W.*)?$", rule.caseSensitive);
+ userRegExp = QRegExp("\\b" + QRegExp::escape(rule.name) + "\\b", rule.caseSensitive? Qt::CaseSensitive : Qt::CaseInsensitive);
}
if(userRegExp.exactMatch(msg.contents())) {
msg.setFlags(msg.flags() | Message::Highlight);
}
}
+void QtUiMessageProcessor::nicksCaseSensitiveChanged(const QVariant &variant) {
+ _nicksCaseSensitive = variant.toBool();
+}
+
void QtUiMessageProcessor::highlightListChanged(const QVariant &variant) {
QVariantList varList = variant.toList();
while(iter != iterEnd) {
QVariantMap rule;
_highlightRules << HighlightRule(rule["name"].toString(),
- rule["enable"].toBool(),
- rule["cs"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive,
- rule["regex"].toBool());
+ rule["enable"].toBool(),
+ rule["cs"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive,
+ rule["regex"].toBool());
iter++;
}
}
private slots:
void processNextMessage();
+ void nicksCaseSensitiveChanged(const QVariant &variant);
void highlightListChanged(const QVariant &variant);
void highlightNickChanged(const QVariant &variant);
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) {}
+ inline HighlightRule(const QString &name, bool enabled, Qt::CaseSensitivity cs, bool regExp)
+ : name(name), isEnabled(enabled), caseSensitive(cs), isRegExp(regExp) {}
};
-
+
QList<HighlightRule> _highlightRules;
NotificationSettings::HighlightNickType _highlightNick;
+ bool _nicksCaseSensitive;
};
#endif
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);
+ 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()));
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.nicksCaseSensitive, 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 *)));
void HighlightSettingsPage::defaults() {
ui.highlightCurrentNick->setChecked(true);
+ ui.nicksCaseSensitive->setChecked(true);
emptyTable();
widgetHasChanged();
}
void HighlightSettingsPage::tableChanged(QTableWidgetItem *item) {
- if(item->row()+1 > highlightList.size())
+ if(item->row()+1 > highlightList.size())
return;
QVariantMap highlightRule = highlightList.value(item->row()).toMap();
ui.highlightAllNicks->setChecked(true);
break;
}
+ ui.nicksCaseSensitive->setChecked(notificationSettings.nicksCaseSensitive());
setChangedState(false);
}
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;
notificationSettings.setHighlightNick(highlightNickType);
+ notificationSettings.setNicksCaseSensitive(ui.nicksCaseSensitive->isChecked());
load();
setChangedState(false);
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(notificationSettings.highlightNick() != highlightNickType) return true;
+ if(notificationSettings.nicksCaseSensitive() != ui.nicksCaseSensitive->isChecked()) return true;
if(notificationSettings.highlightList() != highlightList) return true;
- return true;
+ return false;
}
-
-
-
-
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
- <string>Highlight list</string>
+ <string>Custom Highlights</string>
</property>
<layout class="QGridLayout" >
<item rowspan="3" row="0" column="0" >
<string/>
</property>
<property name="styleSheet" >
- <string/>
+ <string notr="true" />
</property>
<column>
<property name="text" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
<item>
<widget class="QGroupBox" name="groupBox_2" >
<property name="title" >
- <string>Highlight nicks</string>
+ <string>Highlight Nicks</string>
</property>
<layout class="QVBoxLayout" >
<item>
</property>
</widget>
</item>
+ <item>
+ <widget class="QCheckBox" name="nicksCaseSensitive" >
+ <property name="text" >
+ <string>Case sensitive</string>
+ </property>
+ <property name="checked" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
- <connections/>
+ <connections>
+ <connection>
+ <sender>highlightNoNick</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>nicksCaseSensitive</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>64</x>
+ <y>350</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>69</x>
+ <y>381</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
</ui>