X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagefilter.cpp;h=3ef02ee5ea771874ae66f177b66a2f24b8c9513b;hp=e375b2e7a192d4b78235a370666b21555e9bb14b;hb=a3aaabf6254c8c5439af8982cc613c4ced3f50ed;hpb=e528271e366acaa788b420bdfab8e1dd03b43e12 diff --git a/src/client/messagefilter.cpp b/src/client/messagefilter.cpp index e375b2e7..3ef02ee5 100644 --- a/src/client/messagefilter.cpp +++ b/src/client/messagefilter.cpp @@ -19,33 +19,77 @@ ***************************************************************************/ #include "messagefilter.h" +#include "buffersettings.h" -MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent) : QSortFilterProxyModel(parent) { +MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent) + : QSortFilterProxyModel(parent), + _messageTypeFilter(0) +{ + init(); setSourceModel(source); } MessageFilter::MessageFilter(MessageModel *source, const QList &buffers, QObject *parent) : QSortFilterProxyModel(parent), - _bufferList(buffers) + _validBuffers(buffers.toSet()), + _messageTypeFilter(0) { + init(); setSourceModel(source); +} + +void MessageFilter::init() { + BufferSettings defaultSettings; + _messageTypeFilter = defaultSettings.messageFilter(); + defaultSettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged())); + + BufferSettings mySettings(idString()); + if(mySettings.hasFilter()) + _messageTypeFilter = mySettings.messageFilter(); + mySettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged())); +} +void MessageFilter::messageTypeFilterChanged() { + int newFilter; + BufferSettings defaultSettings(); + newFilter = BufferSettings().messageFilter(); + + BufferSettings mySettings(idString()); + if(mySettings.hasFilter()) + newFilter = mySettings.messageFilter(); + + if(_messageTypeFilter != newFilter) { + _messageTypeFilter = newFilter; + invalidateFilter(); + } } QString MessageFilter::idString() const { - if(_bufferList.isEmpty()) return "*"; - QString idstr; - QStringList bufids; - foreach(BufferId id, _bufferList) bufids << QString::number(id.toInt()); - bufids.sort(); - foreach(QString id, bufids) idstr += id + '|'; - idstr.chop(1); - return idstr; + if(_validBuffers.isEmpty()) + return "*"; + + QList bufferIds = _validBuffers.toList();; + qSort(bufferIds); + + QStringList bufferIdStrings; + foreach(BufferId id, bufferIds) + bufferIdStrings << QString::number(id.toInt()); + + return bufferIdStrings.join("|"); } bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { Q_UNUSED(sourceParent); - if(_bufferList.isEmpty()) return true; - BufferId id = sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::BufferIdRole).value(); - return _bufferList.contains(id); + QModelIndex sourceIdx = sourceModel()->index(sourceRow, 0); + if(_messageTypeFilter & sourceModel()->data(sourceIdx, MessageModel::TypeRole).toInt()) + return false; + + if(_validBuffers.isEmpty()) + return true; + + BufferId id = sourceModel()->data(sourceIdx, MessageModel::BufferIdRole).value(); + if(!id.isValid()) { + return true; + } + return _validBuffers.contains(id); }