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