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.plaintextedit;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.coreevent;
17 import qt.core.global;
18 import qt.core.list;
19 import qt.core.mimedata;
20 import qt.core.namespace;
21 import qt.core.point;
22 import qt.core.rect;
23 import qt.core.size;
24 import qt.core.string;
25 import qt.core.url;
26 import qt.core.variant;
27 import qt.gui.abstracttextdocumentlayout;
28 import qt.gui.event;
29 import qt.gui.pagedpaintdevice;
30 import qt.gui.painter;
31 import qt.gui.textcursor;
32 import qt.gui.textdocument;
33 import qt.gui.textformat;
34 import qt.gui.textobject;
35 import qt.gui.textoption;
36 import qt.helpers;
37 import qt.widgets.abstractscrollarea;
38 import qt.widgets.textedit;
39 import qt.widgets.widget;
40 version(QT_NO_CONTEXTMENU){}else
41     import qt.widgets.menu;
42 
43 /+ QT_REQUIRE_CONFIG(textedit); +/
44 
45 
46 extern(C++, class) struct QPlainTextEditPrivate;
47 
48 /// Binding for C++ class [QPlainTextEdit](https://doc.qt.io/qt-6/qplaintextedit.html).
49 class /+ Q_WIDGETS_EXPORT +/ QPlainTextEdit : QAbstractScrollArea
50 {
51     mixin(Q_OBJECT);
52     /+ Q_DECLARE_PRIVATE(QPlainTextEdit) +/
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(bool readOnly READ isReadOnly WRITE setReadOnly)
59     Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true)
60     Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
61     Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance)
62     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
63     Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags
64                WRITE setTextInteractionFlags)
65     Q_PROPERTY(int blockCount READ blockCount)
66     Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
67     Q_PROPERTY(bool backgroundVisible READ backgroundVisible WRITE setBackgroundVisible)
68     Q_PROPERTY(bool centerOnScroll READ centerOnScroll WRITE setCenterOnScroll)
69     Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText) +/
70 public:
71     enum LineWrapMode {
72         NoWrap,
73         WidgetWidth
74     }
75     /+ Q_ENUM(LineWrapMode) +/
76 
77     /+ explicit +/this(QWidget parent = null);
78     /+ explicit +/this(ref const(QString) text, QWidget parent = null);
79     /+ virtual +/~this();
80 
81     final void setDocument(QTextDocument document);
82     final QTextDocument document() const;
83 
84     final void setPlaceholderText(ref const(QString) placeholderText);
85     final QString placeholderText() const;
86 
87     final void setTextCursor(ref const(QTextCursor) cursor);
88     final QTextCursor textCursor() const;
89 
90     final bool isReadOnly() const;
91     final void setReadOnly(bool ro);
92 
93     final void setTextInteractionFlags(/+ Qt:: +/qt.core.namespace.TextInteractionFlags flags);
94     final /+ Qt:: +/qt.core.namespace.TextInteractionFlags textInteractionFlags() const;
95 
96     final void mergeCurrentCharFormat(ref const(QTextCharFormat) modifier);
97     final void setCurrentCharFormat(ref const(QTextCharFormat) format);
98     final QTextCharFormat currentCharFormat() const;
99 
100     final bool tabChangesFocus() const;
101     final void setTabChangesFocus(bool b);
102 
103     pragma(inline, true) final void setDocumentTitle(ref const(QString) title)
104     { document().setMetaInformation(QTextDocument.MetaInformation.DocumentTitle, title); }
105     pragma(inline, true) final QString documentTitle() const
106     { return document().metaInformation(QTextDocument.MetaInformation.DocumentTitle); }
107 
108     pragma(inline, true) final bool isUndoRedoEnabled() const
109     { return document().isUndoRedoEnabled(); }
110     pragma(inline, true) final void setUndoRedoEnabled(bool enable)
111     { document().setUndoRedoEnabled(enable); }
112 
113     pragma(inline, true) final void setMaximumBlockCount(int maximum)
114     { document().setMaximumBlockCount(maximum); }
115     pragma(inline, true) final int maximumBlockCount() const
116     { return document().maximumBlockCount(); }
117 
118 
119     final LineWrapMode lineWrapMode() const;
120     final void setLineWrapMode(LineWrapMode mode);
121 
122     final QTextOption.WrapMode wordWrapMode() const;
123     final void setWordWrapMode(QTextOption.WrapMode policy);
124 
125     final void setBackgroundVisible(bool visible);
126     final bool backgroundVisible() const;
127 
128     final void setCenterOnScroll(bool enabled);
129     final bool centerOnScroll() const;
130 
131     /+ bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +/
132 /+ #if QT_CONFIG(regularexpression) +/
133     /+ bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +/
134 /+ #endif +/
135 
136     pragma(inline, true) final QString toPlainText() const
137     { return document().toPlainText(); }
138 
139     final void ensureCursorVisible();
140 
141     /+ virtual +/ QVariant loadResource(int type, ref const(QUrl) name);
142     version(QT_NO_CONTEXTMENU){}else
143     {
144         final QMenu createStandardContextMenu();
145         final QMenu createStandardContextMenu(ref const(QPoint) position);
146     }
147 
148     final QTextCursor cursorForPosition(ref const(QPoint) pos) const;
149     final QRect cursorRect(ref const(QTextCursor) cursor) const;
150     final QRect cursorRect() const;
151 
152     final QString anchorAt(ref const(QPoint) pos) const;
153 
154     final bool overwriteMode() const;
155     final void setOverwriteMode(bool overwrite);
156 
157     final qreal tabStopDistance() const;
158     final void setTabStopDistance(qreal distance);
159 
160     final int cursorWidth() const;
161     final void setCursorWidth(int width);
162 
163     final void setExtraSelections(ref const(QList!(QTextEdit.ExtraSelection)) selections);
164     final QList!(QTextEdit.ExtraSelection) extraSelections() const;
165 
166     final void moveCursor(QTextCursor.MoveOperation operation, QTextCursor.MoveMode mode = QTextCursor.MoveMode.MoveAnchor);
167 
168     final bool canPaste() const;
169 
170     final void print(QPagedPaintDevice printer) const;
171 
172     final int blockCount() const;
173     override QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery property) const;
174     @QInvokable final QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery query, QVariant argument) const;
175 
176 public /+ Q_SLOTS +/:
177 
178     @QSlot final void setPlainText(ref const(QString) text);
179 
180     version(QT_NO_CLIPBOARD){}else
181     {
182         @QSlot final void cut();
183         /+ void copy(); +/
184         @QSlot final void paste();
185     }
186 
187     @QSlot final void undo();
188     @QSlot final void redo();
189 
190     @QSlot final void clear();
191     @QSlot final void selectAll();
192 
193     @QSlot final void insertPlainText(ref const(QString) text);
194 
195     @QSlot final void appendPlainText(ref const(QString) text);
196     @QSlot final void appendHtml(ref const(QString) html);
197 
198     @QSlot final void centerCursor();
199 
200     @QSlot final void zoomIn(int range = 1);
201     @QSlot final void zoomOut(int range = 1);
202 
203 /+ Q_SIGNALS +/public:
204     @QSignal final void textChanged();
205     @QSignal final void undoAvailable(bool b);
206     @QSignal final void redoAvailable(bool b);
207     @QSignal final void copyAvailable(bool b);
208     @QSignal final void selectionChanged();
209     @QSignal final void cursorPositionChanged();
210 
211     @QSignal final void updateRequest(ref const(QRect) rect, int dy);
212     @QSignal final void blockCountChanged(int newBlockCount);
213     @QSignal final void modificationChanged(bool);
214 
215 protected:
216     /+ virtual +/ override bool event(QEvent e);
217     /+ virtual +/ override void timerEvent(QTimerEvent e);
218     /+ virtual +/ override void keyPressEvent(QKeyEvent e);
219     /+ virtual +/ override void keyReleaseEvent(QKeyEvent e);
220     /+ virtual +/ override void resizeEvent(QResizeEvent e);
221     /+ virtual +/ override void paintEvent(QPaintEvent e);
222     /+ virtual +/ override void mousePressEvent(QMouseEvent e);
223     /+ virtual +/ override void mouseMoveEvent(QMouseEvent e);
224     /+ virtual +/ override void mouseReleaseEvent(QMouseEvent e);
225     /+ virtual +/ override void mouseDoubleClickEvent(QMouseEvent e);
226     /+ virtual +/ override bool focusNextPrevChild(bool next);
227 /+ #ifndef QT_NO_CONTEXTMENU +/
228     version(QT_NO_CONTEXTMENU){}else
229     {
230         /+ virtual +/ override void contextMenuEvent(QContextMenuEvent e);
231     }
232 /+ #endif
233 #if QT_CONFIG(draganddrop) +/
234     /+ virtual +/ override void dragEnterEvent(QDragEnterEvent e);
235     /+ virtual +/ override void dragLeaveEvent(QDragLeaveEvent e);
236     /+ virtual +/ override void dragMoveEvent(QDragMoveEvent e);
237     /+ virtual +/ override void dropEvent(QDropEvent e);
238 /+ #endif +/
239     /+ virtual +/ override void focusInEvent(QFocusEvent e);
240     /+ virtual +/ override void focusOutEvent(QFocusEvent e);
241     /+ virtual +/ override void showEvent(QShowEvent );
242     /+ virtual +/ override void changeEvent(QEvent e);
243 /+ #if QT_CONFIG(wheelevent) +/
244     /+ virtual +/ override void wheelEvent(QWheelEvent e);
245 /+ #endif +/
246 
247     /+ virtual +/ QMimeData createMimeDataFromSelection() const;
248     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
249     /+ virtual +/ bool canInsertFromMimeData(const(QMimeData) source) const;
250     }));
251     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
252     /+ virtual +/ void insertFromMimeData(const(QMimeData) source);
253     }));
254 
255     /+ virtual +/ override void inputMethodEvent(QInputMethodEvent );
256 
257     this(ref QPlainTextEditPrivate dd, QWidget parent);
258 
259     /+ virtual +/ override void scrollContentsBy(int dx, int dy);
260     /+ virtual +/ void doSetTextCursor(ref const(QTextCursor) cursor);
261 
262     final QTextBlock firstVisibleBlock() const;
263     final QPointF contentOffset() const;
264     final QRectF blockBoundingRect(ref const(QTextBlock) block) const;
265     final QRectF blockBoundingGeometry(ref const(QTextBlock) block) const;
266     final QAbstractTextDocumentLayout.PaintContext getPaintContext() const;
267 
268     final void zoomInF(float range);
269 
270 private:
271     /+ Q_DISABLE_COPY(QPlainTextEdit) +/
272     /+ Q_PRIVATE_SLOT(d_func(), void _q_repaintContents(const QRectF &r))
273     Q_PRIVATE_SLOT(d_func(), void _q_textChanged())
274     Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
275     Q_PRIVATE_SLOT(d_func(), void _q_verticalScrollbarActionTriggered(int))
276     Q_PRIVATE_SLOT(d_func(), void _q_cursorPositionChanged()) +/
277 
278     /+ friend class QPlainTextEditControl; +/
279     mixin(CREATE_CONVENIENCE_WRAPPERS);
280 }
281 
282 
283 extern(C++, class) struct QPlainTextDocumentLayoutPrivate;
284 /// Binding for C++ class [QPlainTextDocumentLayout](https://doc.qt.io/qt-6/qplaintextdocumentlayout.html).
285 class /+ Q_WIDGETS_EXPORT +/ QPlainTextDocumentLayout : QAbstractTextDocumentLayout
286 {
287     mixin(Q_OBJECT);
288     /+ Q_DECLARE_PRIVATE(QPlainTextDocumentLayout) +/
289     /+ Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth) +/
290 
291 public:
292     this(QTextDocument document);
293     ~this();
294 
295     override void draw(QPainter* , ref const(PaintContext) );
296     override int hitTest(ref const(QPointF) , /+ Qt:: +/qt.core.namespace.HitTestAccuracy ) const;
297 
298     override int pageCount() const;
299     override QSizeF documentSize() const;
300 
301     override QRectF frameBoundingRect(QTextFrame ) const;
302     override QRectF blockBoundingRect(ref const(QTextBlock) block) const;
303 
304     final void ensureBlockLayout(ref const(QTextBlock) block) const;
305 
306     final void setCursorWidth(int width);
307     final int cursorWidth() const;
308 
309     final void requestUpdate();
310 
311 protected:
312     override void documentChanged(int from, int /*charsRemoved*/, int charsAdded);
313 
314 
315 private:
316     final void setTextWidth(qreal newWidth);
317     final qreal textWidth() const;
318     final void layoutBlock(ref const(QTextBlock) block);
319     final qreal blockWidth(ref const(QTextBlock) block);
320 
321     final QPlainTextDocumentLayoutPrivate* priv() const;
322 
323     /+ friend class QPlainTextEdit; +/
324     /+ friend class QPlainTextEditPrivate; +/
325     mixin(CREATE_CONVENIENCE_WRAPPERS);
326 }
327