1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 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 BUFFERVIEWFILTER_H_ |
22 | #define BUFFERVIEWFILTER_H_ |
23 | |
24 | #include <QAction> |
25 | #include <QDropEvent> |
26 | #include <QFlags> |
27 | #include <QPointer> |
28 | #include <QSet> |
29 | #include <QSortFilterProxyModel> |
30 | |
31 | #include "types.h" |
32 | #include "bufferviewconfig.h" |
33 | |
34 | /***************************************** |
35 | * Buffer View Filter |
36 | *****************************************/ |
37 | class BufferViewFilter : public QSortFilterProxyModel |
38 | { |
39 | Q_OBJECT |
40 | |
41 | public: |
42 | enum Mode { |
43 | NoActive = 0x01, |
44 | NoInactive = 0x02, |
45 | SomeNets = 0x04, |
46 | AllNets = 0x08, |
47 | NoChannels = 0x10, |
48 | NoQueries = 0x20, |
49 | NoServers = 0x40, |
50 | FullCustom = 0x80 |
51 | }; |
52 | Q_DECLARE_FLAGS(Modes, Mode) |
53 | |
54 | BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config = 0); |
55 | |
56 | virtual Qt::ItemFlags flags(const QModelIndex &index) const; |
57 | virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); |
58 | |
59 | QVariant data(const QModelIndex &index, int role) const; |
60 | QVariant checkedState(const QModelIndex &index) const; |
61 | |
62 | bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); |
63 | bool setCheckedState(const QModelIndex &index, Qt::CheckState state); |
64 | |
65 | void setConfig(BufferViewConfig *config); |
66 | inline BufferViewConfig *config() const { return _config; } |
67 | |
68 | virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); |
69 | |
70 | QList<QAction *> actions(const QModelIndex &index); |
71 | |
72 | public slots: |
73 | void checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous); |
74 | void checkItemForRemoval(const QModelIndex &index) { checkItemsForRemoval(index, index); } |
75 | void checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight); |
76 | |
77 | protected: |
78 | bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; |
79 | bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; |
80 | bool bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; |
81 | bool networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; |
82 | virtual void customEvent(QEvent *event); |
83 | |
84 | signals: |
85 | void _dataChanged(const QModelIndex &source_topLeft, const QModelIndex &source_bottomRight); |
86 | void configChanged(); |
87 | |
88 | private slots: |
89 | void configInitialized(); |
90 | void enableEditMode(bool enable); |
91 | void showServerQueriesChanged(); |
92 | |
93 | private: |
94 | QPointer<BufferViewConfig> _config; |
95 | Qt::SortOrder _sortOrder; |
96 | |
97 | bool _showServerQueries; |
98 | bool _editMode; |
99 | QAction _enableEditMode; |
100 | QSet<BufferId> _toAdd; |
101 | QSet<BufferId> _toTempRemove; |
102 | QSet<BufferId> _toRemove; |
103 | |
104 | bool filterAcceptBuffer(const QModelIndex &) const; |
105 | bool filterAcceptNetwork(const QModelIndex &) const; |
106 | void addBuffer(const BufferId &bufferId) const; |
107 | void addBuffers(const QList<BufferId> &bufferIds) const; |
108 | static bool bufferIdLessThan(const BufferId &, const BufferId &); |
109 | }; |
110 | |
111 | |
112 | Q_DECLARE_OPERATORS_FOR_FLAGS(BufferViewFilter::Modes) |
113 | |
114 | #endif // BUFFERVIEWFILTER_H_ |
115 | |