Remove unused cipher map.
[quassel.git] / src / uisupport / bufferviewoverlayfilter.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005-2013 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 #include "bufferviewoverlayfilter.h"
22
23 #include "bufferviewoverlay.h"
24 #include "networkmodel.h"
25 #include "types.h"
26
27 BufferViewOverlayFilter::BufferViewOverlayFilter(QAbstractItemModel *model, BufferViewOverlay *overlay)
28     : QSortFilterProxyModel(model),
29     _overlay(0)
30 {
31     setOverlay(overlay);
32     setSourceModel(model);
33
34     setDynamicSortFilter(true);
35 }
36
37
38 void BufferViewOverlayFilter::setOverlay(BufferViewOverlay *overlay)
39 {
40     if (_overlay == overlay)
41         return;
42
43     if (_overlay) {
44         disconnect(_overlay, 0, this, 0);
45     }
46
47     _overlay = overlay;
48
49     if (!overlay) {
50         invalidate();
51         return;
52     }
53
54     connect(overlay, SIGNAL(destroyed()), this, SLOT(overlayDestroyed()));
55     connect(overlay, SIGNAL(hasChanged()), this, SLOT(invalidate()));
56     invalidate();
57 }
58
59
60 void BufferViewOverlayFilter::overlayDestroyed()
61 {
62     setOverlay(0);
63 }
64
65
66 bool BufferViewOverlayFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
67 {
68     if (!_overlay)
69         return false;
70
71     QModelIndex source_bufferIndex = sourceModel()->index(source_row, 0, source_parent);
72
73     if (!source_bufferIndex.isValid()) {
74         qWarning() << "filterAcceptsRow has been called with an invalid Child";
75         return false;
76     }
77
78     NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_bufferIndex, NetworkModel::ItemTypeRole).toInt();
79
80     NetworkId networkId = sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value<NetworkId>();
81     if (!_overlay->networkIds().contains(networkId) && !_overlay->allNetworks()) {
82         return false;
83     }
84     else if (itemType == NetworkModel::NetworkItemType) {
85         // network items don't need further checks.
86         return true;
87     }
88
89     int activityLevel = sourceModel()->data(source_bufferIndex, NetworkModel::BufferActivityRole).toInt();
90     if (_overlay->minimumActivity() > activityLevel)
91         return false;
92
93     int bufferType = sourceModel()->data(source_bufferIndex, NetworkModel::BufferTypeRole).toInt();
94     if (!(_overlay->allowedBufferTypes() & bufferType))
95         return false;
96
97     BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value<BufferId>();
98     Q_ASSERT(bufferId.isValid());
99
100     if (_overlay->bufferIds().contains(bufferId))
101         return true;
102
103     if (_overlay->tempRemovedBufferIds().contains(bufferId))
104         return activityLevel > BufferInfo::OtherActivity;
105
106     if (_overlay->removedBufferIds().contains(bufferId))
107         return false;
108
109     // the buffer is not known to us
110     qDebug() << "BufferViewOverlayFilter::filterAcceptsRow()" << bufferId << "is unknown!";
111     return false;
112 }