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