// SPDX-FileCopyrightText: 2022-2023 Devin Lin // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "folioapplication.h" #include "folioapplicationfolder.h" #include "foliodelegate.h" #include #include #include #include class FolioPageDelegate : public FolioDelegate { Q_OBJECT Q_PROPERTY(int row READ row NOTIFY rowChanged) Q_PROPERTY(int column READ column NOTIFY columnChanged) public: FolioPageDelegate(int row = 0, int column = 0, QObject *parent = nullptr); FolioPageDelegate(int row, int column, FolioApplication *application, QObject *parent); FolioPageDelegate(int row, int column, FolioApplicationFolder *folder, QObject *parent); FolioPageDelegate(int row, int column, FolioDelegate *delegate, QObject *parent); static FolioPageDelegate *fromJson(QJsonObject &obj, QObject *parent); static int getTranslatedRow(int realRow, int realColumn); static int getTranslatedColumn(int realRow, int realColumn); virtual QJsonObject toJson() const override; int row(); void setRow(int row); int column(); void setColumn(int column); Q_SIGNALS: void rowChanged(); void columnChanged(); private: void init(); int m_realRow; int m_realColumn; int m_row; int m_column; }; class PageModel : public QAbstractListModel { Q_OBJECT public: enum Roles { DelegateRole = Qt::UserRole + 1, XPositionRole, YPositionRole, ShownRole, }; PageModel(QList delegates = QList{}, QObject *parent = nullptr); ~PageModel(); static PageModel *fromJson(QJsonArray &arr, QObject *parent); QJsonArray toJson() const; int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; Q_INVOKABLE void removeDelegate(int row, int col); bool addDelegate(FolioPageDelegate *delegate); FolioPageDelegate *getDelegate(int row, int col); bool isPageEmpty(); public Q_SLOTS: void save(); Q_SIGNALS: void saveRequested(); private: QList m_delegates; };