diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/uic/cpp/cppwriteinitialization.cpp | 39 | ||||
-rw-r--r-- | src/tools/uic/shared/language.cpp | 91 | ||||
-rw-r--r-- | src/tools/uic/shared/language.h | 5 |
3 files changed, 111 insertions, 24 deletions
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index ab4882d1a0..ca9b48ed9c 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -45,35 +45,26 @@ QT_BEGIN_NAMESPACE namespace { - // Fixup an enumeration name from class Qt. - // They are currently stored as "BottomToolBarArea" instead of "Qt::BottomToolBarArea". - // due to MO issues. This might be fixed in the future. - QLatin1String qtEnumerationPrefix(const QString &name) { - static const QLatin1String prefix("Qt::"); - if (name.indexOf(prefix) != 0) - return prefix; - return QLatin1String(); - } // 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")); + QString result; if (!pstyle) - return QString(); - + return result; switch (pstyle->kind()) { - case DomProperty::Number: { - return QLatin1String("static_cast<Qt::ToolBarArea>(") - + QString::number(pstyle->elementNumber()) + QLatin1String("), "); - } - case DomProperty::Enum: { - const QString area = pstyle->elementEnum(); - return qtEnumerationPrefix(area) + area + QLatin1String(", "); - } + case DomProperty::Number: + result = QLatin1String(language::toolbarArea(pstyle->elementNumber())); + break; + case DomProperty::Enum: + result = pstyle->elementEnum(); + break; default: break; } - return QString(); + if (!result.startsWith(QLatin1String("Qt::"))) + result.prepend(QLatin1String("Qt::")); + return result + QLatin1String(", "); } // Write a statement to create a spacer item. @@ -681,7 +672,7 @@ void WriteInitialization::acceptWidget(DomWidget *node) } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QDockWidget"))) { m_output << m_indent << parentWidget << "->addDockWidget("; if (DomProperty *pstyle = attributes.value(QLatin1String("dockWidgetArea"))) - m_output << "static_cast<Qt::DockWidgetArea>(" << pstyle->elementNumber() << "), "; + m_output << "Qt::" << language::dockWidgetArea(pstyle->elementNumber()) << ", "; m_output << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) { m_output << m_indent << parentWidget << "->setStatusBar(" << varName << ");\n"; @@ -1509,8 +1500,8 @@ QString WriteInitialization::writeSizePolicy(const DomSizePolicy *sp) m_output << m_indent << "QSizePolicy " << spName; do { if (sp->hasElementHSizeType() && sp->hasElementVSizeType()) { - m_output << "(static_cast<QSizePolicy::Policy>(" << sp->elementHSizeType() - << "), static_cast<QSizePolicy::Policy>(" << sp->elementVSizeType() << "));\n"; + m_output << "(QSizePolicy::" << language::sizePolicy(sp->elementHSizeType()) + << ", QSizePolicy::" << language::sizePolicy(sp->elementVSizeType()) << ");\n"; break; } if (sp->hasAttributeHSizeType() && sp->hasAttributeVSizeType()) { @@ -1767,7 +1758,7 @@ void WriteInitialization::writeColorGroup(DomColorGroup *colorGroup, const QStri const DomColor *color = colors.at(i); m_output << m_indent << paletteName << ".setColor(" << group - << ", " << "static_cast<QPalette::ColorRole>(" << i << ')' + << ", QPalette::" << language::paletteColorRole(i) << ", " << domColor2QString(color) << ");\n"; } diff --git a/src/tools/uic/shared/language.cpp b/src/tools/uic/shared/language.cpp index 2ab89c2d7b..730e1562bc 100644 --- a/src/tools/uic/shared/language.cpp +++ b/src/tools/uic/shared/language.cpp @@ -50,4 +50,95 @@ QTextStream &operator<<(QTextStream &str, const closeQtConfig &c) return str; } +struct EnumLookup +{ + int value; + const char *valueString; +}; + +template <int N> +const char *lookupEnum(const EnumLookup(&array)[N], int value, int defaultIndex = 0) +{ + for (int i = 0; i < N; ++i) { + if (value == array[i].value) + return array[i].valueString; + } + const char *defaultValue = array[defaultIndex].valueString; + qWarning("uic: Warning: Invalid enumeration value %d, defaulting to %s", + value, defaultValue); + return defaultValue; +} + +const char *toolbarArea(int v) +{ + static const EnumLookup toolBarAreas[] = + { + {0, "NoToolBarArea"}, + {0x1, "LeftToolBarArea"}, + {0x2, "RightToolBarArea"}, + {0x4, "TopToolBarArea"}, + {0x8, "BottomToolBarArea"}, + {0xf, "AllToolBarAreas"} + }; + return lookupEnum(toolBarAreas, v); +} + +const char *sizePolicy(int v) +{ + static const EnumLookup sizePolicies[] = + { + {0, "Fixed"}, + {0x1, "Minimum"}, + {0x4, "Maximum"}, + {0x5, "Preferred"}, + {0x3, "MinimumExpanding"}, + {0x7, "Expanding"}, + {0xD, "Ignored"} + }; + return lookupEnum(sizePolicies, v, 3); +} + +const char *dockWidgetArea(int v) +{ + static const EnumLookup dockWidgetAreas[] = + { + {0, "NoDockWidgetArea"}, + {0x1, "LeftDockWidgetArea"}, + {0x2, "RightDockWidgetArea"}, + {0x4, "TopDockWidgetArea"}, + {0x8, "BottomDockWidgetArea"}, + {0xf, "AllDockWidgetAreas"} + }; + return lookupEnum(dockWidgetAreas, v); +} + +const char *paletteColorRole(int v) +{ + static const EnumLookup colorRoles[] = + { + {0, "WindowText"}, + {1, "Button"}, + {2, "Light"}, + {3, "Midlight"}, + {4, "Dark"}, + {5, "Mid"}, + {6, "Text"}, + {7, "BrightText"}, + {8, "ButtonText"}, + {9, "Base"}, + {10, "Window"}, + {11, "Shadow"}, + {12, "Highlight"}, + {13, "HighlightedText"}, + {14, "Link"}, + {15, "LinkVisited"}, + {16, "AlternateBase"}, + {17, "NoRole"}, + {18, "ToolTipBase"}, + {19, "ToolTipText"}, + {20, "PlaceholderText"}, + }; + return lookupEnum(colorRoles, v); +} + } // namespace language diff --git a/src/tools/uic/shared/language.h b/src/tools/uic/shared/language.h index 71cfddd6b0..e7201b6529 100644 --- a/src/tools/uic/shared/language.h +++ b/src/tools/uic/shared/language.h @@ -71,6 +71,11 @@ public: QTextStream &operator<<(QTextStream &, const closeQtConfig &c); +const char *toolbarArea(int v); +const char *sizePolicy(int v); +const char *dockWidgetArea(int v); +const char *paletteColorRole(int v); + } // namespace language #endif // LANGUAGE_H |