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.abstracttextdocumentlayout;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.list;
17 import qt.core.namespace;
18 import qt.core.object;
19 import qt.core.point;
20 import qt.core.rect;
21 import qt.core.size;
22 import qt.core.string;
23 import qt.gui.paintdevice;
24 import qt.gui.painter;
25 import qt.gui.palette;
26 import qt.gui.textcursor;
27 import qt.gui.textdocument;
28 import qt.gui.textformat;
29 import qt.gui.textlayout;
30 import qt.gui.textobject;
31 import qt.helpers;
32 
33 extern(C++, class) struct QAbstractTextDocumentLayoutPrivate;
34 
35 /// Binding for C++ class [QAbstractTextDocumentLayout](https://doc.qt.io/qt-6/qabstracttextdocumentlayout.html).
36 abstract class /+ Q_GUI_EXPORT +/ QAbstractTextDocumentLayout : QObject
37 {
38     mixin(Q_OBJECT);
39     /+ Q_DECLARE_PRIVATE(QAbstractTextDocumentLayout) +/
40 
41 public:
42     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
43     /+ explicit +/this(QTextDocument doc);
44     }));
45     ~this();
46 
47     struct Selection
48     {
49         QTextCursor cursor;
50         QTextCharFormat format;
51     }
52 
53     struct PaintContext
54     {
55         @disable this(this);
56         int cursorPosition = -1;
57         QPalette palette;
58         QRectF clip;
59         QList!(Selection) selections;
60     }
61 
62     /+ virtual +/ abstract void draw(QPainter* painter, ref const(PaintContext) context);
63     /+ virtual +/ abstract int hitTest(ref const(QPointF) point, /+ Qt:: +/qt.core.namespace.HitTestAccuracy accuracy) const;
64 
65     final QString anchorAt(ref const(QPointF) pos) const;
66     final QString imageAt(ref const(QPointF) pos) const;
67     final QTextFormat formatAt(ref const(QPointF) pos) const;
68 //    final QTextBlock blockWithMarkerAt(ref const(QPointF) pos) const;
69 
70     /+ virtual +/ abstract int pageCount() const;
71     /+ virtual +/ abstract QSizeF documentSize() const;
72 
73     /+ virtual +/ abstract QRectF frameBoundingRect(QTextFrame frame) const;
74     /+ virtual +/ abstract QRectF blockBoundingRect(ref const(QTextBlock) block) const;
75 
76     final void setPaintDevice(QPaintDevice device);
77     final QPaintDevice paintDevice() const;
78 
79     final QTextDocument document() const;
80 
81     final void registerHandler(int objectType, QObject component);
82     final void unregisterHandler(int objectType, QObject component = null);
83     final QTextObjectInterface handlerForObject(int objectType) const;
84 
85 /+ Q_SIGNALS +/public:
86     @QSignal final void update(ref const(QRectF)  /+ = QRectF(0., 0., 1000000000., 1000000000.) +/);
87     @QSignal final void updateBlock(ref const(QTextBlock) block);
88     @QSignal final void documentSizeChanged(ref const(QSizeF) newSize);
89     @QSignal final void pageCountChanged(int newPages);
90 
91 protected:
92     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
93     this(ref QAbstractTextDocumentLayoutPrivate , QTextDocument );
94     }));
95 
96     /+ virtual +/ abstract void documentChanged(int from, int charsRemoved, int charsAdded);
97 
98     /+ virtual +/ void resizeInlineObject(QTextInlineObject item, int posInDocument, ref const(QTextFormat) format);
99     /+ virtual +/ void positionInlineObject(QTextInlineObject item, int posInDocument, ref const(QTextFormat) format);
100     /+ virtual +/ void drawInlineObject(QPainter* painter, ref const(QRectF) rect, QTextInlineObject object, int posInDocument, ref const(QTextFormat) format);
101 
102     final int formatIndex(int pos);
103     final QTextCharFormat format(int pos);
104 
105 private:
106     /+ friend class QWidgetTextControl; +/
107     /+ friend class QTextDocument; +/
108     /+ friend class QTextDocumentPrivate; +/
109     /+ friend class QTextEngine; +/
110     /+ friend class QTextLayout; +/
111     /+ friend class QTextLine; +/
112     /+ Q_PRIVATE_SLOT(d_func(), void _q_handlerDestroyed(QObject *obj))
113     Q_PRIVATE_SLOT(d_func(), int _q_dynamicPageCountSlot())
114     Q_PRIVATE_SLOT(d_func(), QSizeF _q_dynamicDocumentSizeSlot()) +/
115     mixin(CREATE_CONVENIENCE_WRAPPERS);
116 }
117 /+ Q_DECLARE_TYPEINFO(QAbstractTextDocumentLayout::Selection,    Q_RELOCATABLE_TYPE);
118 Q_DECLARE_TYPEINFO(QAbstractTextDocumentLayout::PaintContext, Q_RELOCATABLE_TYPE); +/
119 
120 /// Binding for C++ class [QTextObjectInterface](https://doc.qt.io/qt-6/qtextobjectinterface.html).
121 abstract class /+ Q_GUI_EXPORT +/ QTextObjectInterface
122 {
123 public:
124     /+ virtual +/~this();
125     /+ virtual +/ abstract QSizeF intrinsicSize(QTextDocument doc, int posInDocument, ref const(QTextFormat) format);
126     /+ virtual +/ abstract void drawObject(QPainter* painter, ref const(QRectF) rect, QTextDocument doc, int posInDocument, ref const(QTextFormat) format);
127     mixin(CREATE_CONVENIENCE_WRAPPERS);
128 }
129 
130 /+ #ifndef Q_CLANG_QDOC
131 Q_DECLARE_INTERFACE(QTextObjectInterface, "org.qt-project.Qt.QTextObjectInterface")
132 #endif +/
133