diff options
Diffstat (limited to 'ui.qt/source/document.hpp')
-rw-r--r-- | ui.qt/source/document.hpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/ui.qt/source/document.hpp b/ui.qt/source/document.hpp new file mode 100644 index 0000000..ba11e26 --- /dev/null +++ b/ui.qt/source/document.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include "fwd.hpp" + +#include <QAbstractItemModel> +#include <QDateTime> +#include <QObject> +#include <QQuickTextDocument> + +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<DocumentBlock*> 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<int, QByteArray> roleNames() const override; +}; |