Warning, file /office/calligra/gemini/DocumentListModel.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2014 Dan Leinir Turthra Jensen <admin@leinir.dk> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef CALLIGRAMOBILE_DOCUMENTLISTMODEL_H 0008 #define CALLIGRAMOBILE_DOCUMENTLISTMODEL_H 0009 0010 #include <QAbstractListModel> 0011 #include <QQmlParserStatus> 0012 #include <QRunnable> 0013 #include <QDateTime> 0014 0015 class SearchThread; 0016 0017 class DocumentListModel : public QAbstractListModel, public QQmlParserStatus 0018 { 0019 Q_OBJECT 0020 Q_PROPERTY(DocumentType filter READ filter WRITE setFilter NOTIFY filterChanged) 0021 Q_PROPERTY(QString documentsFolder READ documentsFolder CONSTANT) 0022 Q_INTERFACES(QQmlParserStatus) 0023 0024 public: 0025 explicit DocumentListModel(QObject *parent = 0); 0026 ~DocumentListModel() override; 0027 0028 enum CustomRoles { 0029 FileNameRole = Qt::UserRole + 1, 0030 FilePathRole, 0031 DocTypeRole, 0032 SectionCategoryRole, 0033 FileSizeRole, 0034 AuthorNameRole, 0035 AccessedTimeRole, 0036 ModifiedTimeRole, 0037 UUIDRole, 0038 }; 0039 0040 enum GroupBy { GroupByName, GroupByDocType }; 0041 Q_ENUM(GroupBy); 0042 0043 enum DocumentType 0044 { 0045 UnknownType, 0046 TextDocumentType, 0047 PresentationType, 0048 SpreadsheetType, 0049 }; 0050 Q_ENUM(DocumentType); 0051 0052 struct DocumentInfo { 0053 bool operator==(const DocumentInfo &other) const { return filePath == other.filePath; } 0054 QString filePath; 0055 QString fileName; 0056 DocumentType docType; 0057 QString fileSize; 0058 QString authorName; 0059 QDateTime accessedTime; 0060 QDateTime modifiedTime; 0061 QString uuid; 0062 }; 0063 0064 // reimp from QAbstractListModel 0065 QHash<int, QByteArray> roleNames() const override; 0066 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0067 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0068 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0069 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 0070 0071 // reimp from QDeclarativeParserStatus 0072 void classBegin() override; 0073 void componentComplete() override; 0074 0075 DocumentType filter(); 0076 QString documentsFolder() const; 0077 0078 static QString prettyTime(QDateTime theTime); 0079 0080 Q_SIGNALS: 0081 void filterChanged(); 0082 0083 public Q_SLOTS: 0084 void startSearch(); 0085 void stopSearch(); 0086 void addDocument(const DocumentListModel::DocumentInfo &info); 0087 void setFilter(DocumentType newFilter); 0088 0089 public: 0090 Q_INVOKABLE void groupBy(GroupBy role); 0091 0092 private Q_SLOTS: 0093 void searchFinished(); 0094 0095 private: 0096 void relayout(); 0097 0098 QHash<QString, DocumentType> m_docTypes; 0099 QList<DocumentInfo> m_allDocumentInfos; 0100 QList<DocumentInfo> m_currentDocumentInfos; 0101 SearchThread *m_searchThread; 0102 GroupBy m_groupBy; 0103 DocumentType m_filter; 0104 QString m_filteredTypes; 0105 friend class SearchThread; 0106 }; 0107 0108 Q_DECLARE_METATYPE(DocumentListModel::DocumentInfo); 0109 0110 class SearchThread : public QObject, public QRunnable 0111 { 0112 Q_OBJECT 0113 public: 0114 SearchThread(const QHash<QString, DocumentListModel::DocumentType> &docTypes, QObject *parent = 0); 0115 ~SearchThread() override; 0116 0117 void run() override; 0118 0119 void abort() { m_abort = true; } 0120 0121 Q_SIGNALS: 0122 void documentFound(const DocumentListModel::DocumentInfo &); 0123 void finished(); 0124 0125 private: 0126 bool m_abort; 0127 QHash<QString, DocumentListModel::DocumentType> m_docTypes; 0128 static const QString textDocumentType; 0129 static const QString presentationType; 0130 static const QString spreadsheetType; 0131 }; 0132 0133 #endif // CALLIGRAMOBILE_DOCUMENTLISTMODEL_H 0134