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