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.layoutitem; 13 extern(C++): 14 15 import qt.config; 16 import qt.core.namespace; 17 import qt.core.rect; 18 import qt.core.size; 19 import qt.helpers; 20 import qt.widgets.layout; 21 import qt.widgets.sizepolicy; 22 import qt.widgets.widget; 23 24 extern(D) immutable int QLAYOUTSIZE_MAX = int.max/256/16; 25 26 27 interface QLayoutItemInterface 28 { 29 // ~this(); 30 /+ virtual +/ QSize sizeHint() const; 31 /+ virtual +/ QSize minimumSize() const; 32 /+ virtual +/ QSize maximumSize() const; 33 /+ virtual +/ /+ Qt::Orientations +/abstract qt.core.namespace.Orientations expandingDirections() const; 34 /+ virtual +/ void setGeometry(ref const(QRect) ); 35 /+ virtual +/ QRect geometry() const; 36 /+ virtual +/ bool isEmpty() const; 37 /+ virtual +/ bool hasHeightForWidth() const; 38 /+ virtual +/ int heightForWidth(int) const; 39 /+ virtual +/ int minimumHeightForWidth(int) const; 40 /+ virtual +/ void invalidate(); 41 /+ virtual +/ QWidget widget(); 42 /+ virtual +/ QLayout layout(); 43 /+ virtual +/ QSpacerItem spacerItem(); 44 /+ virtual +/ /+ QSizePolicy::ControlTypes +/QSizePolicy.ControlTypes controlTypes() const; 45 } 46 47 /// Binding for C++ class [QLayoutItem](https://doc.qt.io/qt-6/qlayoutitem.html). 48 abstract class /+ Q_WIDGETS_EXPORT +/ QLayoutItem 49 { 50 public: 51 /+ explicit +/pragma(inline, true) this(/+ Qt:: +/qt.core.namespace.Alignment aalignment = /+ Qt:: +/qt.core.namespace.Alignment()) 52 { 53 this.align_ = aalignment; 54 } 55 /+ virtual +/~this(); 56 /+ virtual +/ abstract QSize sizeHint() const; 57 /+ virtual +/ abstract QSize minimumSize() const; 58 /+ virtual +/ abstract QSize maximumSize() const; 59 /+ virtual +/ abstract /+ Qt:: +/qt.core.namespace.Orientations expandingDirections() const; 60 /+ virtual +/ abstract void setGeometry(ref const(QRect)); 61 /+ virtual +/ abstract QRect geometry() const; 62 /+ virtual +/ abstract bool isEmpty() const; 63 /+ virtual +/ bool hasHeightForWidth() const; 64 /+ virtual +/ int heightForWidth(int) const; 65 /+ virtual +/ int minimumHeightForWidth(int) const; 66 /+ virtual +/ void invalidate(); 67 68 /+ virtual +/ QWidget widget() const; 69 /+ virtual +/ QLayout layout(); 70 /+ virtual +/ QSpacerItem spacerItem(); 71 72 final /+ Qt:: +/qt.core.namespace.Alignment alignment() const { return align_; } 73 final void setAlignment(/+ Qt:: +/qt.core.namespace.Alignment a); 74 /+ virtual +/ QSizePolicy.ControlTypes controlTypes() const; 75 76 protected: 77 /+ Qt:: +/qt.core.namespace.Alignment align_; 78 mixin(CREATE_CONVENIENCE_WRAPPERS); 79 } 80 81 /// Binding for C++ class [QSpacerItem](https://doc.qt.io/qt-6/qspaceritem.html). 82 class /+ Q_WIDGETS_EXPORT +/ QSpacerItem : QLayoutItem 83 { 84 public: 85 this(int w, int h, 86 QSizePolicy.Policy hData = QSizePolicy.Policy.Minimum, 87 QSizePolicy.Policy vData = QSizePolicy.Policy.Minimum) 88 { 89 this.width = w; 90 this.height = h; 91 this.sizeP = typeof(this.sizeP)(hData, vData); 92 } 93 ~this(); 94 95 final void changeSize(int w, int h, 96 QSizePolicy.Policy hData = QSizePolicy.Policy.Minimum, 97 QSizePolicy.Policy vData = QSizePolicy.Policy.Minimum); 98 override QSize sizeHint() const; 99 override QSize minimumSize() const; 100 override QSize maximumSize() const; 101 override /+ Qt:: +/qt.core.namespace.Orientations expandingDirections() const; 102 override bool isEmpty() const; 103 override void setGeometry(ref const(QRect)); 104 override QRect geometry() const; 105 override QSpacerItem spacerItem(); 106 final QSizePolicy sizePolicy() const { return sizeP; } 107 108 private: 109 int width; 110 int height; 111 QSizePolicy sizeP; 112 QRect rect; 113 mixin(CREATE_CONVENIENCE_WRAPPERS); 114 } 115 116 /// Binding for C++ class [QWidgetItem](https://doc.qt.io/qt-6/qwidgetitem.html). 117 class /+ Q_WIDGETS_EXPORT +/ QWidgetItem : QLayoutItem 118 { 119 private: 120 /+ Q_DISABLE_COPY(QWidgetItem) +/ 121 122 public: 123 /+ explicit +/this(QWidget w) 124 { 125 this.wid = w; 126 } 127 ~this(); 128 129 override QSize sizeHint() const; 130 override QSize minimumSize() const; 131 override QSize maximumSize() const; 132 override /+ Qt:: +/qt.core.namespace.Orientations expandingDirections() const; 133 override bool isEmpty() const; 134 override void setGeometry(ref const(QRect)); 135 override QRect geometry() const; 136 override QWidget widget() const; 137 138 override bool hasHeightForWidth() const; 139 override int heightForWidth(int) const; 140 override int minimumHeightForWidth(int) const; 141 override QSizePolicy.ControlTypes controlTypes() const; 142 protected: 143 QWidget wid; 144 mixin(CREATE_CONVENIENCE_WRAPPERS); 145 } 146 147 class /+ Q_WIDGETS_EXPORT +/ QWidgetItemV2 : QWidgetItem 148 { 149 public: 150 /+ explicit +/this(QWidget widget); 151 ~this(); 152 153 override QSize sizeHint() const; 154 override QSize minimumSize() const; 155 override QSize maximumSize() const; 156 override int heightForWidth(int width) const; 157 158 private: 159 enum { Dirty = -123, HfwCacheMaxSize = 3 } 160 161 //pragma(inline, true) final bool useSizeCache() const; 162 final void updateCacheIfNecessary() const; 163 pragma(inline, true) final void invalidateSizeCache() { 164 q_cachedMinimumSize.setWidth(Dirty); 165 q_hfwCacheSize = 0; 166 } 167 168 /+ mutable +/ QSize q_cachedMinimumSize; 169 /+ mutable +/ QSize q_cachedSizeHint; 170 /+ mutable +/ QSize q_cachedMaximumSize; 171 /+ mutable +/ QSize[HfwCacheMaxSize] q_cachedHfws; 172 /+ mutable +/ short q_firstCachedHfw; 173 /+ mutable +/ short q_hfwCacheSize; 174 void* d; 175 176 /+ friend class QWidgetPrivate; +/ 177 178 /+ Q_DISABLE_COPY(QWidgetItemV2) +/ 179 mixin(CREATE_CONVENIENCE_WRAPPERS); 180 } 181 182 static assert(__traits(classInstanceSize, QLayoutItem) == (void*).sizeof + 4); 183 struct QLayoutItemFakeInheritance 184 { 185 void*[(__traits(classInstanceSize, QLayoutItem) + (void*).sizeof - 1) / (void*).sizeof - 1] data; 186 } 187