summaryrefslogtreecommitdiffstats
path: root/src/tools/uic/cpp/cppwriteinitialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/uic/cpp/cppwriteinitialization.cpp')
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp760
1 files changed, 429 insertions, 331 deletions
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 534a78791d..893cc5b8ec 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cppwriteinitialization.h"
+#include "customwidgetsinfo.h"
#include "driver.h"
#include "ui4.h"
#include "utils.h"
@@ -45,17 +21,47 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
+
+ // Expand "Horizontal", "Qt::Horizontal" to "Qt::Orientation::Horizontal"
+ QString expandEnum(QString value, const QString &prefix)
+ {
+ if (value.startsWith(prefix))
+ return value;
+ const auto pos = value.lastIndexOf("::"_L1);
+ if (pos == -1)
+ return prefix + "::"_L1 + value;
+ value.replace(0, pos, prefix);
+ return value;
+ }
+
+ inline QString expandSizePolicyEnum(const QString &value)
+ {
+ return expandEnum(value, "QSizePolicy::Policy"_L1);
+ }
+
+ inline QString expandToolBarArea(const QString &value)
+ {
+ return expandEnum(value, "Qt::ToolBarArea"_L1);
+ }
+
+ inline QString expandDockWidgetArea(const QString &value)
+ {
+ return expandEnum(value, "Qt::DockWidgetArea"_L1);
+ }
+
// figure out the toolbar area of a DOM attrib list.
// By legacy, it is stored as an integer. As of 4.3.0, it is the enumeration value.
QString toolBarAreaStringFromDOMAttributes(const CPP::WriteInitialization::DomPropertyMap &attributes) {
- const DomProperty *pstyle = attributes.value(QLatin1String("toolBarArea"));
+ const DomProperty *pstyle = attributes.value("toolBarArea"_L1);
QString result;
if (!pstyle)
return result;
switch (pstyle->kind()) {
case DomProperty::Number:
- result = QLatin1String(language::toolbarArea(pstyle->elementNumber()));
+ result = language::toolbarArea(pstyle->elementNumber());
break;
case DomProperty::Enum:
result = pstyle->elementEnum();
@@ -63,9 +69,7 @@ namespace {
default:
break;
}
- if (!result.startsWith(QLatin1String("Qt::")))
- result.prepend(QLatin1String("Qt::"));
- return result + QLatin1String(", ");
+ return expandToolBarArea(result) + ", "_L1;
}
// Write a statement to create a spacer item.
@@ -75,7 +79,7 @@ namespace {
int w = 0;
int h = 0;
- if (const DomProperty *sh = properties.value(QLatin1String("sizeHint"))) {
+ if (const DomProperty *sh = properties.value("sizeHint"_L1)) {
if (const DomSize *sizeHint = sh->elementSize()) {
w = sizeHint->elementWidth();
h = sizeHint->elementHeight();
@@ -84,27 +88,17 @@ namespace {
output << w << ", " << h << ", ";
// size type
- QString sizeType;
- if (const DomProperty *st = properties.value(QLatin1String("sizeType"))) {
- const QString value = st->elementEnum();
- if (value.startsWith(QLatin1String("QSizePolicy::")))
- sizeType = value;
- else
- sizeType = QLatin1String("QSizePolicy::") + value;
- } else {
- sizeType = QStringLiteral("QSizePolicy::Expanding");
- }
+ const DomProperty *st = properties.value("sizeType"_L1);
+ QString horizType = st != nullptr ? st->elementEnum() : "Expanding"_L1;
+ QString vertType = "Minimum"_L1;
// orientation
- bool isVspacer = false;
- if (const DomProperty *o = properties.value(QLatin1String("orientation"))) {
- const QString orientation = o->elementEnum();
- if (orientation == QLatin1String("Qt::Vertical") || orientation == QLatin1String("Vertical"))
- isVspacer = true;
- }
- const QString horizType = isVspacer ? QLatin1String("QSizePolicy::Minimum") : sizeType;
- const QString vertType = isVspacer ? sizeType : QLatin1String("QSizePolicy::Minimum");
- output << language::enumValue(horizType) << ", " << language::enumValue(vertType) << ')';
+ const DomProperty *o = properties.value("orientation"_L1);
+ if (o != nullptr && o->elementEnum().endsWith("Vertical"_L1))
+ std::swap(horizType, vertType);
+
+ output << language::enumValue(expandSizePolicyEnum(horizType)) << ", "
+ << language::enumValue(expandSizePolicyEnum(vertType)) << ')';
}
@@ -143,18 +137,18 @@ namespace {
// ### fixme Qt 7 remove this: Exclude deprecated properties of Qt 5.
case DomProperty::Set:
if (p->attributeName() == u"features"
- && customWidgetsInfo->extends(className, QLatin1String("QDockWidget"))
+ && customWidgetsInfo->extends(className, "QDockWidget")
&& p->elementSet() == u"QDockWidget::AllDockWidgetFeatures") {
- const QString msg = fileName + QLatin1String(": Warning: Deprecated enum value QDockWidget::AllDockWidgetFeatures was encountered.");
+ const QString msg = fileName + ": Warning: Deprecated enum value QDockWidget::AllDockWidgetFeatures was encountered."_L1;
qWarning("%s", qPrintable(msg));
return false;
}
break;
case DomProperty::Enum:
if (p->attributeName() == u"sizeAdjustPolicy"
- && customWidgetsInfo->extends(className, QLatin1String("QComboBox"))
+ && customWidgetsInfo->extends(className, "QComboBox")
&& p->elementEnum() == u"QComboBox::AdjustToMinimumContentsLength") {
- const QString msg = fileName + QLatin1String(": Warning: Deprecated enum value QComboBox::AdjustToMinimumContentsLength was encountered.");
+ const QString msg = fileName + ": Warning: Deprecated enum value QComboBox::AdjustToMinimumContentsLength was encountered."_L1;
qWarning("%s", qPrintable(msg));
return false;
}
@@ -202,6 +196,15 @@ FontHandle::FontHandle(const DomFont *domFont) :
{
}
+static QString fontWeight(const DomFont *domFont)
+{
+ if (domFont->hasElementFontWeight())
+ return domFont->elementFontWeight();
+ if (domFont->hasElementBold())
+ return domFont->elementBold() ? u"Bold"_s : u"Normal"_s;
+ return {};
+}
+
int FontHandle::compare(const FontHandle &rhs) const
{
const QString family = m_domFont->hasElementFamily() ? m_domFont->elementFamily() : QString();
@@ -216,10 +219,10 @@ int FontHandle::compare(const FontHandle &rhs) const
if (const int crc = compareInt(pointSize, rhsPointSize))
return crc;
- const int bold = m_domFont->hasElementBold() ? (m_domFont->elementBold() ? 1 : 0) : -1;
- const int rhsBold = rhs.m_domFont->hasElementBold() ? (rhs.m_domFont->elementBold() ? 1 : 0) : -1;
- if (const int crc = compareInt(bold, rhsBold))
- return crc;
+ const QString fontWeight = CPP::fontWeight(m_domFont);
+ const QString rhsFontWeight = CPP::fontWeight(rhs.m_domFont);
+ if (const int wrc = fontWeight.compare(rhsFontWeight))
+ return wrc;
const int italic = m_domFont->hasElementItalic() ? (m_domFont->elementItalic() ? 1 : 0) : -1;
const int rhsItalic = rhs.m_domFont->hasElementItalic() ? (rhs.m_domFont->elementItalic() ? 1 : 0) : -1;
@@ -231,11 +234,6 @@ int FontHandle::compare(const FontHandle &rhs) const
if (const int crc = compareInt(underline, rhsUnderline))
return crc;
- const int weight = m_domFont->hasElementWeight() ? m_domFont->elementWeight() : -1;
- const int rhsWeight = rhs.m_domFont->hasElementWeight() ? rhs.m_domFont->elementWeight() : -1;
- if (const int crc = compareInt(weight, rhsWeight))
- return crc;
-
const int strikeOut = m_domFont->hasElementStrikeOut() ? (m_domFont->elementStrikeOut() ? 1 : 0) : -1;
const int rhsStrikeOut = rhs.m_domFont->hasElementStrikeOut() ? (rhs.m_domFont->elementStrikeOut() ? 1 : 0) : -1;
if (const int crc = compareInt(strikeOut, rhsStrikeOut))
@@ -257,6 +255,13 @@ int FontHandle::compare(const FontHandle &rhs) const
if (const int src = styleStrategy.compare(rhsStyleStrategy))
return src;
+ const QString hintingPreference = m_domFont->hasElementHintingPreference()
+ ? m_domFont->elementHintingPreference() : QString();
+ const QString rhsHintingPreference = rhs.m_domFont->hasElementHintingPreference()
+ ? rhs.m_domFont->elementHintingPreference() : QString();
+ if (const int src = hintingPreference.compare(rhsHintingPreference))
+ return src;
+
return 0;
}
@@ -387,12 +392,12 @@ void WriteInitialization::LayoutDefaultHandler::acceptLayoutFunction(DomLayoutFu
if (node->hasAttributeMargin()) {
m_state[Margin] |= HasDefaultFunction;
m_functions[Margin] = node->attributeMargin();
- m_functions[Margin] += QLatin1String("()");
+ m_functions[Margin] += "()"_L1;
}
if (node->hasAttributeSpacing()) {
m_state[Spacing] |= HasDefaultFunction;
m_functions[Spacing] = node->attributeSpacing();
- m_functions[Spacing] += QLatin1String("()");
+ m_functions[Spacing] += "()"_L1;
}
}
@@ -400,7 +405,7 @@ static inline void writeContentsMargins(const QString &indent, const QString &ob
{
QString contentsMargins;
QTextStream(&contentsMargins) << value << ", " << value << ", " << value << ", " << value;
- writeSetter(indent, objectName, QLatin1String("setContentsMargins"), contentsMargins, str);
+ writeSetter(indent, objectName, "setContentsMargins"_L1, contentsMargins, str);
}
void WriteInitialization::LayoutDefaultHandler::writeProperty(int p, const QString &indent, const QString &objectName,
@@ -454,11 +459,11 @@ void WriteInitialization::LayoutDefaultHandler::writeProperties(const QString &i
// Write out properties and ignore the ones found in
// subsequent writing of the property list.
int defaultSpacing = marginType == WriteInitialization::Use43UiFile ? -1 : 6;
- writeProperty(Spacing, indent, varName, properties, QLatin1String("spacing"), QLatin1String("setSpacing"),
+ writeProperty(Spacing, indent, varName, properties, "spacing"_L1, "setSpacing"_L1,
defaultSpacing, false, str);
// We use 9 as TopLevelMargin, since Designer seem to always use 9.
static const int layoutmargins[4] = {-1, 9, 9, 0};
- writeProperty(Margin, indent, varName, properties, QLatin1String("margin"), QLatin1String("setMargin"),
+ writeProperty(Margin, indent, varName, properties, "margin"_L1, "setMargin"_L1,
layoutmargins[marginType], suppressMarginDefault, str);
}
@@ -517,16 +522,16 @@ void WriteInitialization::acceptUI(DomUI *node)
const QString widgetClassName = node->elementWidget()->attributeClass();
- const QString parameterType = widgetClassName + QLatin1String(" *");
+ const QString parameterType = widgetClassName + " *"_L1;
m_output << m_option.indent
<< language::startFunctionDefinition1("setupUi", parameterType, varName, m_option.indent);
const QStringList connections = m_uic->databaseInfo()->connections();
for (const auto &connection : connections) {
- if (connection == QLatin1String("(default)"))
+ if (connection == "(default)"_L1)
continue;
- const QString varConn = connection + QLatin1String("Connection");
+ const QString varConn = connection + "Connection"_L1;
m_output << m_indent << varConn << " = QSqlDatabase::database("
<< language::charliteral(connection, m_dindent) << ")" << language::eol;
}
@@ -535,7 +540,7 @@ void WriteInitialization::acceptUI(DomUI *node)
if (!m_buddies.empty())
m_output << language::openQtConfig(shortcutConfigKey());
- for (const Buddy &b : qAsConst(m_buddies)) {
+ for (const Buddy &b : std::as_const(m_buddies)) {
const QString buddyVarName = m_driver->widgetVariableName(b.buddyAttributeName);
if (buddyVarName.isEmpty()) {
fprintf(stderr, "%s: Warning: Buddy assignment: '%s' is not a valid widget.\n",
@@ -576,13 +581,13 @@ void WriteInitialization::acceptUI(DomUI *node)
if (language::language() == Language::Cpp) {
// Mark varName as unused to avoid compiler warnings.
m_refreshInitialization += m_indent;
- m_refreshInitialization += QLatin1String("(void)");
+ m_refreshInitialization += "(void)"_L1;
m_refreshInitialization += varName ;
m_refreshInitialization += language::eol;
} else if (language::language() == Language::Python) {
// output a 'pass' to have an empty function
m_refreshInitialization += m_indent;
- m_refreshInitialization += QLatin1String("pass");
+ m_refreshInitialization += "pass"_L1;
m_refreshInitialization += language::eol;
}
}
@@ -605,7 +610,7 @@ void WriteInitialization::addWizardPage(const QString &pageVarName, const DomWid
const auto &attributes = page->elementAttribute();
if (!attributes.empty()) {
for (const DomProperty *p : attributes) {
- if (p->attributeName() == QLatin1String("pageId")) {
+ if (p->attributeName() == "pageId"_L1) {
if (const DomString *ds = p->elementString())
id = ds->text();
break;
@@ -623,7 +628,7 @@ void WriteInitialization::addWizardPage(const QString &pageVarName, const DomWid
void WriteInitialization::acceptWidget(DomWidget *node)
{
- m_layoutMarginType = m_widgetChain.count() == 1 ? TopLevelMargin : ChildMargin;
+ m_layoutMarginType = m_widgetChain.size() == 1 ? TopLevelMargin : ChildMargin;
const QString className = node->attributeClass();
const QString varName = m_driver->findOrInsertWidget(node);
@@ -649,13 +654,13 @@ void WriteInitialization::acceptWidget(DomWidget *node)
parentWidget = savedParentWidget;
- if (cwi->extends(className, QLatin1String("QComboBox"))) {
+ if (cwi->extends(className, "QComboBox")) {
initializeComboBox(node);
- } else if (cwi->extends(className, QLatin1String("QListWidget"))) {
+ } else if (cwi->extends(className, "QListWidget")) {
initializeListWidget(node);
- } else if (cwi->extends(className, QLatin1String("QTreeWidget"))) {
+ } else if (cwi->extends(className, "QTreeWidget")) {
initializeTreeWidget(node);
- } else if (cwi->extends(className, QLatin1String("QTableWidget"))) {
+ } else if (cwi->extends(className, "QTableWidget")) {
initializeTableWidget(node);
}
@@ -665,7 +670,7 @@ void WriteInitialization::acceptWidget(DomWidget *node)
writeProperties(varName, className, node->elementProperty());
if (!parentWidget.isEmpty()
- && cwi->extends(className, QLatin1String("QMenu"))) {
+ && cwi->extends(className, "QMenu")) {
initializeMenu(node, parentWidget);
}
@@ -673,10 +678,10 @@ void WriteInitialization::acceptWidget(DomWidget *node)
m_layoutChain.push(nullptr);
m_layoutWidget = false;
- if (className == QLatin1String("QWidget") && !node->hasAttributeNative()) {
+ if (className == "QWidget"_L1 && !node->hasAttributeNative()) {
if (const DomWidget* parentWidget = m_widgetChain.top()) {
const QString parentClass = parentWidget->attributeClass();
- if (parentClass != QLatin1String("QMainWindow")
+ if (parentClass != "QMainWindow"_L1
&& !m_uic->customWidgetsInfo()->isCustomWidgetContainer(parentClass)
&& !m_uic->isContainer(parentClass))
m_layoutWidget = true;
@@ -691,32 +696,32 @@ void WriteInitialization::acceptWidget(DomWidget *node)
const DomPropertyMap attributes = propertyMap(node->elementAttribute());
- const QString pageDefaultString = QLatin1String("Page");
+ const QString pageDefaultString = u"Page"_s;
- if (cwi->extends(parentClass, QLatin1String("QMainWindow"))) {
- if (cwi->extends(className, QLatin1String("QMenuBar"))) {
+ if (cwi->extends(parentClass, "QMainWindow")) {
+ if (cwi->extends(className, "QMenuBar")) {
m_output << m_indent << parentWidget << language::derefPointer
<< "setMenuBar(" << varName << ')' << language::eol;
- } else if (cwi->extends(className, QLatin1String("QToolBar"))) {
+ } else if (cwi->extends(className, "QToolBar")) {
m_output << m_indent << parentWidget << language::derefPointer << "addToolBar("
<< language::enumValue(toolBarAreaStringFromDOMAttributes(attributes)) << varName
<< ')' << language::eol;
- if (const DomProperty *pbreak = attributes.value(QLatin1String("toolBarBreak"))) {
- if (pbreak->elementBool() == QLatin1String("true")) {
+ if (const DomProperty *pbreak = attributes.value("toolBarBreak"_L1)) {
+ if (pbreak->elementBool() == "true"_L1) {
m_output << m_indent << parentWidget << language::derefPointer
<< "insertToolBarBreak(" << varName << ')' << language::eol;
}
}
- } else if (cwi->extends(className, QLatin1String("QDockWidget"))) {
+ } else if (cwi->extends(className, "QDockWidget")) {
m_output << m_indent << parentWidget << language::derefPointer << "addDockWidget(";
- if (DomProperty *pstyle = attributes.value(QLatin1String("dockWidgetArea"))) {
- m_output << "Qt" << language::qualifier
- << language::dockWidgetArea(pstyle->elementNumber()) << ", ";
+ if (DomProperty *pstyle = attributes.value("dockWidgetArea"_L1)) {
+ QString a = expandDockWidgetArea(language::dockWidgetArea(pstyle->elementNumber()));
+ m_output << language::enumValue(a) << ", ";
}
m_output << varName << ")" << language::eol;
- } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) {
+ } else if (m_uic->customWidgetsInfo()->extends(className, "QStatusBar")) {
m_output << m_indent << parentWidget << language::derefPointer
<< "setStatusBar(" << varName << ')' << language::eol;
} else {
@@ -732,14 +737,14 @@ void WriteInitialization::acceptWidget(DomWidget *node)
if (!addPageMethod.isEmpty()) {
m_output << m_indent << parentWidget << language::derefPointer
<< addPageMethod << '(' << varName << ')' << language::eol;
- } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QWizard"))) {
+ } else if (m_uic->customWidgetsInfo()->extends(parentClass, "QWizard")) {
addWizardPage(varName, node, parentWidget);
- } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QToolBox"))) {
- const DomProperty *plabel = attributes.value(QLatin1String("label"));
+ } else if (m_uic->customWidgetsInfo()->extends(parentClass, "QToolBox")) {
+ const DomProperty *plabel = attributes.value("label"_L1);
DomString *plabelString = plabel ? plabel->elementString() : nullptr;
QString icon;
- if (const DomProperty *picon = attributes.value(QLatin1String("icon")))
- icon = QLatin1String(", ") + iconCall(picon); // Side effect: Writes icon definition
+ if (const DomProperty *picon = attributes.value("icon"_L1))
+ icon = ", "_L1 + iconCall(picon); // Side effect: Writes icon definition
m_output << m_indent << parentWidget << language::derefPointer << "addItem("
<< varName << icon << ", " << noTrCall(plabelString, pageDefaultString)
<< ')' << language::eol;
@@ -749,7 +754,7 @@ void WriteInitialization::acceptWidget(DomWidget *node)
<< language::derefPointer << "indexOf(" << varName << "), "
<< autoTrCall(plabelString, pageDefaultString) << ')' << language::eol;
- if (DomProperty *ptoolTip = attributes.value(QLatin1String("toolTip"))) {
+ if (DomProperty *ptoolTip = attributes.value("toolTip"_L1)) {
autoTrOutput(ptoolTip->elementString())
<< language::openQtConfig(toolTipConfigKey())
<< m_indent << parentWidget << language::derefPointer << "setItemToolTip(" << parentWidget
@@ -757,12 +762,12 @@ void WriteInitialization::acceptWidget(DomWidget *node)
<< autoTrCall(ptoolTip->elementString()) << ')' << language::eol
<< language::closeQtConfig(toolTipConfigKey());
}
- } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QTabWidget"))) {
- const DomProperty *ptitle = attributes.value(QLatin1String("title"));
+ } else if (m_uic->customWidgetsInfo()->extends(parentClass, "QTabWidget")) {
+ const DomProperty *ptitle = attributes.value("title"_L1);
DomString *ptitleString = ptitle ? ptitle->elementString() : nullptr;
QString icon;
- if (const DomProperty *picon = attributes.value(QLatin1String("icon")))
- icon = QLatin1String(", ") + iconCall(picon); // Side effect: Writes icon definition
+ if (const DomProperty *picon = attributes.value("icon"_L1))
+ icon = ", "_L1 + iconCall(picon); // Side effect: Writes icon definition
m_output << m_indent << parentWidget << language::derefPointer << "addTab("
<< varName << icon << ", " << language::emptyString << ')' << language::eol;
@@ -771,7 +776,7 @@ void WriteInitialization::acceptWidget(DomWidget *node)
<< language::derefPointer << "indexOf(" << varName << "), "
<< autoTrCall(ptitleString, pageDefaultString) << ')' << language::eol;
- if (const DomProperty *ptoolTip = attributes.value(QLatin1String("toolTip"))) {
+ if (const DomProperty *ptoolTip = attributes.value("toolTip"_L1)) {
autoTrOutput(ptoolTip->elementString())
<< language::openQtConfig(toolTipConfigKey())
<< m_indent << parentWidget << language::derefPointer << "setTabToolTip("
@@ -779,7 +784,7 @@ void WriteInitialization::acceptWidget(DomWidget *node)
<< "), " << autoTrCall(ptoolTip->elementString()) << ')' << language::eol
<< language::closeQtConfig(toolTipConfigKey());
}
- if (const DomProperty *pwhatsThis = attributes.value(QLatin1String("whatsThis"))) {
+ if (const DomProperty *pwhatsThis = attributes.value("whatsThis"_L1)) {
autoTrOutput(pwhatsThis->elementString())
<< language::openQtConfig(whatsThisConfigKey())
<< m_indent << parentWidget << language::derefPointer << "setTabWhatsThis("
@@ -792,41 +797,41 @@ void WriteInitialization::acceptWidget(DomWidget *node)
//
// Special handling for qtableview/qtreeview fake header attributes
//
- static const QLatin1String realPropertyNames[] = {
- QLatin1String("visible"),
- QLatin1String("cascadingSectionResizes"),
- QLatin1String("minimumSectionSize"), // before defaultSectionSize
- QLatin1String("defaultSectionSize"),
- QLatin1String("highlightSections"),
- QLatin1String("showSortIndicator"),
- QLatin1String("stretchLastSection"),
+ static const QLatin1StringView realPropertyNames[] = {
+ "visible"_L1,
+ "cascadingSectionResizes"_L1,
+ "minimumSectionSize"_L1, // before defaultSectionSize
+ "defaultSectionSize"_L1,
+ "highlightSections"_L1,
+ "showSortIndicator"_L1,
+ "stretchLastSection"_L1,
};
static const QStringList trees = {
- QLatin1String("QTreeView"), QLatin1String("QTreeWidget")
+ u"QTreeView"_s, u"QTreeWidget"_s
};
static const QStringList tables = {
- QLatin1String("QTableView"), QLatin1String("QTableWidget")
+ u"QTableView"_s, u"QTableWidget"_s
};
if (cwi->extendsOneOf(className, trees)) {
DomPropertyList headerProperties;
for (auto realPropertyName : realPropertyNames) {
- const QString fakePropertyName = QLatin1String("header")
+ const QString fakePropertyName = "header"_L1
+ QChar(realPropertyName.at(0)).toUpper() + realPropertyName.mid(1);
if (DomProperty *fakeProperty = attributes.value(fakePropertyName)) {
fakeProperty->setAttributeName(realPropertyName);
headerProperties << fakeProperty;
}
}
- writeProperties(varName + language::derefPointer + QLatin1String("header()"),
- QLatin1String("QHeaderView"), headerProperties,
+ writeProperties(varName + language::derefPointer + "header()"_L1,
+ "QHeaderView"_L1, headerProperties,
WritePropertyIgnoreObjectName);
} else if (cwi->extendsOneOf(className, tables)) {
- static const QLatin1String headerPrefixes[] = {
- QLatin1String("horizontalHeader"),
- QLatin1String("verticalHeader"),
+ static const QLatin1StringView headerPrefixes[] = {
+ "horizontalHeader"_L1,
+ "verticalHeader"_L1,
};
for (auto headerPrefix : headerPrefixes) {
@@ -840,8 +845,8 @@ void WriteInitialization::acceptWidget(DomWidget *node)
}
}
const QString headerVar = varName + language::derefPointer
- + headerPrefix + QLatin1String("()");
- writeProperties(headerVar, QLatin1String("QHeaderView"),
+ + headerPrefix + "()"_L1;
+ writeProperties(headerVar, "QHeaderView"_L1,
headerProperties, WritePropertyIgnoreObjectName);
}
}
@@ -867,7 +872,7 @@ void WriteInitialization::addButtonGroup(const DomWidget *buttonNode, const QStr
{
const DomPropertyMap attributes = propertyMap(buttonNode->elementAttribute());
// Look up the button group name as specified in the attribute and find the uniquified name
- const DomProperty *prop = attributes.value(QLatin1String("buttonGroup"));
+ const DomProperty *prop = attributes.value("buttonGroup"_L1);
if (!prop)
return;
const QString attributeName = toString(prop->elementString());
@@ -886,7 +891,7 @@ void WriteInitialization::addButtonGroup(const DomWidget *buttonNode, const QStr
const QString groupName = m_driver->findOrInsertButtonGroup(group);
// Create on demand
if (!m_buttonGroups.contains(groupName)) {
- const QString className = QLatin1String("QButtonGroup");
+ const QString className = u"QButtonGroup"_s;
m_output << m_indent;
if (createGroupOnTheFly)
m_output << className << " *";
@@ -905,7 +910,7 @@ void WriteInitialization::acceptLayout(DomLayout *node)
const QString varName = m_driver->findOrInsertLayout(node);
const DomPropertyMap properties = propertyMap(node->elementProperty());
- const bool oldLayoutProperties = properties.value(QLatin1String("margin")) != nullptr;
+ const bool oldLayoutProperties = properties.value("margin"_L1) != nullptr;
bool isGroupBox = false;
@@ -932,36 +937,36 @@ void WriteInitialization::acceptLayout(DomLayout *node)
left = top = right = bottom = false;
for (const DomProperty *p : propList) {
const QString propertyName = p->attributeName();
- if (propertyName == QLatin1String("leftMargin") && p->kind() == DomProperty::Number)
+ if (propertyName == "leftMargin"_L1 && p->kind() == DomProperty::Number)
left = true;
- else if (propertyName == QLatin1String("topMargin") && p->kind() == DomProperty::Number)
+ else if (propertyName == "topMargin"_L1 && p->kind() == DomProperty::Number)
top = true;
- else if (propertyName == QLatin1String("rightMargin") && p->kind() == DomProperty::Number)
+ else if (propertyName == "rightMargin"_L1 && p->kind() == DomProperty::Number)
right = true;
- else if (propertyName == QLatin1String("bottomMargin") && p->kind() == DomProperty::Number)
+ else if (propertyName == "bottomMargin"_L1 && p->kind() == DomProperty::Number)
bottom = true;
}
if (!left) {
DomProperty *p = new DomProperty();
- p->setAttributeName(QLatin1String("leftMargin"));
+ p->setAttributeName("leftMargin"_L1);
p->setElementNumber(0);
newPropList.append(p);
}
if (!top) {
DomProperty *p = new DomProperty();
- p->setAttributeName(QLatin1String("topMargin"));
+ p->setAttributeName("topMargin"_L1);
p->setElementNumber(0);
newPropList.append(p);
}
if (!right) {
DomProperty *p = new DomProperty();
- p->setAttributeName(QLatin1String("rightMargin"));
+ p->setAttributeName("rightMargin"_L1);
p->setElementNumber(0);
newPropList.append(p);
}
if (!bottom) {
DomProperty *p = new DomProperty();
- p->setAttributeName(QLatin1String("bottomMargin"));
+ p->setAttributeName("bottomMargin"_L1);
p->setElementNumber(0);
newPropList.append(p);
}
@@ -982,12 +987,12 @@ void WriteInitialization::acceptLayout(DomLayout *node)
m_layoutChain.pop();
// Stretch? (Unless we are compiling for UIC3)
- const QString numberNull = QString(QLatin1Char('0'));
- writePropertyList(varName, QLatin1String("setStretch"), node->attributeStretch(), numberNull);
- writePropertyList(varName, QLatin1String("setRowStretch"), node->attributeRowStretch(), numberNull);
- writePropertyList(varName, QLatin1String("setColumnStretch"), node->attributeColumnStretch(), numberNull);
- writePropertyList(varName, QLatin1String("setColumnMinimumWidth"), node->attributeColumnMinimumWidth(), numberNull);
- writePropertyList(varName, QLatin1String("setRowMinimumHeight"), node->attributeRowMinimumHeight(), numberNull);
+ const QString numberNull(u'0');
+ writePropertyList(varName, "setStretch"_L1, node->attributeStretch(), numberNull);
+ writePropertyList(varName, "setRowStretch"_L1, node->attributeRowStretch(), numberNull);
+ writePropertyList(varName, "setColumnStretch"_L1, node->attributeColumnStretch(), numberNull);
+ writePropertyList(varName, "setColumnMinimumWidth"_L1, node->attributeColumnMinimumWidth(), numberNull);
+ writePropertyList(varName, "setRowMinimumHeight"_L1, node->attributeRowMinimumHeight(), numberNull);
}
// Apply a comma-separated list of values using a function "setSomething(int idx, value)"
@@ -998,8 +1003,8 @@ void WriteInitialization::writePropertyList(const QString &varName,
{
if (value.isEmpty())
return;
- const QStringList list = value.split(QLatin1Char(','));
- const int count = list.count();
+ const QStringList list = value.split(u',');
+ const int count = list.size();
for (int i = 0; i < count; i++) {
if (list.at(i) != defaultValue) {
m_output << m_indent << varName << language::derefPointer << setFunction
@@ -1018,21 +1023,20 @@ void WriteInitialization::acceptSpacer(DomSpacer *node)
static inline QString formLayoutRole(int column, int colspan)
{
if (colspan > 1)
- return QLatin1String("QFormLayout::SpanningRole");
- return column == 0 ? QLatin1String("QFormLayout::LabelRole") : QLatin1String("QFormLayout::FieldRole");
+ return "QFormLayout::SpanningRole"_L1;
+ return column == 0 ? "QFormLayout::LabelRole"_L1 : "QFormLayout::FieldRole"_L1;
}
static QString layoutAddMethod(DomLayoutItem::Kind kind, const QString &layoutClass)
{
- const QString methodPrefix = layoutClass == QLatin1String("QFormLayout")
- ? QLatin1String("set") : QLatin1String("add");
+ const auto methodPrefix = layoutClass == "QFormLayout"_L1 ? "set"_L1 : "add"_L1;
switch (kind) {
case DomLayoutItem::Widget:
- return methodPrefix + QLatin1String("Widget");
+ return methodPrefix + "Widget"_L1;
case DomLayoutItem::Layout:
- return methodPrefix + QLatin1String("Layout");
+ return methodPrefix + "Layout"_L1;
case DomLayoutItem::Spacer:
- return methodPrefix + QLatin1String("Item");
+ return methodPrefix + "Item"_L1;
case DomLayoutItem::Unknown:
Q_ASSERT( false );
break;
@@ -1055,7 +1059,7 @@ void WriteInitialization::acceptLayoutItem(DomLayoutItem *node)
m_output << "\n" << m_indent << layoutName << language::derefPointer << ""
<< layoutAddMethod(node->kind(), layout->attributeClass()) << '(';
- if (layout->attributeClass() == QLatin1String("QGridLayout")) {
+ if (layout->attributeClass() == "QGridLayout"_L1) {
const int row = node->attributeRow();
const int col = node->attributeColumn();
@@ -1064,14 +1068,14 @@ void WriteInitialization::acceptLayoutItem(DomLayoutItem *node)
m_output << itemName << ", " << row << ", " << col << ", " << rowSpan << ", " << colSpan;
if (!node->attributeAlignment().isEmpty())
m_output << ", " << language::enumValue(node->attributeAlignment());
- } else if (layout->attributeClass() == QLatin1String("QFormLayout")) {
+ } else if (layout->attributeClass() == "QFormLayout"_L1) {
const int row = node->attributeRow();
const int colSpan = node->hasAttributeColSpan() ? node->attributeColSpan() : 1;
const QString role = formLayoutRole(node->attributeColumn(), colSpan);
m_output << row << ", " << language::enumValue(role) << ", " << itemName;
} else {
m_output << itemName;
- if (layout->attributeClass().contains(QLatin1String("Box")) && !node->attributeAlignment().isEmpty())
+ if (layout->attributeClass().contains("Box"_L1) && !node->attributeAlignment().isEmpty())
m_output << ", 0, " << language::enumValue(node->attributeAlignment());
}
m_output << ")" << language::eol << "\n";
@@ -1087,7 +1091,7 @@ void WriteInitialization::acceptActionGroup(DomActionGroup *node)
m_output << m_indent << actionName << " = " << language::operatorNew
<< "QActionGroup(" << varName << ")" << language::eol;
- writeProperties(actionName, QLatin1String("QActionGroup"), node->elementProperty());
+ writeProperties(actionName, "QActionGroup"_L1, node->elementProperty());
m_actionGroupChain.push(node);
TreeWalker::acceptActionGroup(node);
@@ -1107,7 +1111,7 @@ void WriteInitialization::acceptAction(DomAction *node)
m_output << m_indent << actionName << " = " << language::operatorNew
<< "QAction(" << varName << ')' << language::eol;
- writeProperties(actionName, QLatin1String("QAction"), node->elementProperty());
+ writeProperties(actionName, "QAction"_L1, node->elementProperty());
}
void WriteInitialization::acceptActionRef(DomActionRef *node)
@@ -1120,7 +1124,7 @@ void WriteInitialization::acceptActionRef(DomActionRef *node)
const QString varName = m_driver->findOrInsertWidget(m_widgetChain.top());
- if (m_widgetChain.top() && actionName == QLatin1String("separator")) {
+ if (m_widgetChain.top() && actionName == "separator"_L1) {
// separator is always reserved!
m_actionOut << m_indent << varName << language::derefPointer
<< "addSeparator()" << language::eol;
@@ -1151,35 +1155,50 @@ QString WriteInitialization::writeStringListProperty(const DomStringList *list)
{
QString propertyValue;
QTextStream str(&propertyValue);
- str << "QStringList()";
+ char trailingDelimiter = '}';
+ switch (language::language()) {
+ case Language::Cpp:
+ str << "QStringList{";
+ break;
+ case Language::Python:
+ str << '[';
+ trailingDelimiter = ']';
+ break;
+ }
const QStringList values = list->elementString();
- if (values.isEmpty())
- return propertyValue;
- if (needsTranslation(list)) {
- const QString comment = list->attributeComment();
- for (int i = 0; i < values.size(); ++i)
- str << '\n' << m_indent << " << " << trCall(values.at(i), comment);
- } else {
- for (int i = 0; i < values.size(); ++i)
- str << " << " << language::qstring(values.at(i), m_dindent);
+ if (!values.isEmpty()) {
+ if (needsTranslation(list)) {
+ const QString comment = list->attributeComment();
+ const qsizetype last = values.size() - 1;
+ for (qsizetype i = 0; i <= last; ++i) {
+ str << '\n' << m_indent << " " << trCall(values.at(i), comment);
+ if (i != last)
+ str << ',';
+ }
+ } else {
+ for (qsizetype i = 0; i < values.size(); ++i) {
+ if (i)
+ str << ", ";
+ str << language::qstring(values.at(i), m_dindent);
+ }
+ }
}
+ str << trailingDelimiter;
return propertyValue;
}
static QString configKeyForProperty(const QString &propertyName)
{
- if (propertyName == QLatin1String("toolTip"))
+ if (propertyName == "toolTip"_L1)
return toolTipConfigKey();
- if (propertyName == QLatin1String("whatsThis"))
+ if (propertyName == "whatsThis"_L1)
return whatsThisConfigKey();
- if (propertyName == QLatin1String("statusTip"))
+ if (propertyName == "statusTip"_L1)
return statusTipConfigKey();
- if (propertyName == QLatin1String("shortcut"))
+ if (propertyName == "shortcut"_L1)
return shortcutConfigKey();
- if (propertyName == QLatin1String("accessibleName")
- || propertyName == QLatin1String("accessibleDescription")) {
+ if (propertyName == "accessibleName"_L1 || propertyName == "accessibleDescription"_L1)
return accessibilityConfigKey();
- }
return QString();
}
@@ -1188,11 +1207,11 @@ void WriteInitialization::writeProperties(const QString &varName,
const DomPropertyList &lst,
unsigned flags)
{
- const bool isTopLevel = m_widgetChain.count() == 1;
+ const bool isTopLevel = m_widgetChain.size() == 1;
- if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QAxWidget"))) {
+ if (m_uic->customWidgetsInfo()->extends(className, "QAxWidget")) {
DomPropertyMap properties = propertyMap(lst);
- if (DomProperty *p = properties.value(QLatin1String("control"))) {
+ if (DomProperty *p = properties.value("control"_L1)) {
m_output << m_indent << varName << language::derefPointer << "setControl("
<< language::qstring(toString(p->elementString()), m_dindent)
<< ')' << language::eol;
@@ -1217,7 +1236,7 @@ void WriteInitialization::writeProperties(const QString &varName,
objectName.remove(0, language::self.size());
m_output << m_indent << indent
<< varName << language::derefPointer << "setObjectName("
- << language::qstring(objectName, m_dindent) << ')' << language::eol;
+ << language::charliteral(objectName, m_dindent) << ')' << language::eol;
}
int leftMargin, topMargin, rightMargin, bottomMargin;
@@ -1232,58 +1251,58 @@ void WriteInitialization::writeProperties(const QString &varName,
bool delayProperty = false;
// special case for the property `geometry': Do not use position
- if (isTopLevel && propertyName == QLatin1String("geometry") && p->elementRect()) {
+ if (isTopLevel && propertyName == "geometry"_L1 && p->elementRect()) {
const DomRect *r = p->elementRect();
m_output << m_indent << varName << language::derefPointer << "resize("
<< r->elementWidth() << ", " << r->elementHeight() << ')' << language::eol;
continue;
}
- if (propertyName == QLatin1String("currentRow") // QListWidget::currentRow
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QListWidget"))) {
+ if (propertyName == "currentRow"_L1 // QListWidget::currentRow
+ && m_uic->customWidgetsInfo()->extends(className, "QListWidget")) {
m_delayedOut << m_indent << varName << language::derefPointer
<< "setCurrentRow(" << p->elementNumber() << ')' << language::eol;
continue;
}
static const QStringList currentIndexWidgets = {
- QLatin1String("QComboBox"), QLatin1String("QStackedWidget"),
- QLatin1String("QTabWidget"), QLatin1String("QToolBox")
+ u"QComboBox"_s, u"QStackedWidget"_s,
+ u"QTabWidget"_s, u"QToolBox"_s
};
- if (propertyName == QLatin1String("currentIndex") // set currentIndex later
+ if (propertyName == "currentIndex"_L1 // set currentIndex later
&& (m_uic->customWidgetsInfo()->extendsOneOf(className, currentIndexWidgets))) {
m_delayedOut << m_indent << varName << language::derefPointer
<< "setCurrentIndex(" << p->elementNumber() << ')' << language::eol;
continue;
}
- if (propertyName == QLatin1String("tabSpacing")
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QToolBox"))) {
+ if (propertyName == "tabSpacing"_L1
+ && m_uic->customWidgetsInfo()->extends(className, "QToolBox")) {
m_delayedOut << m_indent << varName << language::derefPointer
<< "layout()" << language::derefPointer << "setSpacing("
<< p->elementNumber() << ')' << language::eol;
continue;
}
- if (propertyName == QLatin1String("control") // ActiveQt support
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QAxWidget"))) {
+ if (propertyName == "control"_L1 // ActiveQt support
+ && m_uic->customWidgetsInfo()->extends(className, "QAxWidget")) {
// already done ;)
continue;
}
- if (propertyName == QLatin1String("default")
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QPushButton"))) {
+ if (propertyName == "default"_L1
+ && m_uic->customWidgetsInfo()->extends(className, "QPushButton")) {
// QTBUG-44406: Setting of QPushButton::default needs to be delayed until the parent is set
delayProperty = true;
- } else if (propertyName == QLatin1String("database")
+ } else if (propertyName == "database"_L1
&& p->elementStringList()) {
// Sql support
continue;
- } else if (propertyName == QLatin1String("frameworkCode")
+ } else if (propertyName == "frameworkCode"_L1
&& p->kind() == DomProperty::Bool) {
// Sql support
continue;
- } else if (propertyName == QLatin1String("orientation")
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("Line"))) {
+ } else if (propertyName == "orientation"_L1
+ && m_uic->customWidgetsInfo()->extends(className, "Line")) {
// Line support
- QString shape = QLatin1String("QFrame::HLine");
- if (p->elementEnum() == QLatin1String("Qt::Vertical"))
- shape = QLatin1String("QFrame::VLine");
+ QString shape = u"QFrame::Shape::HLine"_s;
+ if (p->elementEnum().endsWith("::Vertical"_L1))
+ shape = u"QFrame::Shape::VLine"_s;
m_output << m_indent << varName << language::derefPointer << "setFrameShape("
<< language::enumValue(shape) << ')' << language::eol;
@@ -1291,32 +1310,32 @@ void WriteInitialization::writeProperties(const QString &varName,
if (!frameShadowEncountered) {
m_output << m_indent << varName << language::derefPointer
<< "setFrameShadow("
- << language::enumValue(QLatin1String("QFrame::Sunken"))
+ << language::enumValue("QFrame::Shadow::Sunken"_L1)
<< ')' << language::eol;
}
continue;
- } else if ((flags & WritePropertyIgnoreMargin) && propertyName == QLatin1String("margin")) {
+ } else if ((flags & WritePropertyIgnoreMargin) && propertyName == "margin"_L1) {
continue;
- } else if ((flags & WritePropertyIgnoreSpacing) && propertyName == QLatin1String("spacing")) {
+ } else if ((flags & WritePropertyIgnoreSpacing) && propertyName == "spacing"_L1) {
continue;
- } else if (propertyName == QLatin1String("leftMargin") && p->kind() == DomProperty::Number) {
+ } else if (propertyName == "leftMargin"_L1 && p->kind() == DomProperty::Number) {
leftMargin = p->elementNumber();
continue;
- } else if (propertyName == QLatin1String("topMargin") && p->kind() == DomProperty::Number) {
+ } else if (propertyName == "topMargin"_L1 && p->kind() == DomProperty::Number) {
topMargin = p->elementNumber();
continue;
- } else if (propertyName == QLatin1String("rightMargin") && p->kind() == DomProperty::Number) {
+ } else if (propertyName == "rightMargin"_L1 && p->kind() == DomProperty::Number) {
rightMargin = p->elementNumber();
continue;
- } else if (propertyName == QLatin1String("bottomMargin") && p->kind() == DomProperty::Number) {
+ } else if (propertyName == "bottomMargin"_L1 && p->kind() == DomProperty::Number) {
bottomMargin = p->elementNumber();
continue;
- } else if (propertyName == QLatin1String("numDigits") // Deprecated in Qt 4, removed in Qt 5.
- && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QLCDNumber"))) {
+ } else if (propertyName == "numDigits"_L1 // Deprecated in Qt 4, removed in Qt 5.
+ && m_uic->customWidgetsInfo()->extends(className, "QLCDNumber")) {
qWarning("Widget '%s': Deprecated property QLCDNumber::numDigits encountered. It has been replaced by QLCDNumber::digitCount.",
qPrintable(varName));
- propertyName = QLatin1String("digitCount");
- } else if (propertyName == QLatin1String("frameShadow")) {
+ propertyName = "digitCount"_L1;
+ } else if (propertyName == "frameShadow"_L1) {
frameShadowEncountered = true;
}
@@ -1332,7 +1351,7 @@ void WriteInitialization::writeProperties(const QString &varName,
str << language::derefPointer <<"set" << propertyName.at(0).toUpper()
<< QStringView{propertyName}.mid(1) << '(';
} else {
- str << language::derefPointer << QLatin1String("setProperty(\"")
+ str << language::derefPointer << "setProperty(\""_L1
<< propertyName << "\", ";
if (language::language() == Language::Cpp) {
str << "QVariant";
@@ -1354,15 +1373,16 @@ void WriteInitialization::writeProperties(const QString &varName,
propertyValue = domColor2QString(p->elementColor());
break;
case DomProperty::Cstring:
- if (propertyName == QLatin1String("buddy") && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QLabel"))) {
+ if (propertyName == "buddy"_L1 && m_uic->customWidgetsInfo()->extends(className, "QLabel")) {
Buddy buddy = { varName, p->elementCstring() };
m_buddies.append(std::move(buddy));
} else {
+ const bool useQByteArray = !stdset && language::language() == Language::Cpp;
QTextStream str(&propertyValue);
- if (!stdset)
+ if (useQByteArray)
str << "QByteArray(";
str << language::charliteral(p->elementCstring(), m_dindent);
- if (!stdset)
+ if (useQByteArray)
str << ')';
}
break;
@@ -1372,9 +1392,9 @@ void WriteInitialization::writeProperties(const QString &varName,
break;
case DomProperty::CursorShape:
if (p->hasAttributeStdset() && !p->attributeStdset())
- varNewName += language::derefPointer + QLatin1String("viewport()");
- propertyValue = QLatin1String("QCursor(Qt") + language::qualifier
- + p->elementCursorShape() + QLatin1Char(')');
+ varNewName += language::derefPointer + "viewport()"_L1;
+ propertyValue = "QCursor(Qt"_L1 + language::qualifier
+ + p->elementCursorShape() + u')';
break;
case DomProperty::Enum:
propertyValue = p->elementEnum();
@@ -1397,12 +1417,12 @@ void WriteInitialization::writeProperties(const QString &varName,
break;
case DomProperty::Palette: {
const DomPalette *pal = p->elementPalette();
- const QString paletteName = m_driver->unique(QLatin1String("palette"));
+ const QString paletteName = m_driver->unique("palette"_L1);
m_output << m_indent << language::stackVariable("QPalette", paletteName)
<< language::eol;
- writeColorGroup(pal->elementActive(), QLatin1String("QPalette::Active"), paletteName);
- writeColorGroup(pal->elementInactive(), QLatin1String("QPalette::Inactive"), paletteName);
- writeColorGroup(pal->elementDisabled(), QLatin1String("QPalette::Disabled"), paletteName);
+ writeColorGroup(pal->elementActive(), "QPalette::Active"_L1, paletteName);
+ writeColorGroup(pal->elementInactive(), "QPalette::Inactive"_L1, paletteName);
+ writeColorGroup(pal->elementDisabled(), "QPalette::Disabled"_L1, paletteName);
propertyValue = paletteName;
break;
@@ -1462,7 +1482,7 @@ void WriteInitialization::writeProperties(const QString &varName,
break;
}
case DomProperty::String: {
- if (propertyName == QLatin1String("objectName")) {
+ if (propertyName == "objectName"_L1) {
const QString v = p->elementString()->text();
if (v == varName)
break;
@@ -1478,17 +1498,17 @@ void WriteInitialization::writeProperties(const QString &varName,
break;
case DomProperty::UInt:
propertyValue = QString::number(p->elementUInt());
- propertyValue += QLatin1Char('u');
+ propertyValue += u'u';
break;
case DomProperty::LongLong:
- propertyValue = QLatin1String("Q_INT64_C(");
+ propertyValue = "Q_INT64_C("_L1;
propertyValue += QString::number(p->elementLongLong());
- propertyValue += QLatin1Char(')');;
+ propertyValue += u')';
break;
case DomProperty::ULongLong:
- propertyValue = QLatin1String("Q_UINT64_C(");
+ propertyValue = "Q_UINT64_C("_L1;
propertyValue += QString::number(p->elementULongLong());
- propertyValue += QLatin1Char(')');
+ propertyValue += u')';
break;
case DomProperty::Float:
propertyValue = QString::number(p->elementFloat(), 'f', 8);
@@ -1586,16 +1606,22 @@ QString WriteInitialization::writeSizePolicy(const DomSizePolicy *sp)
// insert with new name
- const QString spName = m_driver->unique(QLatin1String("sizePolicy"));
+ const QString spName = m_driver->unique("sizePolicy"_L1);
m_sizePolicyNameMap.insert(sizePolicyHandle, spName);
m_output << m_indent << language::stackVariableWithInitParameters("QSizePolicy", spName);
+ QString horizPolicy;
+ QString vertPolicy;
if (sp->hasElementHSizeType() && sp->hasElementVSizeType()) {
- m_output << "QSizePolicy" << language::qualifier << language::sizePolicy(sp->elementHSizeType())
- << ", QSizePolicy" << language::qualifier << language::sizePolicy(sp->elementVSizeType());
+ horizPolicy = language::sizePolicy(sp->elementHSizeType());
+ vertPolicy = language::sizePolicy(sp->elementVSizeType());
} else if (sp->hasAttributeHSizeType() && sp->hasAttributeVSizeType()) {
- m_output << "QSizePolicy" << language::qualifier << sp->attributeHSizeType()
- << ", QSizePolicy" << language::qualifier << sp->attributeVSizeType();
+ horizPolicy = sp->attributeHSizeType();
+ vertPolicy = sp->attributeVSizeType();
+ }
+ if (!horizPolicy.isEmpty() && !vertPolicy.isEmpty()) {
+ m_output << language::enumValue(expandSizePolicyEnum(horizPolicy))
+ << ", " << language::enumValue(expandSizePolicyEnum(vertPolicy));
}
m_output << ')' << language::eol;
@@ -1618,24 +1644,30 @@ QString WriteInitialization::writeFontProperties(const DomFont *f)
}
// insert with new name
- const QString fontName = m_driver->unique(QLatin1String("font"));
+ const QString fontName = m_driver->unique("font"_L1);
m_fontPropertiesNameMap.insert(FontHandle(f), fontName);
m_output << m_indent << language::stackVariable("QFont", fontName)
<< language::eol;
if (f->hasElementFamily() && !f->elementFamily().isEmpty()) {
- m_output << m_indent << fontName << ".setFamilies(QStringList{"
- << language::qstring(f->elementFamily(), m_dindent) << "})" << language::eol;
+ m_output << m_indent << fontName << ".setFamilies("
+ << language::listStart
+ << language::qstring(f->elementFamily(), m_dindent)
+ << language::listEnd << ')' << language::eol;
}
if (f->hasElementPointSize() && f->elementPointSize() > 0) {
m_output << m_indent << fontName << ".setPointSize(" << f->elementPointSize()
<< ")" << language::eol;
}
- if (f->hasElementBold()) {
+ if (f->hasElementFontWeight()) {
+ m_output << m_indent << fontName << ".setWeight(QFont"
+ << language::qualifier << f->elementFontWeight() << ')' << language::eol;
+ } else if (f->hasElementBold()) {
m_output << m_indent << fontName << ".setBold("
<< language::boolValue(f->elementBold()) << ')' << language::eol;
}
+
if (f->hasElementItalic()) {
m_output << m_indent << fontName << ".setItalic("
<< language::boolValue(f->elementItalic()) << ')' << language::eol;
@@ -1662,6 +1694,11 @@ QString WriteInitialization::writeFontProperties(const DomFont *f)
m_output << m_indent << fontName << ".setStyleStrategy(QFont"
<< language::qualifier << f->elementStyleStrategy() << ')' << language::eol;
}
+ if (f->hasElementHintingPreference()) {
+ m_output << m_indent << fontName << ".setHintingPreference(QFont"
+ << language::qualifier << f->elementHintingPreference() << ')' << language::eol;
+ }
+
return fontName;
}
@@ -1731,46 +1768,99 @@ void WriteInitialization::writePixmapFunctionIcon(QTextStream &output,
{
if (i->hasElementNormalOff()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementNormalOff()->text()),
+ pixCall("QPixmap"_L1, i->elementNormalOff()->text()),
"Normal", "Off");
}
if (i->hasElementNormalOn()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementNormalOn()->text()),
+ pixCall("QPixmap"_L1, i->elementNormalOn()->text()),
"Normal", "On");
}
if (i->hasElementDisabledOff()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementDisabledOff()->text()),
+ pixCall("QPixmap"_L1, i->elementDisabledOff()->text()),
"Disabled", "Off");
}
if (i->hasElementDisabledOn()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementDisabledOn()->text()),
+ pixCall("QPixmap"_L1, i->elementDisabledOn()->text()),
"Disabled", "On");
}
if (i->hasElementActiveOff()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementActiveOff()->text()),
+ pixCall("QPixmap"_L1, i->elementActiveOff()->text()),
"Active", "Off");
}
if (i->hasElementActiveOn()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementActiveOn()->text()),
+ pixCall("QPixmap"_L1, i->elementActiveOn()->text()),
"Active", "On");
}
if (i->hasElementSelectedOff()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementSelectedOff()->text()),
+ pixCall("QPixmap"_L1, i->elementSelectedOff()->text()),
"Selected", "Off");
}
if (i->hasElementSelectedOn()) {
writeIconAddPixmap(output, indent, iconName,
- pixCall(QLatin1String("QPixmap"), i->elementSelectedOn()->text()),
+ pixCall("QPixmap"_L1, i->elementSelectedOn()->text()),
"Selected", "On");
}
}
+// Write QIcon::fromTheme() (value from enum or variable)
+struct iconFromTheme
+{
+ explicit iconFromTheme(const QString &theme) : m_theme(theme) {}
+
+ QString m_theme;
+};
+
+QTextStream &operator<<(QTextStream &str, const iconFromTheme &i)
+{
+ str << "QIcon" << language::qualifier << "fromTheme(" << i.m_theme << ')';
+ return str;
+}
+
+// Write QIcon::fromTheme() for an XDG icon from string literal
+struct iconFromThemeStringLiteral
+{
+ explicit iconFromThemeStringLiteral(const QString &theme) : m_theme(theme) {}
+
+ QString m_theme;
+};
+
+QTextStream &operator<<(QTextStream &str, const iconFromThemeStringLiteral &i)
+{
+ str << "QIcon" << language::qualifier << "fromTheme(" << language::qstring(i.m_theme) << ')';
+ return str;
+}
+
+// Write QIcon::fromTheme() with a path as fallback, add a check using
+// QIcon::hasThemeIcon().
+void WriteInitialization::writeThemeIconCheckAssignment(const QString &themeValue,
+ const QString &iconName,
+ const DomResourceIcon *i)
+
+{
+ const bool isCpp = language::language() == Language::Cpp;
+ m_output << m_indent << "if ";
+ if (isCpp)
+ m_output << '(';
+ m_output << "QIcon" << language::qualifier << "hasThemeIcon("
+ << themeValue << ')' << (isCpp ? ") {" : ":") << '\n'
+ << m_dindent << iconName << " = " << iconFromTheme(themeValue)
+ << language::eol;
+ m_output << m_indent << (isCpp ? "} else {" : "else:") << '\n';
+ if (m_uic->pixmapFunction().isEmpty())
+ writeResourceIcon(m_output, iconName, m_dindent, i);
+ else
+ writePixmapFunctionIcon(m_output, iconName, m_dindent, i);
+ if (isCpp)
+ m_output << m_indent << '}';
+ m_output << '\n';
+}
+
QString WriteInitialization::writeIconProperties(const DomResourceIcon *i)
{
// check cache
@@ -1780,7 +1870,7 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i)
return it.value();
// insert with new name
- const QString iconName = m_driver->unique(QLatin1String("icon"));
+ const QString iconName = m_driver->unique("icon"_L1);
m_iconPropertiesNameMap.insert(IconHandle(i), iconName);
const bool isCpp = language::language() == Language::Cpp;
@@ -1789,13 +1879,14 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i)
m_output << m_indent;
if (isCpp)
m_output << "const QIcon ";
- m_output << iconName << " = " << pixCall(QLatin1String("QIcon"), i->text())
+ m_output << iconName << " = " << pixCall("QIcon"_L1, i->text())
<< language::eol;
return iconName;
}
// 4.4 onwards
- if (i->attributeTheme().isEmpty()) {
+ QString theme = i->attributeTheme();
+ if (theme.isEmpty()) {
// No theme: Write resource icon as is
m_output << m_indent << language::stackVariable("QIcon", iconName)
<< language::eol;
@@ -1806,12 +1897,21 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i)
return iconName;
}
+ const bool isThemeEnum = theme.startsWith("QIcon::"_L1);
+ if (isThemeEnum)
+ theme = language::enumValue(theme);
+
// Theme: Generate code to check the theme and default to resource
if (iconHasStatePixmaps(i)) {
// Theme + default state pixmaps:
// Generate code to check the theme and default to state pixmaps
m_output << m_indent << language::stackVariable("QIcon", iconName) << language::eol;
- const char themeNameStringVariableC[] = "iconThemeName";
+ if (isThemeEnum) {
+ writeThemeIconCheckAssignment(theme, iconName, i);
+ return iconName;
+ }
+
+ static constexpr auto themeNameStringVariableC = "iconThemeName"_L1;
// Store theme name in a variable
m_output << m_indent;
if (m_firstThemeIcon) { // Declare variable string
@@ -1820,32 +1920,19 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i)
m_firstThemeIcon = false;
}
m_output << themeNameStringVariableC << " = "
- << language::qstring(i->attributeTheme()) << language::eol;
- m_output << m_indent << "if ";
- if (isCpp)
- m_output << '(';
- m_output << "QIcon" << language::qualifier << "hasThemeIcon("
- << themeNameStringVariableC << ')' << (isCpp ? ") {" : ":") << '\n'
- << m_dindent << iconName << " = QIcon" << language::qualifier << "fromTheme("
- << themeNameStringVariableC << ')' << language::eol
- << m_indent << (isCpp ? "} else {" : "else:") << '\n';
- if (m_uic->pixmapFunction().isEmpty())
- writeResourceIcon(m_output, iconName, m_dindent, i);
- else
- writePixmapFunctionIcon(m_output, iconName, m_dindent, i);
- m_output << m_indent;
- if (isCpp)
- m_output << '}';
- m_output << '\n';
+ << language::qstring(theme) << language::eol;
+ writeThemeIconCheckAssignment(themeNameStringVariableC, iconName, i);
return iconName;
}
// Theme, but no state pixmaps: Construct from theme directly.
m_output << m_indent
- << language::stackVariableWithInitParameters("QIcon", iconName)
- << "QIcon" << language::qualifier << "fromTheme("
- << language::qstring(i->attributeTheme()) << "))"
- << language::eol;
+ << language::stackVariableWithInitParameters("QIcon", iconName);
+ if (isThemeEnum)
+ m_output << iconFromTheme(theme);
+ else
+ m_output << iconFromThemeStringLiteral(theme);
+ m_output << ')' << language::eol;
return iconName;
}
@@ -1865,7 +1952,7 @@ QString WriteInitialization::domColor2QString(const DomColor *c)
static inline QVersionNumber colorRoleVersionAdded(const QString &roleName)
{
- if (roleName == QLatin1String("PlaceholderText"))
+ if (roleName == "PlaceholderText"_L1)
return QVersionNumber(5, 12, 0);
return QVersionNumber();
}
@@ -1913,7 +2000,7 @@ void WriteInitialization::writeColorGroup(DomColorGroup *colorGroup, const QStri
QString WriteInitialization::writeBrushInitialization(const DomBrush *brush)
{
// Simple solid, colored brushes are cached
- const bool solidColoredBrush = !brush->hasAttributeBrushStyle() || brush->attributeBrushStyle() == QLatin1String("SolidPattern");
+ const bool solidColoredBrush = !brush->hasAttributeBrushStyle() || brush->attributeBrushStyle() == "SolidPattern"_L1;
uint rgb = 0;
if (solidColoredBrush) {
if (const DomColor *color = brush->elementColor()) {
@@ -1927,7 +2014,7 @@ QString WriteInitialization::writeBrushInitialization(const DomBrush *brush)
}
}
// Create and enter into cache if simple
- const QString brushName = m_driver->unique(QLatin1String("brush"));
+ const QString brushName = m_driver->unique("brush"_L1);
writeBrush(brush, brushName);
if (solidColoredBrush)
m_colorBrushHash.insert(rgb, brushName);
@@ -1936,24 +2023,24 @@ QString WriteInitialization::writeBrushInitialization(const DomBrush *brush)
void WriteInitialization::writeBrush(const DomBrush *brush, const QString &brushName)
{
- QString style = QLatin1String("SolidPattern");
+ QString style = u"SolidPattern"_s;
if (brush->hasAttributeBrushStyle())
style = brush->attributeBrushStyle();
- if (style == QLatin1String("LinearGradientPattern") ||
- style == QLatin1String("RadialGradientPattern") ||
- style == QLatin1String("ConicalGradientPattern")) {
+ if (style == "LinearGradientPattern"_L1 ||
+ style == "RadialGradientPattern"_L1 ||
+ style == "ConicalGradientPattern"_L1) {
const DomGradient *gradient = brush->elementGradient();
const QString gradientType = gradient->attributeType();
- const QString gradientName = m_driver->unique(QLatin1String("gradient"));
- if (gradientType == QLatin1String("LinearGradient")) {
+ const QString gradientName = m_driver->unique("gradient"_L1);
+ if (gradientType == "LinearGradient"_L1) {
m_output << m_indent
<< language::stackVariableWithInitParameters("QLinearGradient", gradientName)
<< gradient->attributeStartX()
<< ", " << gradient->attributeStartY()
<< ", " << gradient->attributeEndX()
<< ", " << gradient->attributeEndY() << ')' << language::eol;
- } else if (gradientType == QLatin1String("RadialGradient")) {
+ } else if (gradientType == "RadialGradient"_L1) {
m_output << m_indent
<< language::stackVariableWithInitParameters("QRadialGradient", gradientName)
<< gradient->attributeCentralX()
@@ -1961,7 +2048,7 @@ void WriteInitialization::writeBrush(const DomBrush *brush, const QString &brush
<< ", " << gradient->attributeRadius()
<< ", " << gradient->attributeFocalX()
<< ", " << gradient->attributeFocalY() << ')' << language::eol;
- } else if (gradientType == QLatin1String("ConicalGradient")) {
+ } else if (gradientType == "ConicalGradient"_L1) {
m_output << m_indent
<< language::stackVariableWithInitParameters("QConicalGradient", gradientName)
<< gradient->attributeCentralX()
@@ -1989,7 +2076,7 @@ void WriteInitialization::writeBrush(const DomBrush *brush, const QString &brush
m_output << m_indent
<< language::stackVariableWithInitParameters("QBrush", brushName)
<< gradientName << ')' << language::eol;
- } else if (style == QLatin1String("TexturePattern")) {
+ } else if (style == "TexturePattern"_L1) {
const DomProperty *property = brush->elementTexture();
const QString iconValue = iconCall(property);
@@ -2054,42 +2141,42 @@ QString WriteInitialization::iconCall(const DomProperty *icon)
QString WriteInitialization::pixCall(const DomProperty *p) const
{
- QString type, s;
+ QLatin1StringView type;
+ QString s;
switch (p->kind()) {
case DomProperty::IconSet:
- type = QLatin1String("QIcon");
+ type = "QIcon"_L1;
s = p->elementIconSet()->text();
break;
case DomProperty::Pixmap:
- type = QLatin1String("QPixmap");
+ type = "QPixmap"_L1;
s = p->elementPixmap()->text();
break;
default:
qWarning("%s: Warning: Unknown icon format encountered. The ui-file was generated with a too-recent version of Designer.",
qPrintable(m_option.messagePrefix()));
- return QLatin1String("QIcon()");
+ return "QIcon()"_L1;
break;
}
return pixCall(type, s);
}
-QString WriteInitialization::pixCall(const QString &t, const QString &text) const
+QString WriteInitialization::pixCall(QLatin1StringView t, const QString &text) const
{
- QString type = t;
- if (text.isEmpty()) {
- type += QLatin1String("()");
- return type;
- }
+ if (text.isEmpty())
+ return t % "()"_L1;
- QTextStream str(&type);
+ QString result;
+ QTextStream str(&result);
+ str << t;
str << '(';
- QString pixFunc = m_uic->pixmapFunction();
+ const QString pixFunc = m_uic->pixmapFunction();
if (pixFunc.isEmpty())
str << language::qstring(text, m_dindent);
else
str << pixFunc << '(' << language::charliteral(text, m_dindent) << ')';
str << ')';
- return type;
+ return result;
}
void WriteInitialization::initializeComboBox(DomWidget *w)
@@ -2104,8 +2191,8 @@ void WriteInitialization::initializeComboBox(DomWidget *w)
for (int i = 0; i < items.size(); ++i) {
const DomItem *item = items.at(i);
const DomPropertyMap properties = propertyMap(item->elementProperty());
- const DomProperty *text = properties.value(QLatin1String("text"));
- const DomProperty *icon = properties.value(QLatin1String("icon"));
+ const DomProperty *text = properties.value("text"_L1);
+ const DomProperty *icon = properties.value("icon"_L1);
QString iconValue;
if (icon)
@@ -2132,7 +2219,7 @@ QString WriteInitialization::disableSorting(DomWidget *w, const QString &varName
// turn off sortingEnabled to force programmatic item order (setItem())
QString tempName;
if (!w->elementItem().isEmpty()) {
- tempName = m_driver->unique(QLatin1String("__sortingEnabled"));
+ tempName = m_driver->unique("__sortingEnabled"_L1);
m_refreshOut << "\n";
m_refreshOut << m_indent;
if (language::language() == Language::Cpp)
@@ -2224,10 +2311,10 @@ void WriteInitialization::addQtFlagsInitializer(Item *item,
const DomPropertyMap &properties, const QString &name, int column) const
{
if (const DomProperty *p = properties.value(name)) {
- const QString orOperator = QLatin1Char('|') + language::qtQualifier;
+ const QString orOperator = u'|' + language::qtQualifier;
QString v = p->elementSet();
if (!v.isEmpty()) {
- v.replace(QLatin1Char('|'), orOperator);
+ v.replace(u'|', orOperator);
addInitializer(item, name, column, language::qtQualifier + v);
}
}
@@ -2253,20 +2340,20 @@ void WriteInitialization::addQtEnumInitializer(Item *item,
void WriteInitialization::addCommonInitializers(Item *item,
const DomPropertyMap &properties, int column)
{
- if (const DomProperty *icon = properties.value(QLatin1String("icon")))
- addInitializer(item, QLatin1String("icon"), column, iconCall(icon));
- addBrushInitializer(item, properties, QLatin1String("foreground"), column);
- addBrushInitializer(item, properties, QLatin1String("background"), column);
- if (const DomProperty *font = properties.value(QLatin1String("font")))
- addInitializer(item, QLatin1String("font"), column, writeFontProperties(font->elementFont()));
- addQtFlagsInitializer(item, properties, QLatin1String("textAlignment"), column);
- addQtEnumInitializer(item, properties, QLatin1String("checkState"), column);
- addStringInitializer(item, properties, QLatin1String("text"), column);
- addStringInitializer(item, properties, QLatin1String("toolTip"), column,
+ if (const DomProperty *icon = properties.value("icon"_L1))
+ addInitializer(item, "icon"_L1, column, iconCall(icon));
+ addBrushInitializer(item, properties, "foreground"_L1, column);
+ addBrushInitializer(item, properties, "background"_L1, column);
+ if (const DomProperty *font = properties.value("font"_L1))
+ addInitializer(item, "font"_L1, column, writeFontProperties(font->elementFont()));
+ addQtFlagsInitializer(item, properties, "textAlignment"_L1, column);
+ addQtEnumInitializer(item, properties, "checkState"_L1, column);
+ addStringInitializer(item, properties, "text"_L1, column);
+ addStringInitializer(item, properties, "toolTip"_L1, column,
toolTipConfigKey());
- addStringInitializer(item, properties, QLatin1String("whatsThis"), column,
+ addStringInitializer(item, properties, "whatsThis"_L1, column,
whatsThisConfigKey());
- addStringInitializer(item, properties, QLatin1String("statusTip"), column,
+ addStringInitializer(item, properties, "statusTip"_L1, column,
statusTipConfigKey());
}
@@ -2287,8 +2374,8 @@ void WriteInitialization::initializeListWidget(DomWidget *w)
const DomPropertyMap properties = propertyMap(domItem->elementProperty());
- Item item(QLatin1String("QListWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
- addQtFlagsInitializer(&item, properties, QLatin1String("flags"));
+ Item item("QListWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
+ addQtFlagsInitializer(&item, properties, "flags"_L1);
addCommonInitializers(&item, properties);
item.writeSetupUi(varName);
@@ -2304,7 +2391,7 @@ void WriteInitialization::initializeTreeWidget(DomWidget *w)
const QString varName = m_driver->findOrInsertWidget(w);
// columns
- Item item(QLatin1String("QTreeWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
+ Item item("QTreeWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
const auto &columns = w->elementColumn();
for (int i = 0; i < columns.size(); ++i) {
@@ -2313,7 +2400,7 @@ void WriteInitialization::initializeTreeWidget(DomWidget *w)
const DomPropertyMap properties = propertyMap(column->elementProperty());
addCommonInitializers(&item, properties, i);
- if (const DomProperty *p = properties.value(QLatin1String("text"))) {
+ if (const DomProperty *p = properties.value("text"_L1)) {
DomString *str = p->elementString();
if (str && str->text().isEmpty()) {
m_output << m_indent << varName << language::derefPointer
@@ -2323,7 +2410,7 @@ void WriteInitialization::initializeTreeWidget(DomWidget *w)
}
}
const QString itemName = item.writeSetupUi(QString(), Item::DontConstruct);
- item.writeRetranslateUi(varName + language::derefPointer + QLatin1String("headerItem()"));
+ item.writeRetranslateUi(varName + language::derefPointer + "headerItem()"_L1);
if (!itemName.isNull()) {
m_output << m_indent << varName << language::derefPointer
<< "setHeaderItem(" << itemName << ')' << language::eol;
@@ -2335,7 +2422,7 @@ void WriteInitialization::initializeTreeWidget(DomWidget *w)
QString tempName = disableSorting(w, varName);
const auto items = initializeTreeWidgetItems(w->elementItem());
- for (int i = 0; i < items.count(); i++) {
+ for (int i = 0; i < items.size(); i++) {
Item *itm = items[i];
itm->writeSetupUi(varName);
QString parentPath;
@@ -2366,7 +2453,7 @@ WriteInitialization::Items WriteInitialization::initializeTreeWidgetItems(const
for (int i = 0; i < numDomItems; ++i) {
const DomItem *domItem = domItems.at(i);
- Item *item = new Item(QLatin1String("QTreeWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
+ Item *item = new Item("QTreeWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
items << item;
QHash<QString, DomProperty *> map;
@@ -2374,7 +2461,7 @@ WriteInitialization::Items WriteInitialization::initializeTreeWidgetItems(const
int col = -1;
const DomPropertyList properties = domItem->elementProperty();
for (DomProperty *p : properties) {
- if (p->attributeName() == QLatin1String("text")) {
+ if (p->attributeName() == "text"_L1) {
if (!map.isEmpty()) {
addCommonInitializers(item, map, col);
map.clear();
@@ -2385,7 +2472,7 @@ WriteInitialization::Items WriteInitialization::initializeTreeWidgetItems(const
}
addCommonInitializers(item, map, col);
// AbstractFromBuilder saves flags last, so they always end up in the last column's map.
- addQtFlagsInitializer(item, map, QLatin1String("flags"));
+ addQtFlagsInitializer(item, map, "flags"_L1);
const auto subItems = initializeTreeWidgetItems(domItem->elementItem());
for (Item *subItem : subItems)
@@ -2415,7 +2502,7 @@ void WriteInitialization::initializeTableWidget(DomWidget *w)
if (!column->elementProperty().isEmpty()) {
const DomPropertyMap properties = propertyMap(column->elementProperty());
- Item item(QLatin1String("QTableWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
+ Item item("QTableWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
addCommonInitializers(&item, properties);
QString itemName = item.writeSetupUi(QString(), Item::ConstructItemAndVariable);
@@ -2445,7 +2532,7 @@ void WriteInitialization::initializeTableWidget(DomWidget *w)
if (!row->elementProperty().isEmpty()) {
const DomPropertyMap properties = propertyMap(row->elementProperty());
- Item item(QLatin1String("QTableWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
+ Item item("QTableWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
addCommonInitializers(&item, properties);
QString itemName = item.writeSetupUi(QString(), Item::ConstructItemAndVariable);
@@ -2468,8 +2555,8 @@ void WriteInitialization::initializeTableWidget(DomWidget *w)
const int c = cell->attributeColumn();
const DomPropertyMap properties = propertyMap(cell->elementProperty());
- Item item(QLatin1String("QTableWidgetItem"), m_indent, m_output, m_refreshOut, m_driver);
- addQtFlagsInitializer(&item, properties, QLatin1String("flags"));
+ Item item("QTableWidgetItem"_L1, m_indent, m_output, m_refreshOut, m_driver);
+ addQtFlagsInitializer(&item, properties, "flags"_L1);
addCommonInitializers(&item, properties);
QString itemName = item.writeSetupUi(QString(), Item::ConstructItemAndVariable);
@@ -2521,7 +2608,7 @@ QString WriteInitialization::trCall(const QString &str, const QString &commentHi
void WriteInitialization::initializeMenu(DomWidget *w, const QString &/*parentWidget*/)
{
const QString menuName = m_driver->findOrInsertWidget(w);
- const QString menuAction = menuName + QLatin1String("Action");
+ const QString menuAction = menuName + "Action"_L1;
const DomAction *action = m_driver->actionByName(menuAction);
if (action && action->hasAttributeMenu()) {
@@ -2616,7 +2703,7 @@ ConnectionSyntax WriteInitialization::connectionSyntax(const language::SignalSlo
return ConnectionSyntax::StringBased;
}
- return sender.signature.endsWith(QLatin1String("()"))
+ return sender.signature.endsWith("()"_L1)
|| (!isCustomWidget(sender.className) && !isCustomWidget(receiver.className))
? ConnectionSyntax::MemberFunctionPtr : ConnectionSyntax::StringBased;
}
@@ -2638,10 +2725,21 @@ void WriteInitialization::acceptConnection(DomConnection *connection)
return;
}
const QString senderSignature = connection->elementSignal();
+ const QString slotSignature = connection->elementSlot();
+ const bool senderAmbiguous = m_uic->customWidgetsInfo()->isAmbiguousSignal(senderDecl.className,
+ senderSignature);
+ const bool slotAmbiguous = m_uic->customWidgetsInfo()->isAmbiguousSlot(receiverDecl.className,
+ slotSignature);
+
+ language::SignalSlotOptions signalOptions;
+ signalOptions.setFlag(language::SignalSlotOption::Ambiguous, senderAmbiguous);
+ language::SignalSlotOptions slotOptions;
+ slotOptions.setFlag(language::SignalSlotOption::Ambiguous, slotAmbiguous);
+
language::SignalSlot theSignal{senderDecl.name, senderSignature,
- senderDecl.className};
- language::SignalSlot theSlot{receiverDecl.name, connection->elementSlot(),
- receiverDecl.className};
+ senderDecl.className, signalOptions};
+ language::SignalSlot theSlot{receiverDecl.name, slotSignature,
+ receiverDecl.className, slotOptions};
m_output << m_indent;
language::formatConnection(m_output, theSignal, theSlot,
@@ -2712,7 +2810,7 @@ QString WriteInitialization::Item::writeSetupUi(const QString &parent, Item::Emp
if (generateMultiDirective)
generateMultiDirectiveBegin(m_setupUiStream, m_setupUiData.directives);
- const QString uniqueName = m_driver->unique(QLatin1String("__") + m_itemClassName.toLower());
+ const QString uniqueName = m_driver->unique("__"_L1 + m_itemClassName.toLower());
m_setupUiStream << m_indent;
if (language::language() == Language::Cpp)
m_setupUiStream << m_itemClassName << " *";
@@ -2736,7 +2834,7 @@ QString WriteInitialization::Item::writeSetupUi(const QString &parent, Item::Emp
m_setupUiStream << language::closeQtConfig(it.key());
++it;
}
- for (Item *child : qAsConst(m_children))
+ for (Item *child : std::as_const(m_children))
child->writeSetupUi(uniqueName);
return uniqueName;
}
@@ -2749,7 +2847,7 @@ void WriteInitialization::Item::writeRetranslateUi(const QString &parentPath)
if (m_retranslateUiData.policy == ItemData::GenerateWithMultiDirective)
generateMultiDirectiveBegin(m_retranslateUiStream, m_retranslateUiData.directives);
- const QString uniqueName = m_driver->unique(QLatin1String("___") + m_itemClassName.toLower());
+ const QString uniqueName = m_driver->unique("___"_L1 + m_itemClassName.toLower());
m_retranslateUiStream << m_indent;
if (language::language() == Language::Cpp)
m_retranslateUiStream << m_itemClassName << " *";