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.textoption;
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.qchar;
21 import qt.helpers;
22 
23 struct QTextOptionPrivate;
24 
25 /// Binding for C++ class [QTextOption](https://doc.qt.io/qt-6/qtextoption.html).
26 extern(C++, class) struct /+ Q_GUI_EXPORT +/ QTextOption
27 {
28 public:
29     enum TabType {
30         LeftTab,
31         RightTab,
32         CenterTab,
33         DelimiterTab
34     }
35 
36     // Workaround for https://issues.dlang.org/show_bug.cgi?id=20701
37     extern(C++, struct) struct /+ Q_GUI_EXPORT +/ Tab {
38         @disable this();
39         /+pragma(inline, true) this()
40         {
41             this.position = 80;
42             this.type = QTextOption.TabType.LeftTab;
43         }+/
44         pragma(inline, true) this(qreal pos, TabType tabType, QChar delim = QChar())
45         {
46             this.position = pos;
47             this.type = tabType;
48             this.delimiter = delim;
49         }
50 
51         /+pragma(inline, true) bool operator ==(ref const(Tab) other) const {
52             return type == other.type
53                    && qFuzzyCompare(position, other.position)
54                    && delimiter == other.delimiter;
55         }+/
56 
57         /+pragma(inline, true) bool operator !=(ref const(Tab) other) const {
58             return !operator==(other);
59         }+/
60 
61         qreal position = 80;
62         TabType type = QTextOption.TabType.LeftTab;
63         QChar delimiter;
64     }
65 
66     /*@disable this();
67     pragma(mangle, defaultConstructorMangling(__traits(identifier, typeof(this))))
68     ref typeof(this) rawConstructor();
69     static typeof(this) create()
70     {
71         typeof(this) r = typeof(this).init;
72         r.rawConstructor();
73         return r;
74     }*/
75 
76     /+ Q_IMPLICIT +/ this(/+ Qt:: +/qt.core.namespace.Alignment alignment);
77     ~this();
78 
79     @disable this(this);
80     this(ref const(QTextOption) o);
81     /+ref QTextOption operator =(ref const(QTextOption) o);+/
82 
83     pragma(inline, true) void setAlignment(/+ Qt:: +/qt.core.namespace.Alignment aalignment)
84     { align_ = cast(uint)(aalignment.toInt); }
85     pragma(inline, true) /+ Qt:: +/qt.core.namespace.Alignment alignment() const { return /+ Qt:: +/qt.core.namespace.Alignment(cast(QFlag)(align_)); }
86 
87     pragma(inline, true) void setTextDirection(/+ Qt:: +/qt.core.namespace.LayoutDirection aDirection) { this.direction = aDirection; }
88     pragma(inline, true) /+ Qt:: +/qt.core.namespace.LayoutDirection textDirection() const { return cast(/+ Qt:: +/qt.core.namespace.LayoutDirection)(direction); }
89 
90     enum WrapMode {
91         NoWrap,
92         WordWrap,
93         ManualWrap,
94         WrapAnywhere,
95         WrapAtWordBoundaryOrAnywhere
96     }
97     pragma(inline, true) void setWrapMode(WrapMode wrap) { wordWrap = wrap; }
98     pragma(inline, true) WrapMode wrapMode() const { return static_cast!(WrapMode)(wordWrap); }
99 
100     enum Flag {
101         ShowTabsAndSpaces = 0x1,
102         ShowLineAndParagraphSeparators = 0x2,
103         AddSpaceForLineAndParagraphSeparators = 0x4,
104         SuppressColors = 0x8,
105         ShowDocumentTerminator = 0x10,
106         IncludeTrailingSpaces = 0x80000000
107     }
108     /+ Q_DECLARE_FLAGS(Flags, Flag) +/
109 alias Flags = QFlags!(Flag);    pragma(inline, true) void setFlags(Flags aflags)
110 { f = cast(uint)(aflags); }
111 //    pragma(inline, true) Flags flags() const { return Flags(cast(QFlag)(f)); }
112 
113     pragma(inline, true) void setTabStopDistance(qreal atabStop)
114     { tab = atabStop; }
115     pragma(inline, true) qreal tabStopDistance() const { return tab; }
116 
117     void setTabArray(ref const(QList!(qreal)) tabStops);
118     QList!(qreal) tabArray() const;
119 
120     /*void setTabs(ref const(QList!(Tab)) tabStops);
121     QList!(Tab) tabs() const;*/
122 
123     void setUseDesignMetrics(bool b) { design = b; }
124     bool useDesignMetrics() const { return (design) != 0; }
125 
126 private:
127     /+ uint align : 9; +/
128     uint bitfieldData_align;
129     final uint align_() const
130     {
131         return (bitfieldData_align >> 0) & 0x1ff;
132     }
133     final uint align_(uint value)
134     {
135         bitfieldData_align = (bitfieldData_align & ~0x1ff) | ((value & 0x1ff) << 0);
136         return value;
137     }
138     /+ uint wordWrap : 4; +/
139     final uint wordWrap() const
140     {
141         return (bitfieldData_align >> 9) & 0xf;
142     }
143     final uint wordWrap(uint value)
144     {
145         bitfieldData_align = (bitfieldData_align & ~0x1e00) | ((value & 0xf) << 9);
146         return value;
147     }
148     /+ uint design : 1; +/
149     final uint design() const
150     {
151         return (bitfieldData_align >> 13) & 0x1;
152     }
153     final uint design(uint value)
154     {
155         bitfieldData_align = (bitfieldData_align & ~0x2000) | ((value & 0x1) << 13);
156         return value;
157     }
158     /+ uint direction : 2; +/
159     final uint direction() const
160     {
161         return (bitfieldData_align >> 14) & 0x3;
162     }
163     final uint direction(uint value)
164     {
165         bitfieldData_align = (bitfieldData_align & ~0xc000) | ((value & 0x3) << 14);
166         return value;
167     }
168     /+ uint unused : 16; +/
169     final uint unused() const
170     {
171         return (bitfieldData_align >> 16) & 0xffff;
172     }
173     final uint unused(uint value)
174     {
175         bitfieldData_align = (bitfieldData_align & ~0xffff0000) | ((value & 0xffff) << 16);
176         return value;
177     }
178     uint f;
179     qreal tab = -1;
180     QTextOptionPrivate* d;
181     mixin(CREATE_CONVENIENCE_WRAPPERS);
182 }
183 /+pragma(inline, true) QFlags!(QTextOption.Flags.enum_type) operator |(QTextOption.Flags.enum_type f1, QTextOption.Flags.enum_type f2)/+noexcept+/{return QFlags!(QTextOption.Flags.enum_type)(f1)|f2;}+/
184 /+pragma(inline, true) QFlags!(QTextOption.Flags.enum_type) operator |(QTextOption.Flags.enum_type f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/{return f2|f1;}+/
185 /+pragma(inline, true) QFlags!(QTextOption.Flags.enum_type) operator &(QTextOption.Flags.enum_type f1, QTextOption.Flags.enum_type f2)/+noexcept+/{return QFlags!(QTextOption.Flags.enum_type)(f1)&f2;}+/
186 /+pragma(inline, true) QFlags!(QTextOption.Flags.enum_type) operator &(QTextOption.Flags.enum_type f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/{return f2&f1;}+/
187 /+pragma(inline, true) void operator +(QTextOption.Flags.enum_type f1, QTextOption.Flags.enum_type f2)/+noexcept+/;+/
188 /+pragma(inline, true) void operator +(QTextOption.Flags.enum_type f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/;+/
189 /+pragma(inline, true) void operator +(int f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/;+/
190 /+pragma(inline, true) void operator -(QTextOption.Flags.enum_type f1, QTextOption.Flags.enum_type f2)/+noexcept+/;+/
191 /+pragma(inline, true) void operator -(QTextOption.Flags.enum_type f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/;+/
192 /+pragma(inline, true) void operator -(int f1, QFlags!(QTextOption.Flags.enum_type) f2)/+noexcept+/;+/
193 /+pragma(inline, true) QIncompatibleFlag operator |(QTextOption.Flags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
194 /+pragma(inline, true) void operator +(int f1, QTextOption.Flags.enum_type f2)/+noexcept+/;+/
195 /+pragma(inline, true) void operator +(QTextOption.Flags.enum_type f1, int f2)/+noexcept+/;+/
196 /+pragma(inline, true) void operator -(int f1, QTextOption.Flags.enum_type f2)/+noexcept+/;+/
197 /+pragma(inline, true) void operator -(QTextOption.Flags.enum_type f1, int f2)/+noexcept+/;+/
198 
199 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QTextOption::Flags)
200 
201 Q_DECLARE_METATYPE( QTextOption::Tab ) +/
202