File indexing completed on 2024-11-24 04:53:15
0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net> 0002 0003 This file is part of the Trojita Qt IMAP e-mail client, 0004 http://trojita.flaska.net/ 0005 0006 This program is free software; you can redistribute it and/or 0007 modify it under the terms of the GNU General Public License as 0008 published by the Free Software Foundation; either version 2 of 0009 the License or (at your option) version 3 or any later version 0010 accepted by the membership of KDE e.V. (or its successor approved 0011 by the membership of KDE e.V.), which shall act as a proxy 0012 defined in Section 14 of version 3 of the license. 0013 0014 This program is distributed in the hope that it will be useful, 0015 but WITHOUT ANY WARRANTY; without even the implied warranty of 0016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0017 GNU General Public License for more details. 0018 0019 You should have received a copy of the GNU General Public License 0020 along with this program. If not, see <http://www.gnu.org/licenses/>. 0021 */ 0022 0023 #include "VisibleTasksModel.h" 0024 #include "kdeui-itemviews/kdescendantsproxymodel.h" 0025 #include "ItemRoles.h" 0026 0027 namespace Imap 0028 { 0029 namespace Mailbox 0030 { 0031 0032 /** @short Construct the required proxy model hierarchy */ 0033 VisibleTasksModel::VisibleTasksModel(QObject *parent, QAbstractItemModel *taskModel) : 0034 QSortFilterProxyModel(parent) 0035 { 0036 m_flatteningModel = new KDescendantsProxyModel(this); 0037 m_flatteningModel->setSourceModel(taskModel); 0038 setSourceModel(m_flatteningModel); 0039 setDynamicSortFilter(true); 0040 connect(m_flatteningModel, &QAbstractItemModel::rowsInserted, this, &VisibleTasksModel::hasVisibleTasksChanged); 0041 connect(m_flatteningModel, &QAbstractItemModel::rowsRemoved, this, &VisibleTasksModel::hasVisibleTasksChanged); 0042 connect(m_flatteningModel, &QAbstractItemModel::modelReset, this, &VisibleTasksModel::hasVisibleTasksChanged); 0043 connect(m_flatteningModel, &QAbstractItemModel::layoutChanged, this, &VisibleTasksModel::hasVisibleTasksChanged); 0044 } 0045 0046 QHash<int, QByteArray> VisibleTasksModel::roleNames() const 0047 { 0048 QHash<int, QByteArray> roleNames; 0049 roleNames[RoleTaskCompactName] = "compactName"; 0050 return roleNames; 0051 } 0052 0053 /** @short Reimplemented from QSortFilterProxyModel */ 0054 bool VisibleTasksModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const 0055 { 0056 QModelIndex index = sourceModel()->index(source_row, 0, source_parent); 0057 if (index.data(RoleTaskIsParserState).toBool()) { 0058 return false; 0059 } 0060 0061 return index.data(RoleTaskIsVisible).toBool(); 0062 } 0063 0064 bool VisibleTasksModel::hasVisibleTasks() const 0065 { 0066 return rowCount(); 0067 } 0068 0069 } 0070 }