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 };