File indexing completed on 2025-02-16 04:59:08

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 #ifndef IMAP_MODEL_VISIBLETASKSMODEL_H
0024 #define IMAP_MODEL_VISIBLETASKSMODEL_H
0025 
0026 #include <QSortFilterProxyModel>
0027 
0028 class KDescendantsProxyModel;
0029 
0030 namespace Imap
0031 {
0032 namespace Mailbox
0033 {
0034 
0035 /** @short Proxy model showing a list of tasks that are active or pending
0036 
0037 In contrast to the full tree model, this proxy will show only those ImapTasks that somehow correspond to an activity requested by
0038 user.  This means that auxiliary tasks like GetAnyConnectionTask, KeepMailboxOpenTask etc are not shown.
0039 
0040 The goal is to have a way of showing an activity indication whenever the IMAP connection is "doing something".
0041 */
0042 class VisibleTasksModel : public QSortFilterProxyModel
0043 {
0044     Q_OBJECT
0045     Q_PROPERTY(bool hasVisibleTasks READ hasVisibleTasks NOTIFY hasVisibleTasksChanged)
0046 public:
0047     explicit VisibleTasksModel(QObject *parent, QAbstractItemModel *taskModel);
0048     bool hasVisibleTasks() const;
0049     virtual QHash<int, QByteArray> roleNames() const;
0050 
0051 signals:
0052     void hasVisibleTasksChanged();
0053 protected:
0054     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
0055 private:
0056     KDescendantsProxyModel *m_flatteningModel;
0057 };
0058 
0059 }
0060 }
0061 
0062 #endif // IMAP_MODEL_VISIBLETASKSMODEL_H