From 688d463f4ad4ebe62533d416c956d3a30ccfc0a6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 22 Dec 2011 14:51:47 +0100 Subject: uic: Add translation-attributes to string list properties. Task-number: QTBUG-8926 Task-number: QTBUG-20440 Change-Id: I57d92110bf532c717451336bd1943c9571020478 Reviewed-by: Jarek Kobus --- src/tools/uic/cpp/cppwriteinitialization.cpp | 50 ++++++++++++++++++++-------- src/tools/uic/cpp/cppwriteinitialization.h | 5 ++- src/tools/uic/ui4.cpp | 46 +++++++++++++++++++++---- src/tools/uic/ui4.h | 24 +++++++++++++ 4 files changed, 103 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index dfb4a3299e..0be10a4fb6 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -466,11 +466,12 @@ void WriteInitialization::LayoutDefaultHandler::writeProperties(const QString &i layoutmargins[marginType], suppressMarginDefault, str); } -static bool needsTranslation(DomString *str) +template // (DomString, DomStringList) +static bool needsTranslation(const DomElement *element) { - if (!str) + if (!element) return false; - return !str->hasAttributeNotr() || !toBool(str->attributeNotr()); + return !element->hasAttributeNotr() || !toBool(element->attributeNotr()); } // --- WriteInitialization @@ -1128,6 +1129,25 @@ void WriteInitialization::acceptActionRef(DomActionRef *node) m_actionOut << m_indent << varName << "->addAction(" << actionName << ");\n"; } +QString WriteInitialization::writeStringListProperty(const DomStringList *list) const +{ + QString propertyValue; + QTextStream str(&propertyValue); + str << "QStringList()"; + const QStringList values = list->elementString(); + if (values.isEmpty()) + return propertyValue; + if (needsTranslation(list)) { + const QString comment = list->attributeComment(); + for (int i = 0; i < values.size(); ++i) + str << '\n' << m_indent << " << " << trCall(values.at(i), comment); + } else { + for (int i = 0; i < values.size(); ++i) + str << " << QString::fromUtf8(" << fixString(values.at(i), m_dindent) << ')'; + } + return propertyValue; +} + void WriteInitialization::writeProperties(const QString &varName, const QString &className, const DomPropertyList &lst, @@ -1434,15 +1454,7 @@ void WriteInitialization::writeProperties(const QString &varName, break; } case DomProperty::StringList: - propertyValue = QLatin1String("QStringList()"); - if (p->elementStringList()->elementString().size()) { - const QStringList lst = p->elementStringList()->elementString(); - for (int i=0; ielementStringList()); break; case DomProperty::Url: { @@ -1469,7 +1481,7 @@ void WriteInitialization::writeProperties(const QString &varName, else if (propertyName == QLatin1String("accessibleName") || propertyName == QLatin1String("accessibleDescription")) defineC = accessibilityDefineC; - QTextStream &o = autoTrOutput(p->elementString()); + QTextStream &o = autoTrOutput(p); if (defineC) openIfndef(o, QLatin1String(defineC)); @@ -2357,7 +2369,17 @@ QString WriteInitialization::autoTrCall(DomString *str, const QString &defaultSt return noTrCall(str, defaultString); } -QTextStream &WriteInitialization::autoTrOutput(DomString *str, const QString &defaultString) +QTextStream &WriteInitialization::autoTrOutput(const DomProperty *property) +{ + if (const DomString *str = property->elementString()) + return autoTrOutput(str); + if (const DomStringList *list = property->elementStringList()) + if (needsTranslation(list)) + return m_refreshOut; + return m_output; +} + +QTextStream &WriteInitialization::autoTrOutput(const DomString *str, const QString &defaultString) { if ((!str && !defaultString.isEmpty()) || needsTranslation(str)) return m_refreshOut; diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h index 721eb0f79e..ec3982445d 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.h +++ b/src/tools/uic/cpp/cppwriteinitialization.h @@ -58,6 +58,7 @@ class DomBrush; class DomFont; class DomResourceIcon; class DomSizePolicy; +class DomStringList; struct Option; namespace CPP { @@ -176,11 +177,13 @@ private: QString trCall(DomString *str, const QString &defaultString = QString()) const; QString noTrCall(DomString *str, const QString &defaultString = QString()) const; QString autoTrCall(DomString *str, const QString &defaultString = QString()) const; - QTextStream &autoTrOutput(DomString *str, const QString &defaultString = QString()); + inline QTextStream &autoTrOutput(const DomProperty *str); + QTextStream &autoTrOutput(const DomString *str, const QString &defaultString = QString()); // Apply a comma-separated list of values using a function "setSomething(int idx, value)" void writePropertyList(const QString &varName, const QString &setFunction, const QString &value, const QString &defaultValue); enum { WritePropertyIgnoreMargin = 1, WritePropertyIgnoreSpacing = 2, WritePropertyIgnoreObjectName = 4 }; + QString writeStringListProperty(const DomStringList *list) const; void writeProperties(const QString &varName, const QString &className, const DomPropertyList &lst, unsigned flags = 0); void writeColorGroup(DomColorGroup *colorGroup, const QString &group, const QString &paletteName); void writeBrush(const DomBrush *brush, const QString &brushName); diff --git a/src/tools/uic/ui4.cpp b/src/tools/uic/ui4.cpp index 0c8adcd07a..88943184a4 100644 --- a/src/tools/uic/ui4.cpp +++ b/src/tools/uic/ui4.cpp @@ -3479,7 +3479,7 @@ void DomWidget::read(QXmlStreamReader &reader) continue; } if (name == QStringLiteral("native")) { - setAttributeNative((attribute.value().toString() == QLatin1String("true") ? true : false)); + setAttributeNative((attribute.value().toString() == QStringLiteral("true") ? true : false)); continue; } reader.raiseError(QStringLiteral("Unexpected attribute ") + name.toString()); @@ -4853,23 +4853,23 @@ void DomFont::read(QXmlStreamReader &reader) continue; } if (tag == QStringLiteral("italic")) { - setElementItalic((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementItalic((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } if (tag == QStringLiteral("bold")) { - setElementBold((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementBold((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } if (tag == QStringLiteral("underline")) { - setElementUnderline((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementUnderline((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } if (tag == QStringLiteral("strikeout")) { - setElementStrikeOut((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementStrikeOut((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } if (tag == QStringLiteral("antialiasing")) { - setElementAntialiasing((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementAntialiasing((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } if (tag == QStringLiteral("stylestrategy")) { @@ -4877,7 +4877,7 @@ void DomFont::read(QXmlStreamReader &reader) continue; } if (tag == QStringLiteral("kerning")) { - setElementKerning((reader.readElementText() == QLatin1String("true") ? true : false)); + setElementKerning((reader.readElementText() == QStringLiteral("true") ? true : false)); continue; } reader.raiseError(QStringLiteral("Unexpected element ") + tag); @@ -6028,6 +6028,9 @@ void DomStringList::clear(bool clear_all) if (clear_all) { m_text.clear(); + m_has_attr_notr = false; + m_has_attr_comment = false; + m_has_attr_extraComment = false; } m_children = 0; @@ -6036,6 +6039,9 @@ void DomStringList::clear(bool clear_all) DomStringList::DomStringList() { m_children = 0; + m_has_attr_notr = false; + m_has_attr_comment = false; + m_has_attr_extraComment = false; } DomStringList::~DomStringList() @@ -6046,6 +6052,23 @@ DomStringList::~DomStringList() void DomStringList::read(QXmlStreamReader &reader) { + foreach (const QXmlStreamAttribute &attribute, reader.attributes()) { + QStringRef name = attribute.name(); + if (name == QStringLiteral("notr")) { + setAttributeNotr(attribute.value().toString()); + continue; + } + if (name == QStringLiteral("comment")) { + setAttributeComment(attribute.value().toString()); + continue; + } + if (name == QStringLiteral("extracomment")) { + setAttributeExtraComment(attribute.value().toString()); + continue; + } + reader.raiseError(QStringLiteral("Unexpected attribute ") + name.toString()); + } + for (bool finished = false; !finished && !reader.hasError();) { switch (reader.readNext()) { case QXmlStreamReader::StartElement : { @@ -6074,6 +6097,15 @@ void DomStringList::write(QXmlStreamWriter &writer, const QString &tagName) cons { writer.writeStartElement(tagName.isEmpty() ? QString::fromUtf8("stringlist") : tagName.toLower()); + if (hasAttributeNotr()) + writer.writeAttribute(QStringLiteral("notr"), attributeNotr()); + + if (hasAttributeComment()) + writer.writeAttribute(QStringLiteral("comment"), attributeComment()); + + if (hasAttributeExtraComment()) + writer.writeAttribute(QStringLiteral("extracomment"), attributeExtraComment()); + for (int i = 0; i < m_string.size(); ++i) { QString v = m_string[i]; writer.writeTextElement(QStringLiteral("string"), v); diff --git a/src/tools/uic/ui4.h b/src/tools/uic/ui4.h index ce8e9c1473..019236a748 100644 --- a/src/tools/uic/ui4.h +++ b/src/tools/uic/ui4.h @@ -2593,6 +2593,21 @@ public: inline void setText(const QString &s) { m_text = s; } // attribute accessors + inline bool hasAttributeNotr() const { return m_has_attr_notr; } + inline QString attributeNotr() const { return m_attr_notr; } + inline void setAttributeNotr(const QString& a) { m_attr_notr = a; m_has_attr_notr = true; } + inline void clearAttributeNotr() { m_has_attr_notr = false; } + + inline bool hasAttributeComment() const { return m_has_attr_comment; } + inline QString attributeComment() const { return m_attr_comment; } + inline void setAttributeComment(const QString& a) { m_attr_comment = a; m_has_attr_comment = true; } + inline void clearAttributeComment() { m_has_attr_comment = false; } + + inline bool hasAttributeExtraComment() const { return m_has_attr_extraComment; } + inline QString attributeExtraComment() const { return m_attr_extraComment; } + inline void setAttributeExtraComment(const QString& a) { m_attr_extraComment = a; m_has_attr_extraComment = true; } + inline void clearAttributeExtraComment() { m_has_attr_extraComment = false; } + // child element accessors inline QStringList elementString() const { return m_string; } void setElementString(const QStringList& a); @@ -2602,6 +2617,15 @@ private: void clear(bool clear_all = true); // attribute data + QString m_attr_notr; + bool m_has_attr_notr; + + QString m_attr_comment; + bool m_has_attr_comment; + + QString m_attr_extraComment; + bool m_has_attr_extraComment; + // child element data uint m_children; QStringList m_string; -- cgit v1.2.3