CuteLogger
Fast and simple logging solution for Qt based applications
qmlrichtext.h
1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Copyright (c) 2020-2026 Meltytech, LLC
5**
6** Redistribution and use in source and binary forms, with or without
7** modification, are permitted provided that the following conditions are
8** met:
9** * Redistributions of source code must retain the above copyright
10** notice, this list of conditions and the following disclaimer.
11** * Redistributions in binary form must reproduce the above copyright
12** notice, this list of conditions and the following disclaimer in
13** the documentation and/or other materials provided with the
14** distribution.
15** * Neither the name of The Qt Company Ltd nor the names of its
16** contributors may be used to endorse or promote products derived
17** from this software without specific prior written permission.
18**
19**
20** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31**
32****************************************************************************/
33
34#ifndef QMLRICHTEXT_H
35#define QMLRICHTEXT_H
36
37#include <QQuickTextDocument>
38#include <QtGui/QTextCharFormat>
39#include <qqmlfile.h>
40
41QT_BEGIN_NAMESPACE
42class QTextDocument;
43QT_END_NAMESPACE
44
45class QmlRichText : public QObject
46{
47 Q_OBJECT
48
49 Q_ENUMS(HAlignment)
50
51 Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged)
52 Q_PROPERTY(
53 int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
54 Q_PROPERTY(
55 int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged)
56 Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged)
57 Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY textColorChanged)
58 Q_PROPERTY(QString fontFamily READ fontFamily WRITE setFontFamily NOTIFY fontFamilyChanged)
59 Q_PROPERTY(
60 QString fontStyleName READ fontStyleName WRITE setFontStyleName NOTIFY fontStyleNameChanged)
61 Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
62 Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged)
63 Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged)
64 Q_PROPERTY(bool underline READ underline WRITE setUnderline NOTIFY underlineChanged)
65 Q_PROPERTY(bool strikeout READ strikeout WRITE setStrikeout NOTIFY strikeoutChanged)
66 Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
67 Q_PROPERTY(QUrl fileUrl READ fileUrl WRITE setFileUrl NOTIFY fileUrlChanged)
68 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
69 Q_PROPERTY(QSizeF size READ size NOTIFY sizeChanged)
70
71public:
72 QmlRichText();
73
74 QQuickItem *target() { return m_target; }
75 void setTarget(QQuickItem *target);
76 void setCursorPosition(int position);
77 void setSelectionStart(int position);
78 void setSelectionEnd(int position);
79 int cursorPosition() const { return m_cursorPosition; }
80 int selectionStart() const { return m_selectionStart; }
81 int selectionEnd() const { return m_selectionEnd; }
82 QString fontFamily() const;
83 QString fontStyleName() const;
84 QColor textColor() const;
85 Qt::Alignment alignment() const;
86 void setAlignment(Qt::Alignment a);
87 bool bold() const;
88 bool italic() const;
89 bool underline() const;
90 bool strikeout() const;
91 int fontSize() const;
92 QUrl fileUrl() const;
93 QString text() const;
94 QSizeF size() const { return m_doc->size(); }
95
96public slots:
97 void setBold(bool arg);
98 void setItalic(bool arg);
99 void setUnderline(bool arg);
100 void setStrikeout(bool arg);
101 void setFontSize(int arg);
102 void setTextColor(const QColor &arg);
103 void setFontFamily(const QString &arg);
104 void setFontStyleName(const QString &arg);
105 void setFileUrl(const QUrl &arg);
106 void setText(const QString &arg);
107 void saveAs(const QUrl &arg, QString fileType = QString());
108 void insertTable(int rows = 1, int columns = 2, int border = 0);
109 void indentLess();
110 void indentMore();
111 void pastePlain();
112 void reset();
113
114signals:
115 void targetChanged();
116 void cursorPositionChanged();
117 void selectionStartChanged();
118 void selectionEndChanged();
119 void fontFamilyChanged();
120 void fontStyleNameChanged();
121 void textColorChanged();
122 void alignmentChanged();
123 void boldChanged();
124 void italicChanged();
125 void underlineChanged();
126 void fontSizeChanged();
127 void strikeoutChanged();
128 void fileUrlChanged();
129 void textChanged();
130 void error(QString message);
131 void sizeChanged();
132
133private:
134 QTextCursor textCursor() const;
135 void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
136 QQuickItem *m_target;
137 QTextDocument *m_doc;
138 int m_cursorPosition;
139 int m_selectionStart;
140 int m_selectionEnd;
141 QFont m_font;
142 int m_fontSize;
143 QUrl m_fileUrl;
144 QString m_text;
145 QString m_documentTitle;
146};
147
148#endif // QMLRICHTEXT_H