aboutsummaryrefslogtreecommitdiff
path: root/ui.qt/source/document.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui.qt/source/document.hpp')
-rw-r--r--ui.qt/source/document.hpp62
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;
+};