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) +/