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