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 }