fixing crash on disconnect
[quassel.git] / src / client / messagefilter.h
index efabff6..84d089f 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 #include <QSortFilterProxyModel>
 
+#include "bufferinfo.h"
+#include "client.h"
 #include "messagemodel.h"
+#include "networkmodel.h"
 #include "types.h"
 
 class MessageFilter : public QSortFilterProxyModel {
   Q_OBJECT
 
-  public:
-    MessageFilter(MessageModel *, const QList<BufferId> &buffers = QList<BufferId>(), QObject *parent = 0);
+protected:
+  MessageFilter(QAbstractItemModel *source, QObject *parent = 0);
 
-    virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+public:
+  MessageFilter(MessageModel *, const QList<BufferId> &buffers = QList<BufferId>(), QObject *parent = 0);
 
+  virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+  virtual QString idString() const;
+  inline bool isSingleBufferFilter() const { return _validBuffers.count() == 1; }
+  BufferId singleBufferId() const { return *(_validBuffers.constBegin()); }
+  inline bool containsBuffer(const BufferId &id) const { return _validBuffers.contains(id); }
+  inline QSet<BufferId> containedBuffers() const { return _validBuffers; }
 
-  private:
-    QList<BufferId> _bufferList;
+public slots:
+  void messageTypeFilterChanged();
+  void messageRedirectionChanged();
+  void requestBacklog();
+
+protected:
+  QString bufferName() const { return Client::networkModel()->bufferName(singleBufferId()); }
+  BufferInfo::Type bufferType() const { return Client::networkModel()->bufferType(singleBufferId()); }
+  NetworkId networkId() const { return Client::networkModel()->networkId(singleBufferId()); }
+
+private:
+  void init();
+
+  QSet<BufferId> _validBuffers;
+  QMultiHash<QString, uint> _filteredQuitMsgs;
+  int _messageTypeFilter;
+
+  int _userNoticesTarget;
+  int _serverNoticesTarget;
+  int _errorMsgsTarget;
 };
 
 #endif