From 3250fc72f906797f113855cf9dde4e7803a66bd9 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 27 Jun 2022 00:14:58 +0000 Subject: (From git) Reformat qt ui project git-svn-id: file:///home/arch/svn/epistmool/trunk@5 71f44415-077c-4ad7-a976-72ddbf76608f --- ui.qt/source/Document.cpp | 152 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 ui.qt/source/Document.cpp (limited to 'ui.qt/source/Document.cpp') diff --git a/ui.qt/source/Document.cpp b/ui.qt/source/Document.cpp new file mode 100644 index 0000000..272ac4c --- /dev/null +++ b/ui.qt/source/Document.cpp @@ -0,0 +1,152 @@ +#include "Document.hpp" + +#include +#include +#include +#include + +DocumentHandler::DocumentHandler(QObject* parent) + : QObject{ parent } +{ +} + +QQuickTextDocument* DocumentHandler::getDoc() const +{ + return mDoc; +} + +void DocumentHandler::setDoc(QQuickTextDocument* newDoc) +{ + if (mDoc != newDoc) { + auto oldDoc = mDoc; + mDoc = newDoc; + + if (oldDoc) { + disconnect(oldDoc->textDocument(), nullptr, this, nullptr); + } + if (newDoc) { + connect(newDoc->textDocument(), &QTextDocument::modificationChanged, this, [&]() { + // TODO add a timer to wait for 1 second before updating? + mModifyTime = QDateTime::currentDateTime(); + emit modificationChanged(); + }); + } + + emit docChanged(oldDoc); + } +} + +const QDateTime& DocumentHandler::getModifyTime() const +{ + return mModifyTime; +} + +int DocumentHandler::getCursorPos() const +{ + return mCursorPos; +} + +void DocumentHandler::setCursorPos(int newCursorPos) +{ + if (mCursorPos == newCursorPos) { + return; + } + mCursorPos = newCursorPos; + emit cursorPosChanged(); +} + +int DocumentHandler::getSelectionBegin() const +{ + return mSelectionBegin; +} + +void DocumentHandler::setSelectionBegin(int newSelectionBegin) +{ + if (mSelectionBegin == newSelectionBegin) { + return; + } + mSelectionBegin = newSelectionBegin; + emit selectionBeginChanged(); +} + +int DocumentHandler::getSelectionEnd() const +{ + return mSelectionEnd; +} + +void DocumentHandler::setSelectionEnd(int newSelectionEnd) +{ + if (mSelectionEnd == newSelectionEnd) { + return; + } + mSelectionEnd = newSelectionEnd; + emit selectionEndChanged(); +} + +QFont DocumentHandler::getActiveFont() const +{ + auto cursor = makeTextCursor(); + if (cursor.isNull()) { + return mDoc->textDocument()->defaultFont(); + } + auto format = cursor.charFormat(); + return format.font(); +} + +void DocumentHandler::setActiveFont(const QFont& font) +{ + auto cursor = makeTextCursor(); + if (!cursor.isNull() && cursor.charFormat().font() == font) { + return; + } + + QTextCharFormat format; + format.setFont(font); + mergeFormatOnWordOrSelection(format); + + emit activeFontChanged(); +} + +QColor DocumentHandler::getActiveTextColor() const +{ + auto cursor = makeTextCursor(); + if (cursor.isNull()) { + return QColor(Qt::black); + } + QTextCharFormat format = cursor.charFormat(); + return format.foreground().color(); +} + +void DocumentHandler::setActiveTextColor(const QColor& color) +{ + QTextCharFormat format; + format.setForeground(QBrush(color)); + mergeFormatOnWordOrSelection(format); + emit activeTextColorChanged(); +} + +QTextCursor DocumentHandler::makeTextCursor() const +{ + auto doc = mDoc->textDocument(); + if (!doc) { + return QTextCursor(); + } + + QTextCursor cursor(doc); + if (mSelectionBegin != mSelectionEnd) { + cursor.setPosition(mSelectionBegin); + cursor.setPosition(mSelectionEnd, QTextCursor::KeepAnchor); + } else { + cursor.setPosition(mCursorPos); + } + return cursor; +} + +void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat& format) +{ + auto cursor = makeTextCursor(); + if (!cursor.hasSelection()) { + cursor.select(QTextCursor::WordUnderCursor); + } + cursor.mergeCharFormat(format); +} -- cgit v1.2.3-70-g09d2