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.gui.textdocument;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.flags;
17 import qt.core.global;
18 import qt.core.list;
19 import qt.core.namespace;
20 import qt.core.object;
21 import qt.core.qchar;
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.font;
29 import qt.gui.painter;
30 import qt.gui.textcursor;
31 import qt.gui.textformat;
32 import qt.gui.textobject;
33 import qt.gui.textoption;
34 import qt.helpers;
35 version(QT_NO_PRINTER){}else
36     import qt.gui.pagedpaintdevice;
37 
38 extern(C++, class) struct QTextDocumentPrivate;
39 /+ Q_MOC_INCLUDE(<QtGui/qtextcursor.h>) +/
40 
41 
42 
43 extern(C++, class) struct QTextFormatCollection;
44 
45 extern(C++, "Qt")
46 {
47     /+ Q_GUI_EXPORT +/ bool mightBeRichText(ref const(QString));
48     /+ Q_GUI_EXPORT +/ QString convertFromPlainText(ref const(QString) plain, qt.core.namespace.WhiteSpaceMode mode = qt.core.namespace.WhiteSpaceMode.WhiteSpacePre);
49 }
50 
51 abstract class /+ Q_GUI_EXPORT +/ QAbstractUndoItem
52 {
53 public:
54     /+ virtual +//*abstract*/ ~this(){}
55     /+ virtual +/ abstract void undo();
56     /+ virtual +/ abstract void redo();
57     mixin(CREATE_CONVENIENCE_WRAPPERS);
58 }
59 
60 
61 /// Binding for C++ class [QTextDocument](https://doc.qt.io/qt-6/qtextdocument.html).
62 class /+ Q_GUI_EXPORT +/ QTextDocument : QObject
63 {
64     mixin(Q_OBJECT);
65 
66     /+ Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
67     Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
68     Q_PROPERTY(QSizeF pageSize READ pageSize WRITE setPageSize)
69     Q_PROPERTY(QFont defaultFont READ defaultFont WRITE setDefaultFont)
70     Q_PROPERTY(bool useDesignMetrics READ useDesignMetrics WRITE setUseDesignMetrics)
71     Q_PROPERTY(QSizeF size READ size)
72     Q_PROPERTY(qreal textWidth READ textWidth WRITE setTextWidth)
73     Q_PROPERTY(int blockCount READ blockCount)
74     Q_PROPERTY(qreal indentWidth READ indentWidth WRITE setIndentWidth)
75 #ifndef QT_NO_CSSPARSER
76     Q_PROPERTY(QString defaultStyleSheet READ defaultStyleSheet WRITE setDefaultStyleSheet)
77 #endif
78     Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
79     Q_PROPERTY(qreal documentMargin READ documentMargin WRITE setDocumentMargin)
80     QDOC_PROPERTY(QTextOption defaultTextOption READ defaultTextOption WRITE setDefaultTextOption)
81     Q_PROPERTY(QUrl baseUrl READ baseUrl WRITE setBaseUrl NOTIFY baseUrlChanged) +/
82 
83 public:
84     /+ explicit +/this(QObject parent = null);
85     /+ explicit +/this(ref const(QString) text, QObject parent = null);
86     ~this();
87 
88     final QTextDocument clone(QObject parent = null) const;
89 
90     final bool isEmpty() const;
91     /+ virtual +/ void clear();
92 
93     final void setUndoRedoEnabled(bool enable);
94     final bool isUndoRedoEnabled() const;
95 
96     final bool isUndoAvailable() const;
97     final bool isRedoAvailable() const;
98 
99     final int availableUndoSteps() const;
100     final int availableRedoSteps() const;
101 
102     final int revision() const;
103 
104     final void setDocumentLayout(QAbstractTextDocumentLayout layout);
105     final QAbstractTextDocumentLayout documentLayout() const;
106 
107     enum MetaInformation {
108         DocumentTitle,
109         DocumentUrl
110     }
111     final void setMetaInformation(MetaInformation info, ref const(QString) );
112     final QString metaInformation(MetaInformation info) const;
113 
114 /+ #ifndef QT_NO_TEXTHTMLPARSER +/
115     version(QT_NO_TEXTHTMLPARSER){}else
116     {
117         final QString toHtml() const;
118         final void setHtml(ref const(QString) html);
119     }
120 /+ #endif
121 
122 #if QT_CONFIG(textmarkdownwriter) || QT_CONFIG(textmarkdownreader) +/
123     enum MarkdownFeature {
124         MarkdownNoHTML = 0x0020 | 0x0040,
125         MarkdownDialectCommonMark = 0,
126         MarkdownDialectGitHub = 0x0004 | 0x0008 | 0x0400 | 0x0100 | 0x0200 | 0x0800 | 0x4000
127     }
128     /+ Q_DECLARE_FLAGS(MarkdownFeatures, MarkdownFeature) +/
129 alias MarkdownFeatures = QFlags!(MarkdownFeature);    /+ Q_FLAG(MarkdownFeatures) +/
130 /+ #endif
131 
132 #if QT_CONFIG(textmarkdownwriter) +/
133     final QString toMarkdown(MarkdownFeatures features = MarkdownFeature.MarkdownDialectGitHub) const;
134 /+ #endif
135 
136 #if QT_CONFIG(textmarkdownreader) +/
137     final void setMarkdown(ref const(QString) markdown, MarkdownFeatures features = MarkdownFeature.MarkdownDialectGitHub);
138 /+ #endif +/
139 
140     final QString toRawText() const;
141     final QString toPlainText() const;
142     final void setPlainText(ref const(QString) text);
143 
144     final QChar characterAt(int pos) const;
145 
146     enum FindFlag
147     {
148         FindBackward        = 0x00001,
149         FindCaseSensitively = 0x00002,
150         FindWholeWords      = 0x00004
151     }
152     /+ Q_DECLARE_FLAGS(FindFlags, FindFlag) +/
153 alias FindFlags = QFlags!(FindFlag);
154     /+ QTextCursor find(const QString &subString, int from = 0, FindFlags options = FindFlags()) const; +/
155     /+ QTextCursor find(const QString &subString, const QTextCursor &cursor, FindFlags options = FindFlags()) const; +/
156 
157 /+ #if QT_CONFIG(regularexpression) +/
158     /+ QTextCursor find(const QRegularExpression &expr, int from = 0, FindFlags options = FindFlags()) const; +/
159     /+ QTextCursor find(const QRegularExpression &expr, const QTextCursor &cursor, FindFlags options = FindFlags()) const; +/
160 /+ #endif +/
161 
162     final QTextFrame frameAt(int pos) const;
163     final QTextFrame rootFrame() const;
164 
165     final QTextObject object(int objectIndex) const;
166     final QTextObject objectForFormat(ref const(QTextFormat) ) const;
167 
168     final QTextBlock findBlock(int pos) const;
169     final QTextBlock findBlockByNumber(int blockNumber) const;
170     final QTextBlock findBlockByLineNumber(int blockNumber) const;
171     final QTextBlock begin() const;
172     final QTextBlock end() const;
173 
174     final QTextBlock firstBlock() const;
175     final QTextBlock lastBlock() const;
176 
177     final void setPageSize(ref const(QSizeF) size);
178     final QSizeF pageSize() const;
179 
180     final void setDefaultFont(ref const(QFont) font);
181     final QFont defaultFont() const;
182 
183     final void setSuperScriptBaseline(qreal baseline);
184     final qreal superScriptBaseline() const;
185 
186     final void setSubScriptBaseline(qreal baseline);
187     final qreal subScriptBaseline() const;
188 
189     final void setBaselineOffset(qreal baseline);
190     final qreal baselineOffset() const;
191 
192     final int pageCount() const;
193 
194     final bool isModified() const;
195 
196     version(QT_NO_PRINTER){}else
197     {
198         final void print(QPagedPaintDevice printer) const;
199     }
200 
201     enum ResourceType {
202         UnknownResource = 0,
203         HtmlResource  = 1,
204         ImageResource = 2,
205         StyleSheetResource = 3,
206         MarkdownResource = 4,
207 
208         UserResource  = 100
209     }
210     /+ Q_ENUM(ResourceType) +/
211 
212     final QVariant resource(int type, ref const(QUrl) name) const;
213     final void addResource(int type, ref const(QUrl) name, ref const(QVariant) resource);
214 
215     //alias ResourceProvider = /+ std:: +/function_!(ExternCPPFunc!(QVariant function(ref const(QUrl))));
216 
217     /*final ResourceProvider resourceProvider() const;
218     final void setResourceProvider(ref const(ResourceProvider) provider);
219 
220     static ResourceProvider defaultResourceProvider();
221     static void setDefaultResourceProvider(ref const(ResourceProvider) provider);*/
222 
223     final QList!(QTextFormat) allFormats() const;
224 
225     final void markContentsDirty(int from, int length);
226 
227     final void setUseDesignMetrics(bool b);
228     final bool useDesignMetrics() const;
229 
230     final void drawContents(QPainter* painter, ref const(QRectF) rect = globalInitVar!QRectF);
231 
232     final void setTextWidth(qreal width);
233     final qreal textWidth() const;
234 
235     final qreal idealWidth() const;
236 
237     final qreal indentWidth() const;
238     final void setIndentWidth(qreal width);
239 
240     final qreal documentMargin() const;
241     final void setDocumentMargin(qreal margin);
242 
243     final void adjustSize();
244     final QSizeF size() const;
245 
246     final int blockCount() const;
247     final int lineCount() const;
248     final int characterCount() const;
249 
250     version(QT_NO_CSSPARSER){}else
251     {
252         final void setDefaultStyleSheet(ref const(QString) sheet);
253         final QString defaultStyleSheet() const;
254     }
255 
256     final void undo(QTextCursor* cursor);
257     final void redo(QTextCursor* cursor);
258 
259     enum Stacks {
260         UndoStack = 0x01,
261         RedoStack = 0x02,
262         UndoAndRedoStacks = Stacks.UndoStack | Stacks.RedoStack
263     }
264     final void clearUndoRedoStacks(Stacks historyToClear = Stacks.UndoAndRedoStacks);
265 
266     final int maximumBlockCount() const;
267     final void setMaximumBlockCount(int maximum);
268 
269     final QTextOption defaultTextOption() const;
270     final void setDefaultTextOption(ref const(QTextOption) option);
271 
272     final QUrl baseUrl() const;
273     final void setBaseUrl(ref const(QUrl) url);
274 
275     final /+ Qt:: +/qt.core.namespace.CursorMoveStyle defaultCursorMoveStyle() const;
276     final void setDefaultCursorMoveStyle(/+ Qt:: +/qt.core.namespace.CursorMoveStyle style);
277 
278 /+ Q_SIGNALS +/public:
279     @QSignal final void contentsChange(int from, int charsRemoved, int charsAdded);
280     @QSignal final void contentsChanged();
281     @QSignal final void undoAvailable(bool);
282     @QSignal final void redoAvailable(bool);
283     @QSignal final void undoCommandAdded();
284     @QSignal final void modificationChanged(bool m);
285     @QSignal final void cursorPositionChanged(ref const(QTextCursor) cursor);
286     @QSignal final void blockCountChanged(int newBlockCount);
287     @QSignal final void baseUrlChanged(ref const(QUrl) url);
288     @QSignal final void documentLayoutChanged();
289 
290 public /+ Q_SLOTS +/:
291     @QSlot final void undo();
292     @QSlot final void redo();
293     @QSlot final void appendUndoItem(QAbstractUndoItem );
294     @QSlot final void setModified(bool m = true);
295 
296 protected:
297     /+ virtual +/ QTextObject createObject(ref const(QTextFormat) f);
298     /+ virtual +/ @QInvokable QVariant loadResource(int type, ref const(QUrl) name);
299 
300     this(ref QTextDocumentPrivate dd, QObject parent);
301 private:
302     /+ Q_DISABLE_COPY(QTextDocument) +/
303     /+ Q_DECLARE_PRIVATE(QTextDocument) +/
304     /+ friend class QTextObjectPrivate; +/
305     mixin(CREATE_CONVENIENCE_WRAPPERS);
306 }
307 /+pragma(inline, true) QFlags!(QTextDocument.FindFlags.enum_type) operator |(QTextDocument.FindFlags.enum_type f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/{return QFlags!(QTextDocument.FindFlags.enum_type)(f1)|f2;}+/
308 /+pragma(inline, true) QFlags!(QTextDocument.FindFlags.enum_type) operator |(QTextDocument.FindFlags.enum_type f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/{return f2|f1;}+/
309 /+pragma(inline, true) QFlags!(QTextDocument.FindFlags.enum_type) operator &(QTextDocument.FindFlags.enum_type f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/{return QFlags!(QTextDocument.FindFlags.enum_type)(f1)&f2;}+/
310 /+pragma(inline, true) QFlags!(QTextDocument.FindFlags.enum_type) operator &(QTextDocument.FindFlags.enum_type f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/{return f2&f1;}+/
311 /+pragma(inline, true) void operator +(QTextDocument.FindFlags.enum_type f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/;+/
312 /+pragma(inline, true) void operator +(QTextDocument.FindFlags.enum_type f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/;+/
313 /+pragma(inline, true) void operator +(int f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/;+/
314 /+pragma(inline, true) void operator -(QTextDocument.FindFlags.enum_type f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/;+/
315 /+pragma(inline, true) void operator -(QTextDocument.FindFlags.enum_type f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/;+/
316 /+pragma(inline, true) void operator -(int f1, QFlags!(QTextDocument.FindFlags.enum_type) f2)/+noexcept+/;+/
317 /+pragma(inline, true) QIncompatibleFlag operator |(QTextDocument.FindFlags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
318 /+pragma(inline, true) void operator +(int f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/;+/
319 /+pragma(inline, true) void operator +(QTextDocument.FindFlags.enum_type f1, int f2)/+noexcept+/;+/
320 /+pragma(inline, true) void operator -(int f1, QTextDocument.FindFlags.enum_type f2)/+noexcept+/;+/
321 /+pragma(inline, true) void operator -(QTextDocument.FindFlags.enum_type f1, int f2)/+noexcept+/;+/
322 
323 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QTextDocument::FindFlags) +/