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.formlayout;
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.core.string;
20 import qt.helpers;
21 import qt.widgets.layout;
22 import qt.widgets.layoutitem;
23 import qt.widgets.widget;
24 
25 /+ QT_REQUIRE_CONFIG(formlayout); +/
26 
27 
28 
29 extern(C++, class) struct QFormLayoutPrivate;
30 
31 /// Binding for C++ class [QFormLayout](https://doc.qt.io/qt-6/qformlayout.html).
32 class /+ Q_WIDGETS_EXPORT +/ QFormLayout : QLayout
33 {
34     mixin(Q_OBJECT);
35     /+ Q_DECLARE_PRIVATE(QFormLayout) +/
36     /+ Q_PROPERTY(FieldGrowthPolicy fieldGrowthPolicy READ fieldGrowthPolicy WRITE setFieldGrowthPolicy
37                RESET resetFieldGrowthPolicy)
38     Q_PROPERTY(RowWrapPolicy rowWrapPolicy READ rowWrapPolicy WRITE setRowWrapPolicy
39                RESET resetRowWrapPolicy)
40     Q_PROPERTY(Qt::Alignment labelAlignment READ labelAlignment WRITE setLabelAlignment
41                RESET resetLabelAlignment)
42     Q_PROPERTY(Qt::Alignment formAlignment READ formAlignment WRITE setFormAlignment
43                RESET resetFormAlignment)
44     Q_PROPERTY(int horizontalSpacing READ horizontalSpacing WRITE setHorizontalSpacing)
45     Q_PROPERTY(int verticalSpacing READ verticalSpacing WRITE setVerticalSpacing) +/
46 
47 public:
48     enum FieldGrowthPolicy {
49         FieldsStayAtSizeHint,
50         ExpandingFieldsGrow,
51         AllNonFixedFieldsGrow
52     }
53     /+ Q_ENUM(FieldGrowthPolicy) +/
54 
55     enum RowWrapPolicy {
56         DontWrapRows,
57         WrapLongRows,
58         WrapAllRows
59     }
60     /+ Q_ENUM(RowWrapPolicy) +/
61 
62     enum ItemRole {
63         LabelRole = 0,
64         FieldRole = 1,
65         SpanningRole = 2
66     }
67     /+ Q_ENUM(ItemRole) +/
68 
69     struct TakeRowResult {
70         QLayoutItem labelItem;
71         QLayoutItem fieldItem;
72     }
73 
74     /+ explicit +/this(QWidget parent = null);
75     ~this();
76 
77     final void setFieldGrowthPolicy(FieldGrowthPolicy policy);
78     final FieldGrowthPolicy fieldGrowthPolicy() const;
79     final void setRowWrapPolicy(RowWrapPolicy policy);
80     final RowWrapPolicy rowWrapPolicy() const;
81     final void setLabelAlignment(/+ Qt:: +/qt.core.namespace.Alignment alignment);
82     final /+ Qt:: +/qt.core.namespace.Alignment labelAlignment() const;
83     final void setFormAlignment(/+ Qt:: +/qt.core.namespace.Alignment alignment);
84     final /+ Qt:: +/qt.core.namespace.Alignment formAlignment() const;
85 
86     final void setHorizontalSpacing(int spacing);
87     final int horizontalSpacing() const;
88     final void setVerticalSpacing(int spacing);
89     final int verticalSpacing() const;
90 
91     override int spacing() const;
92     override void setSpacing(int);
93 
94     final void addRow(QWidget label, QWidget field);
95     final void addRow(QWidget label, QLayout field);
96     final void addRow(ref const(QString) labelText, QWidget field);
97     final void addRow(ref const(QString) labelText, QLayout field);
98     final void addRow(QWidget widget);
99     final void addRow(QLayout layout);
100 
101     final void insertRow(int row, QWidget label, QWidget field);
102     final void insertRow(int row, QWidget label, QLayout field);
103     final void insertRow(int row, ref const(QString) labelText, QWidget field);
104     final void insertRow(int row, ref const(QString) labelText, QLayout field);
105     final void insertRow(int row, QWidget widget);
106     final void insertRow(int row, QLayout layout);
107 
108     final void removeRow(int row);
109     final void removeRow(QWidget widget);
110     final void removeRow(QLayout layout);
111 
112     final TakeRowResult takeRow(int row);
113     final TakeRowResult takeRow(QWidget widget);
114     final TakeRowResult takeRow(QLayout layout);
115 
116     final void setItem(int row, ItemRole role, QLayoutItem item);
117     final void setWidget(int row, ItemRole role, QWidget widget);
118     final void setLayout(int row, ItemRole role, QLayout layout);
119 
120     final QLayoutItem itemAt(int row, ItemRole role) const;
121     final void getItemPosition(int index, int* rowPtr, ItemRole* rolePtr) const;
122     final void getWidgetPosition(QWidget widget, int* rowPtr, ItemRole* rolePtr) const;
123     final void getLayoutPosition(QLayout layout, int* rowPtr, ItemRole* rolePtr) const;
124     final QWidget labelForField(QWidget field) const;
125     final QWidget labelForField(QLayout field) const;
126 
127     // reimplemented from QLayout
128     override void addItem(QLayoutItem item);
129     override QLayoutItem itemAt(int index) const;
130     override QLayoutItem takeAt(int index);
131 
132     override void setGeometry(ref const(QRect) rect);
133     override QSize minimumSize() const;
134     override QSize sizeHint() const;
135     override void invalidate();
136 
137     override bool hasHeightForWidth() const;
138     override int heightForWidth(int width) const;
139     override /+ Qt:: +/qt.core.namespace.Orientations expandingDirections() const;
140     override int count() const;
141 
142     final int rowCount() const;
143 
144 /+ #if 0
145     void dump() const;
146 #endif +/
147 
148 private:
149     final void resetFieldGrowthPolicy();
150     final void resetRowWrapPolicy();
151     final void resetLabelAlignment();
152     final void resetFormAlignment();
153     mixin(CREATE_CONVENIENCE_WRAPPERS);
154 }
155 
156 /+ Q_DECLARE_TYPEINFO(QFormLayout::TakeRowResult, Q_PRIMITIVE_TYPE); +/
157