1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTEXTEDIT_H
5#define QTEXTEDIT_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtWidgets/qabstractscrollarea.h>
9#include <QtGui/qtextdocument.h>
10#include <QtGui/qtextoption.h>
11#include <QtGui/qtextcursor.h>
12#include <QtGui/qtextformat.h>
13
14QT_REQUIRE_CONFIG(textedit);
15
16class tst_QTextEdit;
17
18QT_BEGIN_NAMESPACE
19
20class QStyleSheet;
21class QTextDocument;
22class QMenu;
23class QTextEditPrivate;
24class QMimeData;
25class QPagedPaintDevice;
26class QRegularExpression;
27
28class Q_WIDGETS_EXPORT QTextEdit : public QAbstractScrollArea
29{
30 Q_OBJECT
31 Q_DECLARE_PRIVATE(QTextEdit)
32 Q_PROPERTY(AutoFormatting autoFormatting READ autoFormatting WRITE setAutoFormatting)
33 Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
34 Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
35 Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
36 Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
37 QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
38 Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth)
39 Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
40#if QT_CONFIG(textmarkdownreader) && QT_CONFIG(textmarkdownwriter)
41 Q_PROPERTY(QString markdown READ toMarkdown WRITE setMarkdown NOTIFY textChanged)
42#endif
43#ifndef QT_NO_TEXTHTMLPARSER
44 Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true)
45#endif
46 Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText DESIGNABLE false)
47 Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
48 Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance)
49 Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)
50 Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
51 Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags
52 WRITE setTextInteractionFlags)
53 Q_PROPERTY(QTextDocument *document READ document WRITE setDocument DESIGNABLE false)
54 Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
55public:
56 enum LineWrapMode {
57 NoWrap,
58 WidgetWidth,
59 FixedPixelWidth,
60 FixedColumnWidth
61 };
62 Q_ENUM(LineWrapMode)
63
64 enum AutoFormattingFlag {
65 AutoNone = 0,
66 AutoBulletList = 0x00000001,
67 AutoAll = 0xffffffff
68 };
69
70 Q_DECLARE_FLAGS(AutoFormatting, AutoFormattingFlag)
71 Q_FLAG(AutoFormatting)
72
73 explicit QTextEdit(QWidget *parent = nullptr);
74 explicit QTextEdit(const QString &text, QWidget *parent = nullptr);
75 virtual ~QTextEdit();
76
77 void setDocument(QTextDocument *document);
78 QTextDocument *document() const;
79
80 void setPlaceholderText(const QString &placeholderText);
81 QString placeholderText() const;
82
83 void setTextCursor(const QTextCursor &cursor);
84 QTextCursor textCursor() const;
85
86 bool isReadOnly() const;
87 void setReadOnly(bool ro);
88
89 void setTextInteractionFlags(Qt::TextInteractionFlags flags);
90 Qt::TextInteractionFlags textInteractionFlags() const;
91
92 qreal fontPointSize() const;
93 QString fontFamily() const;
94 int fontWeight() const;
95 bool fontUnderline() const;
96 bool fontItalic() const;
97 QColor textColor() const;
98 QColor textBackgroundColor() const;
99 QFont currentFont() const;
100 Qt::Alignment alignment() const;
101
102 void mergeCurrentCharFormat(const QTextCharFormat &modifier);
103
104 void setCurrentCharFormat(const QTextCharFormat &format);
105 QTextCharFormat currentCharFormat() const;
106
107 AutoFormatting autoFormatting() const;
108 void setAutoFormatting(AutoFormatting features);
109
110 bool tabChangesFocus() const;
111 void setTabChangesFocus(bool b);
112
113 inline void setDocumentTitle(const QString &title)
114 { document()->setMetaInformation(info: QTextDocument::DocumentTitle, title); }
115 inline QString documentTitle() const
116 { return document()->metaInformation(info: QTextDocument::DocumentTitle); }
117
118 inline bool isUndoRedoEnabled() const
119 { return document()->isUndoRedoEnabled(); }
120 inline void setUndoRedoEnabled(bool enable)
121 { document()->setUndoRedoEnabled(enable); }
122
123 LineWrapMode lineWrapMode() const;
124 void setLineWrapMode(LineWrapMode mode);
125
126 int lineWrapColumnOrWidth() const;
127 void setLineWrapColumnOrWidth(int w);
128
129 QTextOption::WrapMode wordWrapMode() const;
130 void setWordWrapMode(QTextOption::WrapMode policy);
131
132 bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
133#if QT_CONFIG(regularexpression)
134 bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
135#endif
136
137 QString toPlainText() const;
138#ifndef QT_NO_TEXTHTMLPARSER
139 QString toHtml() const;
140#endif
141#if QT_CONFIG(textmarkdownwriter)
142 QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const;
143#endif
144
145 void ensureCursorVisible();
146
147 Q_INVOKABLE virtual QVariant loadResource(int type, const QUrl &name);
148#ifndef QT_NO_CONTEXTMENU
149 QMenu *createStandardContextMenu();
150 QMenu *createStandardContextMenu(const QPoint &position);
151#endif
152
153 QTextCursor cursorForPosition(const QPoint &pos) const;
154 QRect cursorRect(const QTextCursor &cursor) const;
155 QRect cursorRect() const;
156
157 QString anchorAt(const QPoint& pos) const;
158
159 bool overwriteMode() const;
160 void setOverwriteMode(bool overwrite);
161
162 qreal tabStopDistance() const;
163 void setTabStopDistance(qreal distance);
164
165 int cursorWidth() const;
166 void setCursorWidth(int width);
167
168 bool acceptRichText() const;
169 void setAcceptRichText(bool accept);
170
171 struct ExtraSelection
172 {
173 QTextCursor cursor;
174 QTextCharFormat format;
175 };
176 void setExtraSelections(const QList<ExtraSelection> &selections);
177 QList<ExtraSelection> extraSelections() const;
178
179 void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
180
181 bool canPaste() const;
182
183 void print(QPagedPaintDevice *printer) const;
184
185 QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
186 Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
187
188public Q_SLOTS:
189 void setFontPointSize(qreal s);
190 void setFontFamily(const QString &fontFamily);
191 void setFontWeight(int w);
192 void setFontUnderline(bool b);
193 void setFontItalic(bool b);
194 void setTextColor(const QColor &c);
195 void setTextBackgroundColor(const QColor &c);
196 void setCurrentFont(const QFont &f);
197 void setAlignment(Qt::Alignment a);
198
199 void setPlainText(const QString &text);
200#ifndef QT_NO_TEXTHTMLPARSER
201 void setHtml(const QString &text);
202#endif
203#if QT_CONFIG(textmarkdownreader)
204 void setMarkdown(const QString &markdown);
205#endif
206 void setText(const QString &text);
207
208#ifndef QT_NO_CLIPBOARD
209 void cut();
210 void copy();
211 void paste();
212#endif
213
214 void undo();
215 void redo();
216
217 void clear();
218 void selectAll();
219
220 void insertPlainText(const QString &text);
221#ifndef QT_NO_TEXTHTMLPARSER
222 void insertHtml(const QString &text);
223#endif // QT_NO_TEXTHTMLPARSER
224
225 void append(const QString &text);
226
227 void scrollToAnchor(const QString &name);
228
229 void zoomIn(int range = 1);
230 void zoomOut(int range = 1);
231
232Q_SIGNALS:
233 void textChanged();
234 void undoAvailable(bool b);
235 void redoAvailable(bool b);
236 void currentCharFormatChanged(const QTextCharFormat &format);
237 void copyAvailable(bool b);
238 void selectionChanged();
239 void cursorPositionChanged();
240
241protected:
242 virtual bool event(QEvent *e) override;
243 virtual void timerEvent(QTimerEvent *e) override;
244 virtual void keyPressEvent(QKeyEvent *e) override;
245 virtual void keyReleaseEvent(QKeyEvent *e) override;
246 virtual void resizeEvent(QResizeEvent *e) override;
247 virtual void paintEvent(QPaintEvent *e) override;
248 virtual void mousePressEvent(QMouseEvent *e) override;
249 virtual void mouseMoveEvent(QMouseEvent *e) override;
250 virtual void mouseReleaseEvent(QMouseEvent *e) override;
251 virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
252 virtual bool focusNextPrevChild(bool next) override;
253#ifndef QT_NO_CONTEXTMENU
254 virtual void contextMenuEvent(QContextMenuEvent *e) override;
255#endif
256#if QT_CONFIG(draganddrop)
257 virtual void dragEnterEvent(QDragEnterEvent *e) override;
258 virtual void dragLeaveEvent(QDragLeaveEvent *e) override;
259 virtual void dragMoveEvent(QDragMoveEvent *e) override;
260 virtual void dropEvent(QDropEvent *e) override;
261#endif
262 virtual void focusInEvent(QFocusEvent *e) override;
263 virtual void focusOutEvent(QFocusEvent *e) override;
264 virtual void showEvent(QShowEvent *) override;
265 virtual void changeEvent(QEvent *e) override;
266#if QT_CONFIG(wheelevent)
267 virtual void wheelEvent(QWheelEvent *e) override;
268#endif
269
270 virtual QMimeData *createMimeDataFromSelection() const;
271 virtual bool canInsertFromMimeData(const QMimeData *source) const;
272 virtual void insertFromMimeData(const QMimeData *source);
273
274 virtual void inputMethodEvent(QInputMethodEvent *) override;
275
276 QTextEdit(QTextEditPrivate &dd, QWidget *parent);
277
278 virtual void scrollContentsBy(int dx, int dy) override;
279 virtual void doSetTextCursor(const QTextCursor &cursor);
280
281 void zoomInF(float range);
282
283private:
284 Q_DISABLE_COPY(QTextEdit)
285 friend class QTextEditControl;
286 friend class QTextDocument;
287 friend class QWidgetTextControl;
288 friend class ::tst_QTextEdit;
289};
290
291Q_DECLARE_OPERATORS_FOR_FLAGS(QTextEdit::AutoFormatting)
292
293QT_END_NAMESPACE
294
295#endif // QTEXTEDIT_H
296

source code of qtbase/src/widgets/widgets/qtextedit.h