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>bb10
parent
4aac7b92c4
commit
e6d1071dd3
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -45,39 +45,37 @@ Driver::Driver()
|
|||
|
||||
Driver::~Driver() = default;
|
||||
|
||||
QString Driver::findOrInsertWidget(DomWidget *ui_widget)
|
||||
{
|
||||
if (!m_widgets.contains(ui_widget))
|
||||
m_widgets.insert(ui_widget, unique(ui_widget->attributeName(), ui_widget->attributeClass()));
|
||||
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"); }
|
||||
|
||||
return m_widgets.value(ui_widget);
|
||||
template <class DomClass>
|
||||
QString Driver::findOrInsert(DomObjectHash<DomClass> *domHash, const DomClass *dom,
|
||||
const QString &className)
|
||||
{
|
||||
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 m_layouts.value(ui_layout);
|
||||
return findOrInsert(&m_spacers, ui_spacer, spacerItemClass());
|
||||
}
|
||||
|
||||
QString Driver::findOrInsertLayoutItem(DomLayoutItem *ui_layoutItem)
|
||||
QString Driver::findOrInsertLayout(const DomLayout *ui_layout)
|
||||
{
|
||||
return findOrInsert(&m_layouts, ui_layout, ui_layout->attributeClass());
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue