File indexing completed on 2024-11-24 04:53:14

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 
0024 #ifndef IMAP_MAILBOX_TASKPRESENTATIONMODEL_H
0025 #define IMAP_MAILBOX_TASKPRESENTATIONMODEL_H
0026 
0027 #include <QAbstractItemModel>
0028 
0029 namespace Imap
0030 {
0031 class Parser;
0032 
0033 namespace Mailbox
0034 {
0035 
0036 class ImapTask;
0037 class Model;
0038 
0039 /** @short Model providing a tree view on all tasks which belong to a particular model
0040 
0041 This class provides a standard Qt model which provides a tree hierarchy of all tasks which are somehow registered with its parent
0042 model.  The tasks are organized in a tree with active tasks being all children of the root item.  Tasks which are waiting for
0043 completion of another task are positioned as children of the item they're blocking at.
0044 */
0045 class TaskPresentationModel : public QAbstractItemModel
0046 {
0047     Q_OBJECT
0048 
0049     QModelIndex indexForTask(ImapTask *const task) const;
0050 
0051 public:
0052     explicit TaskPresentationModel(Model *model);
0053 
0054     virtual QModelIndex index(int row, int column, const QModelIndex &parent) const;
0055     virtual QModelIndex parent(const QModelIndex &child) const;
0056     virtual int rowCount(const QModelIndex &parent) const;
0057     virtual int columnCount(const QModelIndex &parent) const;
0058     virtual QVariant data(const QModelIndex &index, int role) const;
0059 
0060 public slots:
0061     void slotSomeTaskDestroyed();
0062     void slotTaskGotReparented(const ImapTask *const task);
0063     void slotTaskMighHaveChanged(ImapTask *task);
0064 
0065     void slotParserCreated(Parser *parser);
0066     void slotParserDeleted(Parser *parser);
0067 
0068 private:
0069     Model *m_model;
0070 
0071     friend class Model; // needs to be able to call reset() on us
0072 };
0073 
0074 /** @short Debug: dump the model in a tree-like manner */
0075 void dumpModelContents(QAbstractItemModel *model, QModelIndex index = QModelIndex(), int offset = 0);
0076 
0077 }
0078 }
0079 
0080 #endif // IMAP_MAILBOX_TASKPRESENTATIONMODEL_H