Lomiri
quicklistproxymodel.cpp
1 /*
2  * Copyright (C) 2017 Canonical Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #include "quicklistproxymodel.h"
18 
19 #include <QDebug>
20 
21 QuickListProxyModel::QuickListProxyModel(QObject *parent):
22  QSortFilterProxyModel(parent)
23 {
24  connect(this, &QAbstractListModel::rowsInserted, this, &QuickListProxyModel::countChanged);
25  connect(this, &QAbstractListModel::rowsRemoved, this, &QuickListProxyModel::countChanged);
26  connect(this, &QAbstractListModel::layoutChanged, this, &QuickListProxyModel::countChanged);
27 }
28 
29 QAbstractItemModel *QuickListProxyModel::source() const
30 {
31  return m_source;
32 }
33 
34 bool QuickListProxyModel::privateMode() const
35 {
36  return m_privateMode;
37 }
38 
39 void QuickListProxyModel::setPrivateMode(bool privateMode)
40 {
41  if (m_privateMode != privateMode) {
42  m_privateMode = privateMode;
43  invalidateFilter();
44  Q_EMIT privateModeChanged();
45  }
46 }
47 
48 void QuickListProxyModel::setSource(QAbstractItemModel *source)
49 {
50  if (m_source != source) {
51  m_source = source;
52  setSourceModel(m_source);
53  connect(m_source, &QAbstractItemModel::rowsRemoved, this, &QuickListProxyModel::invalidate);
54  connect(m_source, &QAbstractItemModel::rowsInserted, this, &QuickListProxyModel::invalidate);
55  Q_EMIT sourceChanged();
56  }
57 }
58 
59 int QuickListProxyModel::count() const
60 {
61  return rowCount();
62 }
63 
64 bool QuickListProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
65 {
66  Q_UNUSED(source_parent)
67 
68  if (m_privateMode) {
69  return !m_source->data(m_source->index(source_row, 0), QuickListModelInterface::RoleIsPrivate).toBool();
70  }
71  return true;
72 }