File indexing completed on 2024-05-12 17:08:29
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QAbstractListModel> 0010 #include <QQmlParserStatus> 0011 #include <memory> 0012 0013 class QQmlListReference; 0014 0015 class PageDataObject; 0016 0017 class PagesModel : public QAbstractListModel, public QQmlParserStatus 0018 { 0019 Q_OBJECT 0020 Q_INTERFACES(QQmlParserStatus) 0021 0022 public: 0023 enum Roles { 0024 TitleRole = Qt::UserRole + 1, 0025 DataRole, 0026 IconRole, 0027 FileNameRole, 0028 HiddenRole, 0029 FilesWriteableRole, 0030 }; 0031 Q_ENUM(Roles) 0032 0033 enum FilesWriteableStates { 0034 NotWriteable, 0035 AllWriteable, 0036 LocalChanges, 0037 }; 0038 Q_ENUM(FilesWriteableStates) 0039 0040 explicit PagesModel(QObject *parent = nullptr); 0041 0042 Q_PROPERTY(QStringList pageOrder READ pageOrder WRITE setPageOrder NOTIFY pageOrderChanged) 0043 Q_PROPERTY(QStringList hiddenPages READ hiddenPages WRITE setHiddenPages NOTIFY hiddenPagesChanged) 0044 0045 QHash<int, QByteArray> roleNames() const override; 0046 0047 int rowCount(const QModelIndex &parent) const override; 0048 QVariant data(const QModelIndex &index, int role) const override; 0049 0050 void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder) override; 0051 0052 void classBegin() override; 0053 void componentComplete() override; 0054 0055 Q_INVOKABLE PageDataObject *addPage(const QString &fileName, const QVariantMap &properties = QVariantMap{}); 0056 Q_INVOKABLE PageDataObject *importPage(const QUrl &file); 0057 Q_INVOKABLE void removeLocalPageFiles(const QString &fileName); 0058 Q_INVOKABLE void ghnsEntriesChanged(const QQmlListReference &changedEntries); 0059 Q_INVOKABLE void ghnsEntryStatusChanged(QObject *entry); 0060 0061 QStringList pageOrder() const; 0062 void setPageOrder(const QStringList &pageOrder); 0063 0064 QStringList hiddenPages() const; 0065 void setHiddenPages(const QStringList &hiddenPages); 0066 0067 Q_SIGNALS: 0068 void pageOrderChanged(); 0069 void hiddenPagesChanged(); 0070 0071 private: 0072 QVector<PageDataObject *> m_pages; 0073 QStringList m_pageOrder; 0074 QStringList m_hiddenPages; 0075 QHash<QString, FilesWriteableStates> m_writeableCache; 0076 };