1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.widgets.textedit;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.coreevent;
17 import qt.core.flags;
18 import qt.core.global;
19 import qt.core.list;
20 import qt.core.mimedata;
21 import qt.core.namespace;
22 import qt.core.point;
23 import qt.core.rect;
24 import qt.core.string;
25 import qt.core.url;
26 import qt.core.variant;
27 import qt.gui.color;
28 import qt.gui.event;
29 import qt.gui.font;
30 import qt.gui.pagedpaintdevice;
31 import qt.gui.textcursor;
32 import qt.gui.textdocument;
33 import qt.gui.textformat;
34 import qt.gui.textoption;
35 import qt.helpers;
36 import qt.widgets.abstractscrollarea;
37 import qt.widgets.widget;
38 version(QT_NO_CONTEXTMENU){}else
39     import qt.widgets.menu;
40 
41 /+ QT_REQUIRE_CONFIG(textedit); +/
42 
43 
44 extern(C++, class) struct QStyleSheet;
45 extern(C++, class) struct QTextEditPrivate;
46 
47 /// Binding for C++ class [QTextEdit](https://doc.qt.io/qt-6/qtextedit.html).
48 class /+ Q_WIDGETS_EXPORT +/ QTextEdit : QAbstractScrollArea
49 {
50     mixin(Q_OBJECT);
51     /+ Q_DECLARE_PRIVATE(QTextEdit) +/
52     /+ Q_PROPERTY(AutoFormatting autoFormatting READ autoFormatting WRITE setAutoFormatting)
53     Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
54     Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
55     Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
56     Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
57     QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
58     Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth)
59     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
60 #if QT_CONFIG(textmarkdownreader) && QT_CONFIG(textmarkdownwriter)
61     Q_PROPERTY(QString markdown READ toMarkdown WRITE setMarkdown NOTIFY textChanged)
62 #endif
63 #ifndef QT_NO_TEXTHTMLPARSER
64     Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true)
65 #endif
66     Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText DESIGNABLE false)
67     Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
68     Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance)
69     Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)
70     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
71     Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags
72                WRITE setTextInteractionFlags)
73     Q_PROPERTY(QTextDocument *document READ document WRITE setDocument DESIGNABLE false)
74     Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText) +/
75 public:
76     enum LineWrapMode {
77         NoWrap,
78         WidgetWidth,
79         FixedPixelWidth,
80         FixedColumnWidth
81     }
82     /+ Q_ENUM(LineWrapMode) +/
83 
84     enum AutoFormattingFlag {
85         AutoNone = 0,
86         AutoBulletList = 0x00000001,
87         AutoAll = 0xffffffff
88     }
89 
90     /+ Q_DECLARE_FLAGS(AutoFormatting, AutoFormattingFlag) +/
91 alias AutoFormatting = QFlags!(AutoFormattingFlag);    /+ Q_FLAG(AutoFormatting) +/
92 
93     /+ explicit +/this(QWidget parent = null);
94     /+ explicit +/this(ref const(QString) text, QWidget parent = null);
95     /+ virtual +/~this();
96 
97     final void setDocument(QTextDocument document);
98     final QTextDocument document() const;
99 
100     final void setPlaceholderText(ref const(QString) placeholderText);
101     final QString placeholderText() const;
102 
103     final void setTextCursor(ref const(QTextCursor) cursor);
104     final QTextCursor textCursor() const;
105 
106     final bool isReadOnly() const;
107     final void setReadOnly(bool ro);
108 
109     final void setTextInteractionFlags(/+ Qt:: +/qt.core.namespace.TextInteractionFlags flags);
110     final /+ Qt:: +/qt.core.namespace.TextInteractionFlags textInteractionFlags() const;
111 
112     final qreal fontPointSize() const;
113     final QString fontFamily() const;
114     final int fontWeight() const;
115     final bool fontUnderline() const;
116     final bool fontItalic() const;
117     final QColor textColor() const;
118     final QColor textBackgroundColor() const;
119     final QFont currentFont() const;
120     final /+ Qt:: +/qt.core.namespace.Alignment alignment() const;
121 
122     final void mergeCurrentCharFormat(ref const(QTextCharFormat) modifier);
123 
124     final void setCurrentCharFormat(ref const(QTextCharFormat) format);
125     final QTextCharFormat currentCharFormat() const;
126 
127     final AutoFormatting autoFormatting() const;
128     final void setAutoFormatting(AutoFormatting features);
129 
130     final bool tabChangesFocus() const;
131     final void setTabChangesFocus(bool b);
132 
133     pragma(inline, true) final void setDocumentTitle(ref const(QString) title)
134     { document().setMetaInformation(QTextDocument.MetaInformation.DocumentTitle, title); }
135     pragma(inline, true) final QString documentTitle() const
136     { return document().metaInformation(QTextDocument.MetaInformation.DocumentTitle); }
137 
138     pragma(inline, true) final bool isUndoRedoEnabled() const
139     { return document().isUndoRedoEnabled(); }
140     pragma(inline, true) final void setUndoRedoEnabled(bool enable)
141     { document().setUndoRedoEnabled(enable); }
142 
143     final LineWrapMode lineWrapMode() const;
144     final void setLineWrapMode(LineWrapMode mode);
145 
146     final int lineWrapColumnOrWidth() const;
147     final void setLineWrapColumnOrWidth(int w);
148 
149     final QTextOption.WrapMode wordWrapMode() const;
150     final void setWordWrapMode(QTextOption.WrapMode policy);
151 
152     /+ bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +/
153 /+ #if QT_CONFIG(regularexpression) +/
154     /+ bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +/
155 /+ #endif +/
156 
157     final QString toPlainText() const;
158 /+ #ifndef QT_NO_TEXTHTMLPARSER +/
159     version(QT_NO_TEXTHTMLPARSER){}else
160     {
161         final QString toHtml() const;
162     }
163 /+ #endif
164 #if QT_CONFIG(textmarkdownwriter) +/
165     final QString toMarkdown(QTextDocument.MarkdownFeatures features = QTextDocument.MarkdownFeature.MarkdownDialectGitHub) const;
166 /+ #endif +/
167 
168     final void ensureCursorVisible();
169 
170     /+ virtual +/ @QInvokable QVariant loadResource(int type, ref const(QUrl) name);
171     version(QT_NO_CONTEXTMENU){}else
172     {
173         final QMenu createStandardContextMenu();
174         final QMenu createStandardContextMenu(ref const(QPoint) position);
175     }
176 
177     final QTextCursor cursorForPosition(ref const(QPoint) pos) const;
178     final QRect cursorRect(ref const(QTextCursor) cursor) const;
179     final QRect cursorRect() const;
180 
181     final QString anchorAt(ref const(QPoint) pos) const;
182 
183     final bool overwriteMode() const;
184     final void setOverwriteMode(bool overwrite);
185 
186     final qreal tabStopDistance() const;
187     final void setTabStopDistance(qreal distance);
188 
189     final int cursorWidth() const;
190     final void setCursorWidth(int width);
191 
192     final bool acceptRichText() const;
193     final void setAcceptRichText(bool accept);
194 
195     struct ExtraSelection
196     {
197         QTextCursor cursor;
198         QTextCharFormat format;
199     }
200     final void setExtraSelections(ref const(QList!(ExtraSelection)) selections);
201     final QList!(ExtraSelection) extraSelections() const;
202 
203     final void moveCursor(QTextCursor.MoveOperation operation, QTextCursor.MoveMode mode = QTextCursor.MoveMode.MoveAnchor);
204 
205     final bool canPaste() const;
206 
207     final void print(QPagedPaintDevice printer) const;
208 
209     override QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery property) const;
210     @QInvokable final QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery query, QVariant argument) const;
211 
212 public /+ Q_SLOTS +/:
213     @QSlot final void setFontPointSize(qreal s);
214     @QSlot final void setFontFamily(ref const(QString) fontFamily);
215     @QSlot final void setFontWeight(int w);
216     @QSlot final void setFontUnderline(bool b);
217     @QSlot final void setFontItalic(bool b);
218     @QSlot final void setTextColor(ref const(QColor) c);
219     @QSlot final void setTextBackgroundColor(ref const(QColor) c);
220     @QSlot final void setCurrentFont(ref const(QFont) f);
221     @QSlot final void setAlignment(/+ Qt:: +/qt.core.namespace.Alignment a);
222 
223     @QSlot final void setPlainText(ref const(QString) text);
224 /+ #ifndef QT_NO_TEXTHTMLPARSER +/
225     version(QT_NO_TEXTHTMLPARSER){}else
226     {
227         @QSlot final void setHtml(ref const(QString) text);
228     }
229 /+ #endif
230 #if QT_CONFIG(textmarkdownreader) +/
231     @QSlot final void setMarkdown(ref const(QString) markdown);
232 /+ #endif +/
233     @QSlot final void setText(ref const(QString) text);
234 
235     version(QT_NO_CLIPBOARD){}else
236     {
237         @QSlot final void cut();
238         /+ void copy(); +/
239         @QSlot final void paste();
240     }
241 
242     @QSlot final void undo();
243     @QSlot final void redo();
244 
245     @QSlot final void clear();
246     @QSlot final void selectAll();
247 
248     @QSlot final void insertPlainText(ref const(QString) text);
249     version(QT_NO_TEXTHTMLPARSER){}else
250     {
251         @QSlot final void insertHtml(ref const(QString) text);
252     }
253 
254     @QSlot final void append(ref const(QString) text);
255 
256     @QSlot final void scrollToAnchor(ref const(QString) name);
257 
258     @QSlot final void zoomIn(int range = 1);
259     @QSlot final void zoomOut(int range = 1);
260 
261 /+ Q_SIGNALS +/public:
262     @QSignal final void textChanged();
263     @QSignal final void undoAvailable(bool b);
264     @QSignal final void redoAvailable(bool b);
265     @QSignal final void currentCharFormatChanged(ref const(QTextCharFormat) format);
266     @QSignal final void copyAvailable(bool b);
267     @QSignal final void selectionChanged();
268     @QSignal final void cursorPositionChanged();
269 
270 protected:
271     /+ virtual +/ override bool event(QEvent e);
272     /+ virtual +/ override void timerEvent(QTimerEvent e);
273     /+ virtual +/ override void keyPressEvent(QKeyEvent e);
274     /+ virtual +/ override void keyReleaseEvent(QKeyEvent e);
275     /+ virtual +/ override void resizeEvent(QResizeEvent e);
276     /+ virtual +/ override void paintEvent(QPaintEvent e);
277     /+ virtual +/ override void mousePressEvent(QMouseEvent e);
278     /+ virtual +/ override void mouseMoveEvent(QMouseEvent e);
279     /+ virtual +/ override void mouseReleaseEvent(QMouseEvent e);
280     /+ virtual +/ override void mouseDoubleClickEvent(QMouseEvent e);
281     /+ virtual +/ override bool focusNextPrevChild(bool next);
282 /+ #ifndef QT_NO_CONTEXTMENU +/
283     version(QT_NO_CONTEXTMENU){}else
284     {
285         /+ virtual +/ override void contextMenuEvent(QContextMenuEvent e);
286     }
287 /+ #endif
288 #if QT_CONFIG(draganddrop) +/
289     /+ virtual +/ override void dragEnterEvent(QDragEnterEvent e);
290     /+ virtual +/ override void dragLeaveEvent(QDragLeaveEvent e);
291     /+ virtual +/ override void dragMoveEvent(QDragMoveEvent e);
292     /+ virtual +/ override void dropEvent(QDropEvent e);
293 /+ #endif +/
294     /+ virtual +/ override void focusInEvent(QFocusEvent e);
295     /+ virtual +/ override void focusOutEvent(QFocusEvent e);
296     /+ virtual +/ override void showEvent(QShowEvent );
297     /+ virtual +/ override void changeEvent(QEvent e);
298 /+ #if QT_CONFIG(wheelevent) +/
299     /+ virtual +/ override void wheelEvent(QWheelEvent e);
300 /+ #endif +/
301 
302     /+ virtual +/ QMimeData createMimeDataFromSelection() const;
303     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
304     /+ virtual +/ bool canInsertFromMimeData(const(QMimeData) source) const;
305     }));
306     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
307     /+ virtual +/ void insertFromMimeData(const(QMimeData) source);
308     }));
309 
310     /+ virtual +/ override void inputMethodEvent(QInputMethodEvent );
311 
312     this(ref QTextEditPrivate dd, QWidget parent);
313 
314     /+ virtual +/ override void scrollContentsBy(int dx, int dy);
315     /+ virtual +/ void doSetTextCursor(ref const(QTextCursor) cursor);
316 
317     final void zoomInF(float range);
318 
319 private:
320     /+ Q_DISABLE_COPY(QTextEdit) +/
321     /+ Q_PRIVATE_SLOT(d_func(), void _q_repaintContents(const QRectF &r))
322     Q_PRIVATE_SLOT(d_func(), void _q_currentCharFormatChanged(const QTextCharFormat &))
323     Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
324     Q_PRIVATE_SLOT(d_func(), void _q_ensureVisible(const QRectF &))
325     Q_PRIVATE_SLOT(d_func(), void _q_cursorPositionChanged())
326 #if QT_CONFIG(cursor)
327     Q_PRIVATE_SLOT(d_func(), void _q_hoveredBlockWithMarkerChanged(const QTextBlock &))
328 #endif +/
329     /+ friend class QTextEditControl; +/
330     /+ friend class QTextDocument; +/
331     /+ friend class QWidgetTextControl; +/
332     mixin(CREATE_CONVENIENCE_WRAPPERS);
333 }
334 /+pragma(inline, true) QFlags!(QTextEdit.AutoFormatting.enum_type) operator |(QTextEdit.AutoFormatting.enum_type f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/{return QFlags!(QTextEdit.AutoFormatting.enum_type)(f1)|f2;}+/
335 /+pragma(inline, true) QFlags!(QTextEdit.AutoFormatting.enum_type) operator |(QTextEdit.AutoFormatting.enum_type f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/{return f2|f1;}+/
336 /+pragma(inline, true) QFlags!(QTextEdit.AutoFormatting.enum_type) operator &(QTextEdit.AutoFormatting.enum_type f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/{return QFlags!(QTextEdit.AutoFormatting.enum_type)(f1)&f2;}+/
337 /+pragma(inline, true) QFlags!(QTextEdit.AutoFormatting.enum_type) operator &(QTextEdit.AutoFormatting.enum_type f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/{return f2&f1;}+/
338 /+pragma(inline, true) void operator +(QTextEdit.AutoFormatting.enum_type f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/;+/
339 /+pragma(inline, true) void operator +(QTextEdit.AutoFormatting.enum_type f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/;+/
340 /+pragma(inline, true) void operator +(int f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/;+/
341 /+pragma(inline, true) void operator -(QTextEdit.AutoFormatting.enum_type f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/;+/
342 /+pragma(inline, true) void operator -(QTextEdit.AutoFormatting.enum_type f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/;+/
343 /+pragma(inline, true) void operator -(int f1, QFlags!(QTextEdit.AutoFormatting.enum_type) f2)/+noexcept+/;+/
344 /+pragma(inline, true) QIncompatibleFlag operator |(QTextEdit.AutoFormatting.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
345 /+pragma(inline, true) void operator +(int f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/;+/
346 /+pragma(inline, true) void operator +(QTextEdit.AutoFormatting.enum_type f1, int f2)/+noexcept+/;+/
347 /+pragma(inline, true) void operator -(int f1, QTextEdit.AutoFormatting.enum_type f2)/+noexcept+/;+/
348 /+pragma(inline, true) void operator -(QTextEdit.AutoFormatting.enum_type f1, int f2)/+noexcept+/;+/
349 
350 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QTextEdit::AutoFormatting) +/