Changed the BufferView System to a MVC Design Pattern
[quassel.git] / gui / bufferview.h
index a76e327..49f3a80 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#ifndef _BUFFERVIEW_H_
-#define _BUFFERVIEW_H_
+#ifndef _BUFFERVIEWWIDGET_H_
+#define _BUFFERVIEWWIDGET_H_
 
 #include <QtGui>
-#include "ui_bufferview.h"
-#include "guiproxy.h"
+#include <QFlags>
 #include "buffer.h"
 
-typedef QHash<QString, QHash<QString, Buffer*> > BufferHash;
-
-class BufferViewWidget : public QWidget {
+/*****************************************
+ * Buffer View Filter
+ *****************************************/
+class BufferViewFilter : public QSortFilterProxyModel {
   Q_OBJECT
+  
+public:
+  enum Mode {
+    NoActive = 0x01,
+    NoInactive = 0x02,
+    SomeNets = 0x04,
+    AllNets = 0x08,
+    NoChannels = 0x10,
+    NoQueries = 0x20,
+    NoServers = 0x40
+  };
+  Q_DECLARE_FLAGS(Modes, Mode)
+
+  BufferViewFilter(QAbstractItemModel *model, Modes mode, QStringList nets, QObject *parent = 0);
+  
+public slots:
+  void invalidateMe();
+  void changeCurrent(const QModelIndex &, const QModelIndex &);
+  void doubleClickReceived(const QModelIndex &);
+  void select(const QModelIndex &, QItemSelectionModel::SelectionFlags);
+  
+signals:
+  void currentChanged(const QModelIndex &, const QModelIndex &);
+  void doubleClicked(const QModelIndex &);
+  void updateSelection(const QModelIndex &, QItemSelectionModel::SelectionFlags);
+  
+private:
+  bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
 
-  public:
-    BufferViewWidget(QWidget *parent = 0);
-
-    QTreeWidget *tree() { return ui.tree; }
-
-    virtual QSize sizeHint () const;
-
-  signals:
-    void bufferSelected(QString net, QString buf);
-
-  private slots:
-
-
-  private:
-    Ui::BufferViewWidget ui;
-
+  Modes mode;
+  QStringList networks;
 };
+Q_DECLARE_OPERATORS_FOR_FLAGS(BufferViewFilter::Modes)    
 
-class BufferView : public QDockWidget {
+/*****************************************
+ * The TreeView showing the Buffers
+ *****************************************/
+class BufferView : public QTreeView {
   Q_OBJECT
-
-  public:
-    enum Mode {
-      NoActive = 0x01, NoInactive = 0x02,
-      SomeNets = 0x04, AllNets = 0x08,
-      NoChannels = 0x10, NoQueries = 0x20, NoServers = 0x40
-    };
   
-    enum ActivityLevel {
-      NoActivity = 0x00, OtherActivity = 0x01,
-      NewMessage = 0x02, Highlight = 0x40
-    };
-    
-    BufferView(QString name, int mode, QStringList nets = QStringList(), QWidget *parent = 0);
-    void setMode(int mode, QStringList nets = QStringList());
-    void setName(QString name);
-
-
-  public slots:
-    void bufferUpdated(Buffer *);
-    void bufferActivity(uint, Buffer *);
-    void bufferDestroyed(Buffer *);
-    void setBuffers(QList<Buffer *>);
-    void selectBuffer(Buffer *);
-
-  signals:
-    void bufferSelected(Buffer *);
-    void fakeUserInput(BufferId, QString);
-    
-  private slots:
-    void itemClicked(QTreeWidgetItem *item);
-    void itemDoubleClicked(QTreeWidgetItem *item);
-    
-  private:
-    int mode;
-    QString name;
-    QStringList networks;
-    Buffer *currentBuffer;
-    //QHash<QString, QHash<QString, Buffer*> > buffers;
-    QHash<Buffer *, QTreeWidgetItem *> bufitems;
-    QHash<QString, QTreeWidgetItem *> netitems;
-    //QHash<QString, QHash<QString, QTreeWidgetItem *> > items;
-    QTreeWidget *tree;
-
-    bool shouldShow(Buffer *);
-    void clearActivity(Buffer *);
+public:
+  BufferView(QWidget *parent = 0);
+  void init();
+  void setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QStringList nets);
+  
 };
 
 
-#endif
+#endif
\ No newline at end of file