Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
cppwriteinitialization.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef CPPWRITEINITIALIZATION_H
5#define CPPWRITEINITIALIZATION_H
6
7#include "treewalker.h"
8#include <qhash.h>
9#include <qset.h>
10#include <qmap.h>
11#include <qstack.h>
12#include <qtextstream.h>
13
14enum class ConnectionSyntax;
15namespace language { struct SignalSlot; }
16
18
19class Driver;
20class Uic;
21class DomBrush;
22class DomFont;
23class DomResourceIcon;
24class DomSizePolicy;
25class DomStringList;
26struct Option;
27
28namespace CPP {
29 // Handle for a flat DOM font to get comparison functionality required for maps
30 class FontHandle {
31 public:
32 FontHandle(const DomFont *domFont);
33 int compare(const FontHandle &) const;
34 private:
35 const DomFont *m_domFont;
36 };
37 inline bool operator ==(const FontHandle &f1, const FontHandle &f2) { return f1.compare(f2) == 0; }
38 inline bool operator <(const FontHandle &f1, const FontHandle &f2) { return f1.compare(f2) < 0; }
39
40 // Handle for a flat DOM icon to get comparison functionality required for maps
41 class IconHandle {
42 public:
43 IconHandle(const DomResourceIcon *domIcon);
44 int compare(const IconHandle &) const;
45 private:
46 const DomResourceIcon *m_domIcon;
47 };
48 inline bool operator ==(const IconHandle &i1, const IconHandle &i2) { return i1.compare(i2) == 0; }
49 inline bool operator <(const IconHandle &i1, const IconHandle &i2) { return i1.compare(i2) < 0; }
50
51 // Handle for a flat DOM size policy to get comparison functionality required for maps
53 public:
54 SizePolicyHandle(const DomSizePolicy *domSizePolicy);
55 int compare(const SizePolicyHandle &) const;
56 private:
57 const DomSizePolicy *m_domSizePolicy;
58 };
59 inline bool operator ==(const SizePolicyHandle &f1, const SizePolicyHandle &f2) { return f1.compare(f2) == 0; }
60 inline bool operator <(const SizePolicyHandle &f1, const SizePolicyHandle &f2) { return f1.compare(f2) < 0; }
61
62
64{
65 using DomPropertyList = QList<DomProperty*>;
66 using DomPropertyMap = QHash<QString, DomProperty*>;
67
69
70//
71// widgets
72//
73 void acceptUI(DomUI *node) override;
74 void acceptWidget(DomWidget *node) override;
75
76 void acceptLayout(DomLayout *node) override;
77 void acceptSpacer(DomSpacer *node) override;
78 void acceptLayoutItem(DomLayoutItem *node) override;
79
80//
81// actions
82//
83 void acceptActionGroup(DomActionGroup *node) override;
84 void acceptAction(DomAction *node) override;
85 void acceptActionRef(DomActionRef *node) override;
86
87//
88// tab stops
89//
90 void acceptTabStops(DomTabStops *tabStops) override;
91
92//
93// custom widgets
94//
95 void acceptCustomWidgets(DomCustomWidgets *node) override;
96 void acceptCustomWidget(DomCustomWidget *node) override;
97
98//
99// layout defaults/functions
100//
101 void acceptLayoutDefault(DomLayoutDefault *node) override { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
102 void acceptLayoutFunction(DomLayoutFunction *node) override { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
103
104//
105// signal/slot connections
106//
108
109 enum {
114 };
115
116private:
117 static QString domColor2QString(const DomColor *c);
118
119 QString iconCall(const DomProperty *prop);
120 QString pixCall(const DomProperty *prop) const;
121 QString pixCall(QLatin1StringView type, const QString &text) const;
122 QString trCall(const QString &str, const QString &comment = QString(), const QString &id = QString()) const;
123 QString trCall(DomString *str, const QString &defaultString = QString()) const;
124 QString noTrCall(DomString *str, const QString &defaultString = QString()) const;
125 QString autoTrCall(DomString *str, const QString &defaultString = QString()) const;
126 inline QTextStream &autoTrOutput(const DomProperty *str);
127 QTextStream &autoTrOutput(const DomString *str, const QString &defaultString = QString());
128 // Apply a comma-separated list of values using a function "setSomething(int idx, value)"
129 void writePropertyList(const QString &varName, const QString &setFunction, const QString &value, const QString &defaultValue);
130
131 enum { WritePropertyIgnoreMargin = 1, WritePropertyIgnoreSpacing = 2, WritePropertyIgnoreObjectName = 4 };
132 QString writeStringListProperty(const DomStringList *list) const;
133 void writeProperties(const QString &varName, const QString &className, const DomPropertyList &lst, unsigned flags = 0);
134 void writeColorGroup(DomColorGroup *colorGroup, const QString &group, const QString &paletteName);
135 void writeBrush(const DomBrush *brush, const QString &brushName);
136
137//
138// special initialization
139//
140 class Item {
141 Q_DISABLE_COPY_MOVE(Item)
142 public:
143 Item(const QString &itemClassName, const QString &indent, QTextStream &setupUiStream, QTextStream &retranslateUiStream, Driver *driver);
144 ~Item();
145 enum EmptyItemPolicy {
146 DontConstruct,
147 ConstructItemOnly,
148 ConstructItemAndVariable
149 };
150 QString writeSetupUi(const QString &parent, EmptyItemPolicy emptyItemPolicy = ConstructItemOnly);
151 void writeRetranslateUi(const QString &parentPath);
152 void addSetter(const QString &setter, const QString &directive = QString(), bool translatable = false); // don't call it if you already added *this as a child of another Item
153 void addChild(Item *child); // all setters should already been added
154 private:
155 struct ItemData
156 {
157 QMultiMap<QString, QString> setters; // directive to setter
158 QSet<QString> directives;
159 enum TemporaryVariableGeneratorPolicy { // policies with priority, number describes the priority
160 DontGenerate = 1,
161 GenerateWithMultiDirective = 2,
162 Generate = 3
163 } policy = DontGenerate;
164 };
165 ItemData m_setupUiData;
166 ItemData m_retranslateUiData;
167 QList<Item *> m_children;
168 Item *m_parent = nullptr;
169
170 const QString m_itemClassName;
171 const QString m_indent;
172 QTextStream &m_setupUiStream;
173 QTextStream &m_retranslateUiStream;
174 Driver *m_driver;
175 };
176 using Items = QList<Item *>;
177
178 void addInitializer(Item *item,
179 const QString &name, int column, const QString &value, const QString &directive = QString(), bool translatable = false) const;
180 void addQtFlagsInitializer(Item *item, const DomPropertyMap &properties,
181 const QString &name, int column = -1) const;
182 void addQtEnumInitializer(Item *item,
183 const DomPropertyMap &properties, const QString &name, int column = -1) const;
184 void addBrushInitializer(Item *item,
185 const DomPropertyMap &properties, const QString &name, int column = -1);
186 void addStringInitializer(Item *item,
187 const DomPropertyMap &properties, const QString &name, int column = -1, const QString &directive = QString()) const;
188 void addCommonInitializers(Item *item,
189 const DomPropertyMap &properties, int column = -1);
190
191 void initializeMenu(DomWidget *w, const QString &parentWidget);
192 void initializeComboBox(DomWidget *w);
193 void initializeListWidget(DomWidget *w);
194 void initializeTreeWidget(DomWidget *w);
195 Items initializeTreeWidgetItems(const QList<DomItem *> &domItems);
196 void initializeTableWidget(DomWidget *w);
197
198 QString disableSorting(DomWidget *w, const QString &varName);
199 void enableSorting(DomWidget *w, const QString &varName, const QString &tempName);
200
201 struct Declaration
202 {
204 QString className;
205 };
206
207 Declaration findDeclaration(const QString &name);
208
209private:
210 QString writeFontProperties(const DomFont *f);
211 QString writeIconProperties(const DomResourceIcon *i);
212 void writeThemeIconCheckAssignment(const QString &themeValue, const QString &iconName,
213 const DomResourceIcon *i);
214 void writePixmapFunctionIcon(QTextStream &output, const QString &iconName,
215 const QString &indent, const DomResourceIcon *i) const;
216 QString writeSizePolicy(const DomSizePolicy *sp);
217 QString writeBrushInitialization(const DomBrush *brush);
218 void addButtonGroup(const DomWidget *node, const QString &varName);
219 void addWizardPage(const QString &pageVarName, const DomWidget *page, const QString &parentWidget);
220 bool isCustomWidget(const QString &className) const;
221 ConnectionSyntax connectionSyntax(const language::SignalSlot &sender,
222 const language::SignalSlot &receiver) const;
223
224 const Uic *m_uic;
225 Driver *m_driver;
226 QTextStream &m_output;
227 const Option &m_option;
228 QString m_indent;
229 QString m_dindent;
230 bool m_stdsetdef = true;
231
232 struct Buddy
233 {
234 QString labelVarName;
235 QString buddyAttributeName;
236 };
237 friend class QTypeInfo<Buddy>;
238
239 QStack<DomWidget*> m_widgetChain;
240 QStack<DomLayout*> m_layoutChain;
241 QStack<DomActionGroup*> m_actionGroupChain;
242 QList<Buddy> m_buddies;
243
244 QSet<QString> m_buttonGroups;
245 using ColorBrushHash = QHash<uint, QString>;
246 ColorBrushHash m_colorBrushHash;
247 // Map from font properties to font variable name for reuse
248 // Map from size policy to variable for reuse
249 using FontPropertiesNameMap = QMap<FontHandle, QString>;
250 using IconPropertiesNameMap = QMap<IconHandle, QString>;
251 using SizePolicyNameMap = QMap<SizePolicyHandle, QString>;
252 FontPropertiesNameMap m_fontPropertiesNameMap;
253 IconPropertiesNameMap m_iconPropertiesNameMap;
254 SizePolicyNameMap m_sizePolicyNameMap;
255
256 class LayoutDefaultHandler {
257 public:
258 LayoutDefaultHandler();
259 void acceptLayoutDefault(DomLayoutDefault *node);
260 void acceptLayoutFunction(DomLayoutFunction *node);
261
262 // Write out the layout margin and spacing properties applying the defaults.
263 void writeProperties(const QString &indent, const QString &varName,
264 const DomPropertyMap &pm, int marginType,
265 bool suppressMarginDefault, QTextStream &str) const;
266 private:
267 void writeProperty(int p, const QString &indent, const QString &objectName, const DomPropertyMap &pm,
268 const QString &propertyName, const QString &setter, int defaultStyleValue,
269 bool suppressDefault, QTextStream &str) const;
270
271 enum Properties { Margin, Spacing, NumProperties };
272 enum StateFlags { HasDefaultValue = 1, HasDefaultFunction = 2};
273 unsigned m_state[NumProperties];
274 int m_defaultValues[NumProperties];
275 QString m_functions[NumProperties];
276 };
277
278 // layout defaults
279 LayoutDefaultHandler m_LayoutDefaultHandler;
280 int m_layoutMarginType = TopLevelMargin;
281
282 QString m_generatedClass;
283 QString m_mainFormVarName;
284 QStringList m_customSlots;
285 QStringList m_customSignals;
286 bool m_mainFormUsedInRetranslateUi = false;
287
288 QString m_delayedInitialization;
289 QTextStream m_delayedOut;
290
291 QString m_refreshInitialization;
292 QTextStream m_refreshOut;
293
294 QString m_delayedActionInitialization;
295 QTextStream m_actionOut;
296
297 bool m_layoutWidget = false;
298 bool m_firstThemeIcon = true;
299 bool m_connectSlotsByName = true;
300};
301
302} // namespace CPP
303
304Q_DECLARE_TYPEINFO(CPP::WriteInitialization::Buddy, Q_RELOCATABLE_TYPE);
305
307
308#endif // CPPWRITEINITIALIZATION_H
FontHandle(const DomFont *domFont)
int compare(const FontHandle &) const
int compare(const IconHandle &) const
IconHandle(const DomResourceIcon *domIcon)
SizePolicyHandle(const DomSizePolicy *domSizePolicy)
int compare(const SizePolicyHandle &) const
Definition ui4.h:116
Definition lalr.h:84
\inmodule QtCore
Definition qhash.h:820
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition uic.h:30
QString str
[2]
QString text
type name READ getFunction WRITE setFunction
[0]
ConnectionSyntax
Definition language.h:15
bool operator<(const FontHandle &f1, const FontHandle &f2)
bool operator==(const FontHandle &f1, const FontHandle &f2)
Combined button and popup list for selecting options.
Definition brush.cpp:5
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection * connection
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLfloat GLfloat GLfloat w
[0]
GLfloat GLfloat f
GLenum type
GLboolean GLuint group
GLbitfield flags
GLuint name
GLenum GLenum GLsizei void GLsizei void * column
const GLubyte * c
GLfloat GLfloat p
[1]
#define sp
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
QT_BEGIN_NAMESPACE typedef uchar * output
const char className[16]
[1]
Definition qwizard.cpp:100
QList< int > list
[14]
QByteArray page
[45]
QGraphicsItem * item
QLayoutItem * child
[0]
void acceptCustomWidgets(DomCustomWidgets *node) override
void acceptActionGroup(DomActionGroup *node) override
void acceptSpacer(DomSpacer *node) override
void acceptLayoutItem(DomLayoutItem *node) override
void acceptTabStops(DomTabStops *tabStops) override
void acceptUI(DomUI *node) override
QList< DomProperty * > DomPropertyList
void acceptLayoutDefault(DomLayoutDefault *node) override
void acceptLayout(DomLayout *node) override
void acceptAction(DomAction *node) override
void acceptCustomWidget(DomCustomWidget *node) override
void acceptLayoutFunction(DomLayoutFunction *node) override
void acceptActionRef(DomActionRef *node) override
void acceptConnection(DomConnection *connection) override
QHash< QString, DomProperty * > DomPropertyMap
void acceptWidget(DomWidget *node) override