File indexing completed on 2024-05-12 05:36:50
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 <qqmlregistration.h> 0012 0013 #include <KNSCore/Entry> 0014 0015 #include <memory> 0016 0017 class PageDataObject; 0018 0019 class PagesModel : public QAbstractListModel, public QQmlParserStatus 0020 { 0021 Q_OBJECT 0022 Q_INTERFACES(QQmlParserStatus) 0023 QML_ELEMENT 0024 0025 public: 0026 enum Roles { 0027 TitleRole = Qt::UserRole + 1, 0028 DataRole, 0029 IconRole, 0030 FileNameRole, 0031 HiddenRole, 0032 FilesWriteableRole, 0033 }; 0034 Q_ENUM(Roles) 0035 0036 enum FilesWriteableStates { 0037 NotWriteable, 0038 AllWriteable, 0039 LocalChanges, 0040 }; 0041 Q_ENUM(FilesWriteableStates) 0042 0043 explicit PagesModel(QObject *parent = nullptr); 0044 0045 Q_PROPERTY(QStringList pageOrder READ pageOrder WRITE setPageOrder NOTIFY pageOrderChanged) 0046 Q_PROPERTY(QStringList hiddenPages READ hiddenPages WRITE setHiddenPages NOTIFY hiddenPagesChanged) 0047 0048 QHash<int, QByteArray> roleNames() const override; 0049 0050 int rowCount(const QModelIndex &parent) const override; 0051 QVariant data(const QModelIndex &index, int role) const override; 0052 0053 void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder) override; 0054 0055 void classBegin() override; 0056 void componentComplete() override; 0057 0058 Q_INVOKABLE PageDataObject *addPage(const QString &fileName, const QVariantMap &properties = QVariantMap{}); 0059 Q_INVOKABLE PageDataObject *importPage(const QUrl &file); 0060 Q_INVOKABLE void removeLocalPageFiles(const QString &fileName); 0061 Q_INVOKABLE void ghnsEntryStatusChanged(const KNSCore::Entry &entry); 0062 0063 QStringList pageOrder() const; 0064 void setPageOrder(const QStringList &pageOrder); 0065 0066 QStringList hiddenPages() const; 0067 void setHiddenPages(const QStringList &hiddenPages); 0068 0069 Q_SIGNALS: 0070 void pageOrderChanged(); 0071 void hiddenPagesChanged(); 0072 0073 private: 0074 QList<PageDataObject *> m_pages; 0075 QStringList m_pageOrder; 0076 QStringList m_hiddenPages; 0077 QHash<QString, FilesWriteableStates> m_writeableCache; 0078 };