#pragma once #include "fwd.hpp" #include #include #include #include class DocumentBlock : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(QQuickTextDocument* textDocument READ getDoc WRITE setDoc NOTIFY docChanged) private: DocumentModel* mModel; QQuickTextDocument* mDoc = nullptr; QDateTime mModifyTime; public: explicit DocumentBlock(QObject* parent = nullptr); DocumentModel* getModel() const; void setModel(DocumentModel* newModel); QQuickTextDocument* getDoc() const; void setDoc(QQuickTextDocument* newDoc); const QDateTime& getModifyTime() const; signals: void docChanged(); void modificationChanged(); }; class DocumentModel : public QAbstractItemModel { Q_OBJECT QML_ELEMENT private: std::vector mBlocks; public: enum DocumentRoles { ModifyTimeRole = Qt::UserRole + 1, }; DocumentModel(QObject* parent = nullptr); void appendBlock(DocumentBlock* block); // TODO // void moveBlock() int rowCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; protected: QHash roleNames() const override; };