/* Copyright (c) 2017 Christian Mollekopf This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #pragma once #include "kube_export.h" #include #include #include class QTextDocument; class QQuickTextDocument; class KUBE_EXPORT TextDocumentHandler : public QObject { Q_OBJECT Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged) Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged) Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged) Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged) Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY textColorChanged) Q_PROPERTY(QString fontFamily READ fontFamily WRITE setFontFamily NOTIFY fontFamilyChanged) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged) Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged) Q_PROPERTY(bool underline READ underline WRITE setUnderline NOTIFY underlineChanged) Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged) Q_PROPERTY(QString plainText READ plainText NOTIFY textChanged) Q_PROPERTY(QString htmlText READ htmlText NOTIFY textChanged) public: explicit TextDocumentHandler(QObject *parent = nullptr); QQuickTextDocument *document() const; void setDocument(QQuickTextDocument *document); QString plainText() const; QString htmlText() const; int cursorPosition() const; void setCursorPosition(int position); int selectionStart() const; void setSelectionStart(int position); int selectionEnd() const; void setSelectionEnd(int position); QString fontFamily() const; void setFontFamily(const QString &family); QColor textColor() const; void setTextColor(const QColor &color); Qt::Alignment alignment() const; void setAlignment(Qt::Alignment alignment); bool bold() const; void setBold(bool bold); bool italic() const; void setItalic(bool italic); bool underline() const; void setUnderline(bool underline); int fontSize() const; void setFontSize(int size); Q_INVOKABLE void resetFormat(); Q_SIGNALS: void documentChanged(); void cursorPositionChanged(); void selectionStartChanged(); void selectionEndChanged(); void fontFamilyChanged(); void textColorChanged(); void alignmentChanged(); void boldChanged(); void italicChanged(); void underlineChanged(); void fontSizeChanged(); void textChanged(); private Q_SLOTS: void contentsChange(int position, int charsRemoved, int charsAdded); private: void reset(); QTextCharFormat charFormat() const; QTextCursor textCursor() const; void mergeFormatOnWordOrSelection(const QTextCharFormat &format); QQuickTextDocument *mDocument; int mCursorPosition; int mSelectionStart; int mSelectionEnd; QSharedPointer mCachedTextFormat; };