Quassel IRC  Pre-Release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
bufferview.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2015 by the Quassel Project *
3  * devel@quassel-irc.org *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) version 3. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19  ***************************************************************************/
20 
21 #ifndef BUFFERVIEW_H_
22 #define BUFFERVIEW_H_
23 
24 #include <QAction>
25 #include <QMenu>
26 #include <QDockWidget>
27 #include <QModelIndex>
28 #include <QStyledItemDelegate>
29 #include <QTreeView>
30 #include <QPointer>
31 
32 #include "actioncollection.h"
33 #include "bufferviewconfig.h"
34 #include "networkmodel.h"
35 #include "types.h"
36 
37 /*****************************************
38  * The TreeView showing the Buffers
39  *****************************************/
40 class BufferView : public QTreeView
41 {
42  Q_OBJECT
43 
44 public:
45  enum Direction {
46  Forward = 1,
47  Backward = -1
48  };
49 
50  BufferView(QWidget *parent = 0);
51  void init();
52 
53  void setModel(QAbstractItemModel *model);
54  void setFilteredModel(QAbstractItemModel *model, BufferViewConfig *config);
55  virtual void setSelectionModel(QItemSelectionModel *selectionModel);
56 
58  inline BufferViewConfig *config() { return _config; }
59 
60  void addActionsToMenu(QMenu *menu, const QModelIndex &index);
61  void addFilterActions(QMenu *contextMenu, const QModelIndex &index);
62 
63 public slots:
64  void setRootIndexForNetworkId(const NetworkId &networkId);
65  void removeSelectedBuffers(bool permanently = false);
66  void menuActionTriggered(QAction *);
67  void nextBuffer();
68  void previousBuffer();
69  void hideCurrentBuffer();
70 
71 signals:
72  void removeBuffer(const QModelIndex &);
73  void removeBufferPermanently(const QModelIndex &);
74 
75 protected:
76  virtual void keyPressEvent(QKeyEvent *);
77  virtual void dropEvent(QDropEvent *event);
78  virtual void rowsInserted(const QModelIndex &parent, int start, int end);
79  virtual void wheelEvent(QWheelEvent *);
80  virtual QSize sizeHint() const;
81  virtual void focusInEvent(QFocusEvent *event) { QAbstractScrollArea::focusInEvent(event); }
82  virtual void contextMenuEvent(QContextMenuEvent *event);
83 
84 #if QT_VERSION < 0x050000
85  virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
86 #else
87  virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles);
88 #endif
89 
90 private slots:
91  void joinChannel(const QModelIndex &index);
92  void toggleHeader(bool checked);
93 
94  void storeExpandedState(const QModelIndex &networkIdx);
95  void setExpandedState(const QModelIndex &networkIdx);
96 
97  void on_configChanged();
98  void on_layoutChanged();
99 
100  void changeBuffer(Direction direction);
101 
102 private:
103  QPointer<BufferViewConfig> _config;
104 
106  WasExpanded = 0x01,
107  WasActive = 0x02
108  };
109  QHash<NetworkId, short> _expandedState;
110 };
111 
112 
113 // ******************************
114 // BufferViewDelgate
115 // ******************************
116 
117 class BufferViewDelegate : public QStyledItemDelegate
118 {
119  Q_OBJECT
120 
121 public:
122  BufferViewDelegate(QObject *parent = 0);
123  bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);
124 
125 protected:
126  virtual void customEvent(QEvent *event);
127 };
128 
129 
130 // ==============================
131 // BufferView Dock
132 // ==============================
133 class BufferViewDock : public QDockWidget
134 {
135  Q_OBJECT
136  Q_PROPERTY(bool active READ isActive WRITE setActive STORED true)
137 
138 public :
139  BufferViewDock(BufferViewConfig *config, QWidget *parent);
140 
141  int bufferViewId() const;
142  BufferViewConfig *config() const;
143  inline BufferView *bufferView() const { return qobject_cast<BufferView *>(widget()); }
144  inline bool isActive() const { return _active; }
145 
146 public slots:
147  void setActive(bool active = true);
148 
149 private slots:
150  void bufferViewRenamed(const QString &newName);
151  void updateTitle();
152 
153 private:
154 
155  bool _active;
156  QString _title;
157 };
158 
159 
160 #endif