diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-10-23 11:41:34 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-11-01 17:59:56 +0000 |
commit | b78ac271bd1614c7979358d9992f5c56bcbe02a9 (patch) | |
tree | 8f115c372d9182d033706d6032f7eea8c828d97e | |
parent | 689afdeef867b1cb0126bf780efb07a4f28175de (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.cpp | 67 | ||||
-rw-r--r-- | src/designer/src/lib/uilib/formbuilder.cpp | 20 | ||||
-rw-r--r-- | src/designer/src/lib/uilib/formbuilderextra.cpp | 31 | ||||
-rw-r--r-- | src/designer/src/lib/uilib/formbuilderextra_p.h | 15 |
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; |