1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef ABSTRACTFORMBUILDERPRIVATE_H
5#define ABSTRACTFORMBUILDERPRIVATE_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "uilib_global.h"
19
20#include <QtCore/qhash.h>
21#include <QtCore/qpointer.h>
22#include <QtCore/qstringlist.h>
23#include <QtCore/qmap.h>
24#include <QtCore/qdir.h>
25#include <QtGui/qpalette.h>
26
27QT_BEGIN_NAMESPACE
28
29class QDesignerCustomWidgetInterface;
30class QObject;
31class QVariant;
32class QWidget;
33class QObject;
34class QLabel;
35class QButtonGroup;
36class QBoxLayout;
37class QGridLayout;
38class QAction;
39class QActionGroup;
40
41#ifdef QFORMINTERNAL_NAMESPACE
42namespace QFormInternal
43{
44#endif
45
46class DomBrush;
47class DomButtonGroups;
48class DomButtonGroup;
49class DomColorGroup;
50class DomCustomWidget;
51class DomPalette;
52class DomProperty;
53class DomUI;
54
55class QAbstractFormBuilder;
56class QResourceBuilder;
57class QTextBuilder;
58
59class QDESIGNER_UILIB_EXPORT QFormBuilderExtra
60{
61public:
62 Q_DISABLE_COPY_MOVE(QFormBuilderExtra);
63
64 QFormBuilderExtra();
65 ~QFormBuilderExtra();
66
67 struct CustomWidgetData {
68 CustomWidgetData();
69 explicit CustomWidgetData(const DomCustomWidget *dc);
70
71 QString addPageMethod;
72 QString script;
73 QString baseClass;
74 bool isContainer = false;
75 };
76
77 void clear();
78
79 DomUI *readUi(QIODevice *dev);
80 static QString msgInvalidUiFile();
81
82 bool applyPropertyInternally(QObject *o, const QString &propertyName, const QVariant &value);
83
84 enum BuddyMode { BuddyApplyAll, BuddyApplyVisibleOnly };
85
86 void applyInternalProperties() const;
87 static bool applyBuddy(const QString &buddyName, BuddyMode applyMode, QLabel *label);
88
89 const QPointer<QWidget> &parentWidget() const;
90 bool parentWidgetIsSet() const;
91 void setParentWidget(const QPointer<QWidget> &w);
92
93 void setProcessingLayoutWidget(bool processing);
94 bool processingLayoutWidget() const;
95
96 void setResourceBuilder(QResourceBuilder *builder);
97 QResourceBuilder *resourceBuilder() const;
98
99 void setTextBuilder(QTextBuilder *builder);
100 QTextBuilder *textBuilder() const;
101
102 void storeCustomWidgetData(const QString &className, const DomCustomWidget *d);
103 QString customWidgetAddPageMethod(const QString &className) const;
104 QString customWidgetBaseClass(const QString &className) const;
105 bool isCustomWidgetContainer(const QString &className) const;
106
107 // --- Hash used in creating button groups on demand. Store a map of name and pair of dom group and real group
108 void registerButtonGroups(const DomButtonGroups *groups);
109
110 using ButtonGroupEntry = QPair<DomButtonGroup *, QButtonGroup*>;
111 using ButtonGroupHash = QHash<QString, ButtonGroupEntry>;
112 const ButtonGroupHash &buttonGroups() const { return m_buttonGroups; }
113 ButtonGroupHash &buttonGroups() { return m_buttonGroups; }
114
115 // return stretch as a comma-separated list
116 static QString boxLayoutStretch(const QBoxLayout*);
117 // apply stretch
118 static bool setBoxLayoutStretch(const QString &, QBoxLayout*);
119 static void clearBoxLayoutStretch(QBoxLayout*);
120
121 static QString gridLayoutRowStretch(const QGridLayout *);
122 static bool setGridLayoutRowStretch(const QString &, QGridLayout *);
123 static void clearGridLayoutRowStretch(QGridLayout *);
124
125 static QString gridLayoutColumnStretch(const QGridLayout *);
126 static bool setGridLayoutColumnStretch(const QString &, QGridLayout *);
127 static void clearGridLayoutColumnStretch(QGridLayout *);
128
129 // return the row/column sizes as comma-separated lists
130 static QString gridLayoutRowMinimumHeight(const QGridLayout *);
131 static bool setGridLayoutRowMinimumHeight(const QString &, QGridLayout *);
132 static void clearGridLayoutRowMinimumHeight(QGridLayout *);
133
134 static QString gridLayoutColumnMinimumWidth(const QGridLayout *);
135 static bool setGridLayoutColumnMinimumWidth(const QString &, QGridLayout *);
136 static void clearGridLayoutColumnMinimumWidth(QGridLayout *);
137
138 static void setPixmapProperty(DomProperty *p, const QPair<QString, QString> &ip);
139 static QPalette loadPalette(const DomPalette *dom);
140 static void setupColorGroup(QPalette *palette, QPalette::ColorGroup colorGroup,
141 const DomColorGroup *group);
142 static DomColorGroup *saveColorGroup(const QPalette &palette,
143 QPalette::ColorGroup colorGroup);
144 static DomPalette *savePalette(const QPalette &palette);
145 static QBrush setupBrush(const DomBrush *brush);
146 static DomBrush *saveBrush(const QBrush &br);
147
148 QStringList m_pluginPaths;
149 QMap<QString, QDesignerCustomWidgetInterface*> m_customWidgets;
150
151 QHash<QObject*, bool> m_laidout;
152 QHash<QString, QAction*> m_actions;
153 QHash<QString, QActionGroup*> m_actionGroups;
154 int m_defaultMargin;
155 int m_defaultSpacing;
156 QDir m_workingDirectory;
157 QString m_errorString;
158 QString m_language;
159
160private:
161 void clearResourceBuilder();
162 void clearTextBuilder();
163
164 QHash<QLabel *, QString> m_buddies;
165
166 QHash<QString, CustomWidgetData> m_customWidgetDataHash;
167
168 ButtonGroupHash m_buttonGroups;
169
170 bool m_layoutWidget = false;
171 QResourceBuilder *m_resourceBuilder = nullptr;
172 QTextBuilder *m_textBuilder = nullptr;
173
174 QPointer<QWidget> m_parentWidget;
175 bool m_parentWidgetIsSet = false;
176};
177
178void uiLibWarning(const QString &message);
179
180// Struct with static accessor that provides most strings used in the form builder.
181struct QDESIGNER_UILIB_EXPORT QFormBuilderStrings {
182 QFormBuilderStrings();
183
184 static const QFormBuilderStrings &instance();
185
186 const QString buddyProperty;
187 const QString cursorProperty;
188 const QString objectNameProperty;
189 const QString trueValue;
190 const QString falseValue;
191 const QString horizontalPostFix;
192 const QString separator;
193 const QString defaultTitle;
194 const QString titleAttribute;
195 const QString labelAttribute;
196 const QString toolTipAttribute;
197 const QString whatsThisAttribute;
198 const QString flagsAttribute;
199 const QString iconAttribute;
200 const QString pixmapAttribute;
201 const QString textAttribute;
202 const QString currentIndexProperty;
203 const QString toolBarAreaAttribute;
204 const QString toolBarBreakAttribute;
205 const QString dockWidgetAreaAttribute;
206 const QString marginProperty;
207 const QString spacingProperty;
208 const QString leftMarginProperty;
209 const QString topMarginProperty;
210 const QString rightMarginProperty;
211 const QString bottomMarginProperty;
212 const QString horizontalSpacingProperty;
213 const QString verticalSpacingProperty;
214 const QString sizeHintProperty;
215 const QString sizeTypeProperty;
216 const QString orientationProperty;
217 const QString styleSheetProperty;
218 const QString qtHorizontal;
219 const QString qtVertical;
220 const QString currentRowProperty;
221 const QString tabSpacingProperty;
222 const QString qWidgetClass;
223 const QString lineClass;
224 const QString geometryProperty;
225 const QString scriptWidgetVariable;
226 const QString scriptChildWidgetsVariable;
227
228 using RoleNName = QPair<Qt::ItemDataRole, QString>;
229 QList<RoleNName> itemRoles;
230 QHash<QString, Qt::ItemDataRole> treeItemRoleHash;
231
232 // first.first is primary role, first.second is shadow role.
233 // Shadow is used for either the translation source or the designer
234 // representation of the string value.
235 using TextRoleNName = QPair<QPair<Qt::ItemDataRole, Qt::ItemDataRole>, QString>;
236 QList<TextRoleNName> itemTextRoles;
237 QHash<QString, QPair<Qt::ItemDataRole, Qt::ItemDataRole> > treeItemTextRoleHash;
238};
239#ifdef QFORMINTERNAL_NAMESPACE
240}
241#endif
242
243QT_END_NAMESPACE
244
245#endif // ABSTRACTFORMBUILDERPRIVATE_H
246

source code of qttools/src/designer/src/lib/uilib/formbuilderextra_p.h