diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-11-29 14:41:20 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-12-13 07:14:53 +0000 |
commit | e6d1071dd32d653f40c54df4141f7bd41aea7ea0 (patch) | |
tree | 22787cc0673cf84457e3d5dc4d7136cfc30646b2 | |
parent | 4aac7b92c4a6cbcb0a12e6a209b210777fe610eb (diff) |
uic: Refactor DOM class lookup in class Driver
Change the API to take const Dom * classes and use a helper
function to do the insertion.
Task-number: PYSIDE-797
Change-Id: I079f5c92bae85d6246c14077db06e381b572cda5
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
-rw-r--r-- | src/tools/uic/cpp/cppwriteinitialization.cpp | 4 | ||||
-rw-r--r-- | src/tools/uic/driver.cpp | 75 | ||||
-rw-r--r-- | src/tools/uic/driver.h | 36 |
3 files changed, 54 insertions, 61 deletions
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index ca9b48ed9c..6313d6b2d3 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -2404,9 +2404,9 @@ QString WriteInitialization::findDeclaration(const QString &name) { const QString normalized = Driver::normalizedName(name); - if (DomWidget *widget = m_driver->widgetByName(normalized)) + if (const DomWidget *widget = m_driver->widgetByName(normalized)) return m_driver->findOrInsertWidget(widget); - if (DomAction *action = m_driver->actionByName(normalized)) + if (const DomAction *action = m_driver->actionByName(normalized)) return m_driver->findOrInsertAction(action); if (const DomButtonGroup *group = m_driver->findButtonGroup(normalized)) return m_driver->findOrInsertButtonGroup(group); diff --git a/src/tools/uic/driver.cpp b/src/tools/uic/driver.cpp index cf7e67305b..03fa1e17cf 100644 --- a/src/tools/uic/driver.cpp +++ b/src/tools/uic/driver.cpp @@ -45,39 +45,37 @@ Driver::Driver() Driver::~Driver() = default; -QString Driver::findOrInsertWidget(DomWidget *ui_widget) +static inline QString spacerItemClass() { return QStringLiteral("QSpacerItem"); } +static inline QString actionGroupClass() { return QStringLiteral("QActionGroup"); } +static inline QString actionClass() { return QStringLiteral("QAction"); } +static inline QString buttonGroupClass() { return QStringLiteral("QButtonGroup"); } + +template <class DomClass> +QString Driver::findOrInsert(DomObjectHash<DomClass> *domHash, const DomClass *dom, + const QString &className) { - if (!m_widgets.contains(ui_widget)) - m_widgets.insert(ui_widget, unique(ui_widget->attributeName(), ui_widget->attributeClass())); - - return m_widgets.value(ui_widget); + auto it = domHash->find(dom); + if (it == domHash->end()) + it = domHash->insert(dom, this->unique(dom->attributeName(), className)); + return it.value(); } -QString Driver::findOrInsertSpacer(DomSpacer *ui_spacer) +QString Driver::findOrInsertWidget(const DomWidget *ui_widget) { - if (!m_spacers.contains(ui_spacer)) { - QString name; - if (ui_spacer->hasAttributeName()) - name = ui_spacer->attributeName(); - m_spacers.insert(ui_spacer, unique(name, QLatin1String("QSpacerItem"))); - } - - return m_spacers.value(ui_spacer); + return findOrInsert(&m_widgets, ui_widget, ui_widget->attributeClass()); } -QString Driver::findOrInsertLayout(DomLayout *ui_layout) +QString Driver::findOrInsertSpacer(const DomSpacer *ui_spacer) { - if (!m_layouts.contains(ui_layout)) { - QString name; - if (ui_layout->hasAttributeName()) - name = ui_layout->attributeName(); - m_layouts.insert(ui_layout, unique(name, ui_layout->attributeClass())); - } + return findOrInsert(&m_spacers, ui_spacer, spacerItemClass()); +} - return m_layouts.value(ui_layout); +QString Driver::findOrInsertLayout(const DomLayout *ui_layout) +{ + return findOrInsert(&m_layouts, ui_layout, ui_layout->attributeClass()); } -QString Driver::findOrInsertLayoutItem(DomLayoutItem *ui_layoutItem) +QString Driver::findOrInsertLayoutItem(const DomLayoutItem *ui_layoutItem) { switch (ui_layoutItem->kind()) { case DomLayoutItem::Widget: @@ -95,38 +93,29 @@ QString Driver::findOrInsertLayoutItem(DomLayoutItem *ui_layoutItem) return QString(); } -QString Driver::findOrInsertActionGroup(DomActionGroup *ui_group) +QString Driver::findOrInsertActionGroup(const DomActionGroup *ui_group) { - if (!m_actionGroups.contains(ui_group)) - m_actionGroups.insert(ui_group, unique(ui_group->attributeName(), QLatin1String("QActionGroup"))); - - return m_actionGroups.value(ui_group); + return findOrInsert(&m_actionGroups, ui_group, actionGroupClass()); } -QString Driver::findOrInsertAction(DomAction *ui_action) +QString Driver::findOrInsertAction(const DomAction *ui_action) { - if (!m_actions.contains(ui_action)) - m_actions.insert(ui_action, unique(ui_action->attributeName(), QLatin1String("QAction"))); - - return m_actions.value(ui_action); + return findOrInsert(&m_actions, ui_action, actionClass()); } QString Driver::findOrInsertButtonGroup(const DomButtonGroup *ui_group) { - ButtonGroupNameHash::iterator it = m_buttonGroups.find(ui_group); - if (it == m_buttonGroups.end()) - it = m_buttonGroups.insert(ui_group, unique(ui_group->attributeName(), QLatin1String("QButtonGroup"))); - return it.value(); + return findOrInsert(&m_buttonGroups, ui_group, buttonGroupClass()); } // Find a group by its non-uniqified name const DomButtonGroup *Driver::findButtonGroup(const QString &attributeName) const { - const ButtonGroupNameHash::const_iterator cend = m_buttonGroups.constEnd(); - for (ButtonGroupNameHash::const_iterator it = m_buttonGroups.constBegin(); it != cend; ++it) + for (auto it = m_buttonGroups.cbegin(), end = m_buttonGroups.cend(); it != end; ++it) { if (it.key()->attributeName() == attributeName) return it.key(); - return 0; + } + return nullptr; } @@ -297,17 +286,17 @@ bool Driver::uic(const QString &fileName, QTextStream *out) return rtn; } -DomWidget *Driver::widgetByName(const QString &name) const +const DomWidget *Driver::widgetByName(const QString &name) const { return m_widgets.key(name); } -DomActionGroup *Driver::actionGroupByName(const QString &name) const +const DomActionGroup *Driver::actionGroupByName(const QString &name) const { return m_actionGroups.key(name); } -DomAction *Driver::actionByName(const QString &name) const +const DomAction *Driver::actionByName(const QString &name) const { return m_actions.key(name); } diff --git a/src/tools/uic/driver.h b/src/tools/uic/driver.h index 3808855783..1303d0bf8a 100644 --- a/src/tools/uic/driver.h +++ b/src/tools/uic/driver.h @@ -73,37 +73,41 @@ public: const QString &className=QString()); // symbol table - QString findOrInsertWidget(DomWidget *ui_widget); - QString findOrInsertSpacer(DomSpacer *ui_spacer); - QString findOrInsertLayout(DomLayout *ui_layout); - QString findOrInsertLayoutItem(DomLayoutItem *ui_layoutItem); + QString findOrInsertWidget(const DomWidget *ui_widget); + QString findOrInsertSpacer(const DomSpacer *ui_spacer); + QString findOrInsertLayout(const DomLayout *ui_layout); + QString findOrInsertLayoutItem(const DomLayoutItem *ui_layoutItem); QString findOrInsertName(const QString &name); - QString findOrInsertActionGroup(DomActionGroup *ui_group); - QString findOrInsertAction(DomAction *ui_action); + QString findOrInsertActionGroup(const DomActionGroup *ui_group); + QString findOrInsertAction(const DomAction *ui_action); QString findOrInsertButtonGroup(const DomButtonGroup *ui_group); // Find a group by its non-uniqified name const DomButtonGroup *findButtonGroup(const QString &attributeName) const; - DomWidget *widgetByName(const QString &name) const; - DomActionGroup *actionGroupByName(const QString &name) const; - DomAction *actionByName(const QString &name) const; + const DomWidget *widgetByName(const QString &name) const; + const DomActionGroup *actionGroupByName(const QString &name) const; + const DomAction *actionByName(const QString &name) const; bool useIdBasedTranslations() const { return m_idBasedTranslations; } void setUseIdBasedTranslations(bool u) { m_idBasedTranslations = u; } private: + template <class DomClass> using DomObjectHash = QHash<const DomClass *, QString>; + + template <class DomClass> + QString findOrInsert(DomObjectHash<DomClass> *domHash, const DomClass *dom, const QString &className); + Option m_option; QTextStream m_stdout; QTextStream *m_output; // symbol tables - QHash<DomWidget*, QString> m_widgets; - QHash<DomSpacer*, QString> m_spacers; - QHash<DomLayout*, QString> m_layouts; - QHash<DomActionGroup*, QString> m_actionGroups; - typedef QHash<const DomButtonGroup*, QString> ButtonGroupNameHash; - ButtonGroupNameHash m_buttonGroups; - QHash<DomAction*, QString> m_actions; + DomObjectHash<DomWidget> m_widgets; + DomObjectHash<DomSpacer> m_spacers; + DomObjectHash<DomLayout> m_layouts; + DomObjectHash<DomActionGroup> m_actionGroups; + DomObjectHash<DomButtonGroup> m_buttonGroups; + DomObjectHash<DomAction> m_actions; QHash<QString, bool> m_nameRepository; bool m_idBasedTranslations = false; }; |