From 550d2a0a15c9403894448ab83863e71bbac2d349 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 20 Aug 2018 14:24:58 +0200 Subject: uic: Fix pixmap functions for QIcon Task-number: QTBUG-8563 Change-Id: I69b16ac2327fee6dd6f26845bdda60ad4dde56fa Reviewed-by: Jarek Kobus --- src/tools/uic/cpp/cppwriteinitialization.cpp | 57 ++++++++++++++++- src/tools/uic/cpp/cppwriteinitialization.h | 2 + tests/auto/tools/uic/baseline/pixmapfunction.ui | 47 ++++++++++++++ tests/auto/tools/uic/baseline/pixmapfunction.ui.h | 74 +++++++++++++++++++++++ 4 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 tests/auto/tools/uic/baseline/pixmapfunction.ui create mode 100644 tests/auto/tools/uic/baseline/pixmapfunction.ui.h diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index e6d90540b3..6a0e2f0338 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -1645,6 +1645,53 @@ static void writeResourceIcon(QTextStream &output, } } +void WriteInitialization::writePixmapFunctionIcon(QTextStream &output, + const QString &iconName, + const QString &indent, + const DomResourceIcon *i) const +{ + if (i->hasElementNormalOff()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementNormalOff()->text()) + << ", QIcon::Normal, QIcon::Off);\n"; + } + if (i->hasElementNormalOn()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementNormalOn()->text()) + << ", QIcon::Normal, QIcon::On);\n"; + } + if (i->hasElementDisabledOff()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementDisabledOff()->text()) + << ", QIcon::Disabled, QIcon::Off);\n"; + } + if (i->hasElementDisabledOn()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementDisabledOn()->text()) + << ", QIcon::Disabled, QIcon::On);\n"; + } + if (i->hasElementActiveOff()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementActiveOff()->text()) + << ", QIcon::Active, QIcon::Off);\n"; + } + if (i->hasElementActiveOn()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementActiveOn()->text()) + << ", QIcon::Active, QIcon::On);\n"; + } + if (i->hasElementSelectedOff()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementSelectedOff()->text()) + << ", QIcon::Selected, QIcon::Off);\n"; + } + if (i->hasElementSelectedOn()) { + output << indent << iconName << ".addPixmap(" + << pixCall(QLatin1String("QPixmap"), i->elementSelectedOn()->text()) + << ", QIcon::Selected, QIcon::On);\n"; + } +} + QString WriteInitialization::writeIconProperties(const DomResourceIcon *i) { // check cache @@ -1661,7 +1708,10 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i) if (i->attributeTheme().isEmpty()) { // No theme: Write resource icon as is m_output << m_indent << "QIcon " << iconName << ";\n"; - writeResourceIcon(m_output, iconName, m_indent, i); + if (m_uic->pixmapFunction().isEmpty()) + writeResourceIcon(m_output, iconName, m_indent, i); + else + writePixmapFunctionIcon(m_output, iconName, m_indent, i); } else { // Theme: Generate code to check the theme and default to resource const QString themeIconName = fixString(i->attributeTheme(), QString()); @@ -1683,7 +1733,10 @@ QString WriteInitialization::writeIconProperties(const DomResourceIcon *i) << ")) {\n" << m_dindent << iconName << " = QIcon::fromTheme(" << themeNameStringVariableC << ");\n" << m_indent << "} else {\n"; - writeResourceIcon(m_output, iconName, m_dindent, i); + if (m_uic->pixmapFunction().isEmpty()) + writeResourceIcon(m_output, iconName, m_dindent, i); + else + writePixmapFunctionIcon(m_output, iconName, m_dindent, i); m_output << m_indent << "}\n"; } else { // Theme, but no state pixmaps: Construct from theme directly. diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h index e6950a00ea..cce83bd677 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.h +++ b/src/tools/uic/cpp/cppwriteinitialization.h @@ -230,6 +230,8 @@ private: private: QString writeFontProperties(const DomFont *f); QString writeIconProperties(const DomResourceIcon *i); + void writePixmapFunctionIcon(QTextStream &output, const QString &iconName, + const QString &indent, const DomResourceIcon *i) const; QString writeSizePolicy(const DomSizePolicy *sp); QString writeBrushInitialization(const DomBrush *brush); void addButtonGroup(const DomWidget *node, const QString &varName); diff --git a/tests/auto/tools/uic/baseline/pixmapfunction.ui b/tests/auto/tools/uic/baseline/pixmapfunction.ui new file mode 100644 index 0000000000..8edafc7248 --- /dev/null +++ b/tests/auto/tools/uic/baseline/pixmapfunction.ui @@ -0,0 +1,47 @@ + + + Form + + + + 0 + 0 + 149 + 112 + + + + Form + + + + + + + + + labelPixmap + + + + + + + PushButton + + + + buttonIconNormalOff + buttonIconNormalOn + buttonIconDisabledOff + buttonIconDisabledOn + + + + + + + pixmapFunction + + + diff --git a/tests/auto/tools/uic/baseline/pixmapfunction.ui.h b/tests/auto/tools/uic/baseline/pixmapfunction.ui.h new file mode 100644 index 0000000000..1644380c15 --- /dev/null +++ b/tests/auto/tools/uic/baseline/pixmapfunction.ui.h @@ -0,0 +1,74 @@ +/******************************************************************************** +** Form generated from reading UI file 'pixmapfunction.ui' +** +** Created by: Qt User Interface Compiler version 5.12.0 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef PIXMAPFUNCTION_H +#define PIXMAPFUNCTION_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_Form +{ +public: + QVBoxLayout *verticalLayout; + QLabel *label; + QPushButton *pushButton; + + void setupUi(QWidget *Form) + { + if (Form->objectName().isEmpty()) + Form->setObjectName(QString::fromUtf8("Form")); + Form->resize(149, 112); + verticalLayout = new QVBoxLayout(Form); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + label = new QLabel(Form); + label->setObjectName(QString::fromUtf8("label")); + label->setPixmap(QPixmap(pixmapFunction("labelPixmap"))); + + verticalLayout->addWidget(label); + + pushButton = new QPushButton(Form); + pushButton->setObjectName(QString::fromUtf8("pushButton")); + QIcon icon; + icon.addPixmap(QPixmap(pixmapFunction("buttonIconNormalOff")), QIcon::Normal, QIcon::Off); + icon.addPixmap(QPixmap(pixmapFunction("buttonIconNormalOn")), QIcon::Normal, QIcon::On); + icon.addPixmap(QPixmap(pixmapFunction("buttonIconDisabledOff")), QIcon::Disabled, QIcon::Off); + icon.addPixmap(QPixmap(pixmapFunction("buttonIconDisabledOn")), QIcon::Disabled, QIcon::On); + pushButton->setIcon(icon); + + verticalLayout->addWidget(pushButton); + + + retranslateUi(Form); + + QMetaObject::connectSlotsByName(Form); + } // setupUi + + void retranslateUi(QWidget *Form) + { + Form->setWindowTitle(QApplication::translate("Form", "Form", nullptr)); + label->setText(QString()); + pushButton->setText(QApplication::translate("Form", "PushButton", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class Form: public Ui_Form {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // PIXMAPFUNCTION_H -- cgit v1.2.3