summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-10-23 11:41:34 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-11-01 17:59:56 +0000
commitb78ac271bd1614c7979358d9992f5c56bcbe02a9 (patch)
tree8f115c372d9182d033706d6032f7eea8c828d97e
parent689afdeef867b1cb0126bf780efb07a4f28175de (diff)
QAbstractFormBuilder: Remove some unnecessary DomPropertyHash conversions
This is the beginning of a series of patches to remove strings from class QFormBuilderStrings. In some QAbstractFormBuilder functions, the property lists are converted to a DomPropertyHash. In some cases, this was done for just one lookup. To avoid these conversions; add a helper to search for a DomProperty by name to QFormBuilderExtra. Add another helper QFormBuilderExtra::getLayoutMargins() for retrieving layout margins from DOM properties. With that in place, some string constants from QFormBuilderStrings can be removed. Task-number: QTBUG-118473 Change-Id: Ieaed9cf14989a85f23b18186abe803fc8396897c Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> (cherry picked from commit ac4ddedd975a80691c5afaaf54d6721eb7726feb) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/designer/src/lib/uilib/abstractformbuilder.cpp67
-rw-r--r--src/designer/src/lib/uilib/formbuilder.cpp20
-rw-r--r--src/designer/src/lib/uilib/formbuilderextra.cpp31
-rw-r--r--src/designer/src/lib/uilib/formbuilderextra_p.h15
4 files changed, 54 insertions, 79 deletions
diff --git a/src/designer/src/lib/uilib/abstractformbuilder.cpp b/src/designer/src/lib/uilib/abstractformbuilder.cpp
index 0c3f2cec9..29c318d33 100644
--- a/src/designer/src/lib/uilib/abstractformbuilder.cpp
+++ b/src/designer/src/lib/uilib/abstractformbuilder.cpp
@@ -66,6 +66,13 @@ using namespace Qt::StringLiterals;
using namespace QFormInternal;
#endif
+using QFBE = QFormBuilderExtra;
+
+static inline DomProperty *currentIndexProperty(const QList<DomProperty*> &properties)
+{
+ return QFBE::propertyByName(properties, "currentIndex");
+}
+
class QFriendlyLayout: public QLayout
{
public:
@@ -538,15 +545,13 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int *margin, int *spacing)
{
Q_UNUSED(parent);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
+ auto properties = ui_layout->elementProperty();
int mar = INT_MIN;
int spac = INT_MIN;
- if (const DomProperty *p = properties.value(strings.marginProperty, 0))
+ if (const DomProperty *p = QFBE::propertyByName(properties, "margin"))
mar = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.spacingProperty, 0))
+ if (const DomProperty *p = QFBE::propertyByName(properties, "spacing"))
spac = p->elementNumber();
#ifdef Q_OS_MACOS
@@ -559,7 +564,7 @@ void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int
spac = INT_MIN;
if (mar == INT_MIN || spac == INT_MIN) {
- auto properties = ui_layout->elementProperty();
+ const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
for (auto it = properties.begin(); it != properties.end(); ) {
DomProperty *prop = *it;
if ((mar == INT_MIN && prop->attributeName() == strings.marginProperty)
@@ -624,25 +629,10 @@ QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayou
if (margin != INT_MIN) {
layout->setContentsMargins(margin, margin, margin, margin);
} else {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- int left, top, right, bottom;
- left = top = right = bottom = -1;
+ int left = -1, top = -1, right = -1, bottom = -1;
layout->getContentsMargins(&left, &top, &right, &bottom);
-
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (const DomProperty *p = properties.value(strings.leftMarginProperty, 0))
- left = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.topMarginProperty, 0))
- top = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.rightMarginProperty, 0))
- right = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.bottomMarginProperty, 0))
- bottom = p->elementNumber();
-
+ QFormBuilderExtra::getLayoutMargins(ui_layout->elementProperty(),
+ &left, &top, &right, &bottom);
layout->setContentsMargins(left, top, right, bottom);
}
@@ -651,12 +641,10 @@ QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayou
} else {
QGridLayout *grid = qobject_cast<QGridLayout *>(layout);
if (grid) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (const DomProperty *p = properties.value(strings.horizontalSpacingProperty, 0))
+ const auto &properties = ui_layout->elementProperty();
+ if (const auto *p = QFBE::propertyByName(properties, "horizontalSpacing"))
grid->setHorizontalSpacing(p->elementNumber());
- if (const DomProperty *p = properties.value(strings.verticalSpacingProperty, 0))
+ if (const auto *p = QFBE::propertyByName(properties, "verticalSpacing"))
grid->setVerticalSpacing(p->elementNumber());
}
}
@@ -2008,8 +1996,6 @@ void QAbstractFormBuilder::saveExtraInfo(QWidget *widget, DomWidget *ui_widget,
void QAbstractFormBuilder::loadListWidgetExtraInfo(DomWidget *ui_widget, QListWidget *listWidget, QWidget *parentWidget)
{
Q_UNUSED(parentWidget);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
const auto &elementItem = ui_widget->elementItem();
for (DomItem *ui_item : elementItem) {
const DomPropertyHash properties = propertyMap(ui_item->elementProperty());
@@ -2017,8 +2003,7 @@ void QAbstractFormBuilder::loadListWidgetExtraInfo(DomWidget *ui_widget, QListWi
loadItemPropsNFlags<QListWidgetItem>(this, item, properties);
}
- DomProperty *currentRow = propertyMap(ui_widget->elementProperty()).value(strings.currentRowProperty);
- if (currentRow)
+ if (auto *currentRow = QFBE::propertyByName(ui_widget->elementProperty(), "currentRow"))
listWidget->setCurrentRow(currentRow->elementNumber());
}
@@ -2206,8 +2191,7 @@ void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox
comboBox->setItemData((comboBox->count()-1), textData, Qt::DisplayPropertyRole);
}
- DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
comboBox->setCurrentIndex(currentIndex->elementNumber());
}
@@ -2306,7 +2290,6 @@ void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstract
*/
void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
{
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
if (false) {
#if QT_CONFIG(listwidget)
} else if (QListWidget *listWidget = qobject_cast<QListWidget*>(widget)) {
@@ -2327,23 +2310,19 @@ void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget,
#endif
#if QT_CONFIG(tabwidget)
} else if (QTabWidget *tabWidget = qobject_cast<QTabWidget*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
tabWidget->setCurrentIndex(currentIndex->elementNumber());
#endif
#if QT_CONFIG(stackedwidget)
} else if (QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
stackedWidget->setCurrentIndex(currentIndex->elementNumber());
#endif
#if QT_CONFIG(toolbox)
} else if (QToolBox *toolBox = qobject_cast<QToolBox*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
toolBox->setCurrentIndex(currentIndex->elementNumber());
- const DomProperty *tabSpacing = propertyMap(ui_widget->elementProperty()).value(strings.tabSpacingProperty);
- if (tabSpacing)
+ if (auto *tabSpacing = QFBE::propertyByName(ui_widget->elementProperty(), "tabSpacing"))
toolBox->layout()->setSpacing(tabSpacing->elementNumber());
#endif
} else if (QAbstractButton *ab = qobject_cast<QAbstractButton *>(widget)) {
diff --git a/src/designer/src/lib/uilib/formbuilder.cpp b/src/designer/src/lib/uilib/formbuilder.cpp
index 2d5286205..e63f945ca 100644
--- a/src/designer/src/lib/uilib/formbuilder.cpp
+++ b/src/designer/src/lib/uilib/formbuilder.cpp
@@ -318,23 +318,9 @@ QLayout *QFormBuilder::create(DomLayout *ui_layout, QLayout *layout, QWidget *pa
bool layoutWidget = d->processingLayoutWidget();
QLayout *l = QAbstractFormBuilder::create(ui_layout, layout, parentWidget);
if (layoutWidget) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- int left, top, right, bottom;
- left = top = right = bottom = 0;
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (DomProperty *prop = properties.value(strings.leftMarginProperty))
- left = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.topMarginProperty))
- top = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.rightMarginProperty))
- right = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.bottomMarginProperty))
- bottom = prop->elementNumber();
-
+ int left = 0, top = 0, right = 0, bottom = 0;
+ QFormBuilderExtra::getLayoutMargins(ui_layout->elementProperty(),
+ &left, &top, &right, &bottom);
l->setContentsMargins(left, top, right, bottom);
d->setProcessingLayoutWidget(false);
}
diff --git a/src/designer/src/lib/uilib/formbuilderextra.cpp b/src/designer/src/lib/uilib/formbuilderextra.cpp
index 775dcd0a0..e3a95c606 100644
--- a/src/designer/src/lib/uilib/formbuilderextra.cpp
+++ b/src/designer/src/lib/uilib/formbuilderextra.cpp
@@ -363,6 +363,19 @@ static QString msgInvalidStretch(const QString &objectName, const QString &stret
return QCoreApplication::translate("FormBuilder", "Invalid stretch value for '%1': '%2'").arg(objectName, stretch);
}
+void QFormBuilderExtra::getLayoutMargins(const QList<DomProperty*> &properties,
+ int *left, int *top, int *right, int *bottom)
+{
+ if (const auto *p = propertyByName(properties, "leftMargin"))
+ *left = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "topMargin"))
+ *top = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "rightMargin"))
+ *right = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "bottomMargin"))
+ *bottom = p->elementNumber();
+}
+
QString QFormBuilderExtra::boxLayoutStretch(const QBoxLayout *box)
{
return perCellPropertyToString(box, box->count(), &QBoxLayout::stretch);
@@ -688,6 +701,15 @@ DomBrush *QFormBuilderExtra::saveBrush(const QBrush &br)
return brush;
}
+DomProperty *QFormBuilderExtra::propertyByName(const QList<DomProperty*> &properties,
+ QAnyStringView needle)
+{
+ auto it = std::find_if(properties.cbegin(), properties.cend(),
+ [needle](const DomProperty *p) {
+ return p->attributeName() == needle; });
+ return it != properties.cend() ? *it : nullptr;
+}
+
// ------------ QFormBuilderStrings
QFormBuilderStrings::QFormBuilderStrings() :
@@ -707,26 +729,17 @@ QFormBuilderStrings::QFormBuilderStrings() :
iconAttribute(u"icon"_s),
pixmapAttribute(u"pixmap"_s),
textAttribute(u"text"_s),
- currentIndexProperty(u"currentIndex"_s),
toolBarAreaAttribute(u"toolBarArea"_s),
toolBarBreakAttribute(u"toolBarBreak"_s),
dockWidgetAreaAttribute(u"dockWidgetArea"_s),
marginProperty(u"margin"_s),
spacingProperty(u"spacing"_s),
- leftMarginProperty(u"leftMargin"_s),
- topMarginProperty(u"topMargin"_s),
- rightMarginProperty(u"rightMargin"_s),
- bottomMarginProperty(u"bottomMargin"_s),
- horizontalSpacingProperty(u"horizontalSpacing"_s),
- verticalSpacingProperty(u"verticalSpacing"_s),
sizeHintProperty(u"sizeHint"_s),
sizeTypeProperty(u"sizeType"_s),
orientationProperty(u"orientation"_s),
styleSheetProperty(u"styleSheet"_s),
qtHorizontal(u"Qt::Horizontal"_s),
qtVertical(u"Qt::Vertical"_s),
- currentRowProperty(u"currentRow"_s),
- tabSpacingProperty(u"tabSpacing"_s),
qWidgetClass(u"QWidget"_s),
lineClass(u"Line"_s),
geometryProperty(u"geometry"_s),
diff --git a/src/designer/src/lib/uilib/formbuilderextra_p.h b/src/designer/src/lib/uilib/formbuilderextra_p.h
index aa3cd10b1..25d647f47 100644
--- a/src/designer/src/lib/uilib/formbuilderextra_p.h
+++ b/src/designer/src/lib/uilib/formbuilderextra_p.h
@@ -112,6 +112,9 @@ public:
const ButtonGroupHash &buttonGroups() const { return m_buttonGroups; }
ButtonGroupHash &buttonGroups() { return m_buttonGroups; }
+ static void getLayoutMargins(const QList<DomProperty*> &properties,
+ int *left, int *top, int *right, int *bottom);
+
// return stretch as a comma-separated list
static QString boxLayoutStretch(const QBoxLayout*);
// apply stretch
@@ -145,6 +148,9 @@ public:
static QBrush setupBrush(const DomBrush *brush);
static DomBrush *saveBrush(const QBrush &br);
+ static DomProperty *propertyByName(const QList<DomProperty*> &properties,
+ QAnyStringView needle);
+
QStringList m_pluginPaths;
QMap<QString, QDesignerCustomWidgetInterface*> m_customWidgets;
@@ -199,26 +205,17 @@ struct QDESIGNER_UILIB_EXPORT QFormBuilderStrings {
const QString iconAttribute;
const QString pixmapAttribute;
const QString textAttribute;
- const QString currentIndexProperty;
const QString toolBarAreaAttribute;
const QString toolBarBreakAttribute;
const QString dockWidgetAreaAttribute;
const QString marginProperty;
const QString spacingProperty;
- const QString leftMarginProperty;
- const QString topMarginProperty;
- const QString rightMarginProperty;
- const QString bottomMarginProperty;
- const QString horizontalSpacingProperty;
- const QString verticalSpacingProperty;
const QString sizeHintProperty;
const QString sizeTypeProperty;
const QString orientationProperty;
const QString styleSheetProperty;
const QString qtHorizontal;
const QString qtVertical;
- const QString currentRowProperty;
- const QString tabSpacingProperty;
const QString qWidgetClass;
const QString lineClass;
const QString geometryProperty;