+ : QSortFilterProxyModel(parent),
+ _validBuffers(buffers.toSet()),
+ _messageTypeFilter(0)
+{
+ init();
+ setSourceModel(source);
+}
+
+
+void MessageFilter::init()
+{
+ setDynamicSortFilter(true);
+
+ _userNoticesTarget = _serverNoticesTarget = _errorMsgsTarget = -1;
+
+ BufferSettings defaultSettings;
+ defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged()));
+ defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged()));
+ defaultSettings.notify("ErrorMsgsTarget", this, SLOT(messageRedirectionChanged()));
+ messageRedirectionChanged();
+
+ _messageTypeFilter = defaultSettings.messageFilter();
+ defaultSettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged()));
+
+ BufferSettings mySettings(idString());
+ if (mySettings.hasFilter())
+ _messageTypeFilter = mySettings.messageFilter();
+ mySettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged()));
+ mySettings.notify("hasMessageTypeFilter", 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;
+ _filteredQuitMsgs.clear();
+ invalidateFilter();
+ }
+}
+
+
+void MessageFilter::messageRedirectionChanged()
+{
+ BufferSettings bufferSettings;
+ bool changed = false;
+
+ if (_userNoticesTarget != bufferSettings.userNoticesTarget()) {
+ _userNoticesTarget = bufferSettings.userNoticesTarget();
+ changed = true;
+ }
+
+ if (_serverNoticesTarget != bufferSettings.serverNoticesTarget()) {
+ _serverNoticesTarget = bufferSettings.serverNoticesTarget();
+ changed = true;
+ }
+
+ if (_errorMsgsTarget != bufferSettings.errorMsgsTarget()) {
+ _errorMsgsTarget = bufferSettings.errorMsgsTarget();
+ changed = true;
+ }
+
+ if (changed)
+ invalidateFilter();
+}
+
+
+QString MessageFilter::idString() const
+{
+ if (_validBuffers.isEmpty())
+ return "*";
+
+ QList<BufferId> 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