From eedf16c96fc9f3307087837785202ec3296df213 Mon Sep 17 00:00:00 2001 From: Pavel Geiger Date: Tue, 5 Jan 2016 13:05:47 +0100 Subject: uic: Accept an -idbased argument When we want to use qtTrId function instead QApplication::translate in generated files it's not possible to use custom function with presented by the --tr argument due to signature difference between qtTrId and QApplication::translate function. With this argument present, uic will generate qtTrId function with second argument empty. When used together with --tr parameter it will use presented function instead. Change-Id: I0d986e4ea25ce58917fd9a2866b1eac0a4671502 Reviewed-by: Friedemann Kleint Reviewed-by: Oswald Buddenhagen Reviewed-by: Jarek Kobus --- src/tools/uic/cpp/cppwriteinitialization.cpp | 19 +- src/tools/uic/main.cpp | 5 + src/tools/uic/option.h | 2 + tests/auto/tools/uic/baseline/qttrid.ui | 228 ++++++++++++++++++++++++ tests/auto/tools/uic/baseline/qttrid.ui.h | 252 +++++++++++++++++++++++++++ tests/auto/tools/uic/tst_uic.cpp | 12 +- 6 files changed, 510 insertions(+), 8 deletions(-) create mode 100644 tests/auto/tools/uic/baseline/qttrid.ui create mode 100644 tests/auto/tools/uic/baseline/qttrid.ui.h diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index 4ad4f60ca8..29a377984c 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -2309,18 +2309,25 @@ QString WriteInitialization::trCall(const QString &str, const QString &commentHi const QString comment = commentHint.isEmpty() ? QString(QLatin1Char('0')) : fixString(commentHint, m_dindent); if (m_option.translateFunction.isEmpty()) { - result = QLatin1String("QApplication::translate(\""); - result += m_generatedClass; - result += QLatin1Char('"'); - result += QLatin1String(", "); + if (m_option.idBased) { + result = QLatin1String("qtTrId("); + } else { + result = QLatin1String("QApplication::translate(\""); + result += m_generatedClass; + result += QLatin1Char('"'); + result += QLatin1String(", "); + } } else { result = m_option.translateFunction; result += QLatin1Char('('); } result += fixString(str, m_dindent); - result += QLatin1String(", "); - result += comment; + + if (!m_option.idBased) { + result += QLatin1String(", "); + result += comment; + } result += QLatin1Char(')'); return result; diff --git a/src/tools/uic/main.cpp b/src/tools/uic/main.cpp index d86ce28451..229e2a9c2f 100644 --- a/src/tools/uic/main.cpp +++ b/src/tools/uic/main.cpp @@ -95,6 +95,10 @@ int runUic(int argc, char *argv[]) generatorOption.setValueName(QStringLiteral("java|cpp")); parser.addOption(generatorOption); + QCommandLineOption idBasedOption(QStringLiteral("idbased")); + idBasedOption.setDescription(QStringLiteral("Use id based function for i18n")); + parser.addOption(idBasedOption); + parser.addPositionalArgument(QStringLiteral("[uifile]"), QStringLiteral("Input file (*.ui), otherwise stdin.")); parser.process(app); @@ -103,6 +107,7 @@ int runUic(int argc, char *argv[]) driver.option().outputFile = parser.value(outputOption); driver.option().headerProtection = !parser.isSet(noProtOption); driver.option().implicitIncludes = !parser.isSet(noImplicitIncludesOption); + driver.option().idBased = parser.isSet(idBasedOption); driver.option().postfix = parser.value(postfixOption); driver.option().translateFunction = parser.value(translateOption); driver.option().includeFile = parser.value(includeOption); diff --git a/src/tools/uic/option.h b/src/tools/uic/option.h index 57a1550657..1483d94c07 100644 --- a/src/tools/uic/option.h +++ b/src/tools/uic/option.h @@ -51,6 +51,7 @@ struct Option unsigned int extractImages : 1; unsigned int limitXPM_LineLength : 1; unsigned int implicitIncludes: 1; + unsigned int idBased: 1; Generator generator; QString inputFile; @@ -76,6 +77,7 @@ struct Option extractImages(0), limitXPM_LineLength(0), implicitIncludes(1), + idBased(0), generator(CppGenerator), prefix(QLatin1String("Ui_")) { indent.fill(QLatin1Char(' '), 4); } diff --git a/tests/auto/tools/uic/baseline/qttrid.ui b/tests/auto/tools/uic/baseline/qttrid.ui new file mode 100644 index 0000000000..1cfc7f5400 --- /dev/null +++ b/tests/auto/tools/uic/baseline/qttrid.ui @@ -0,0 +1,228 @@ + + RemoteControlClass + + + + 0 + 0 + 344 + 364 + + + + RemoteControl + + + + + + + Start URL: + + + + + + + + + + Launch Qt HelpViewer + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 113 + 16 + + + + + + + + false + + + Actions + + + + + + Search in Index: + + + + + + + 0 + + + + + + + + + + + :/remotecontrol/enter.png + + + + + + + + + Identifier: + + + + + + + 0 + + + + + + + + + + + :/remotecontrol/enter.png + + + + + + + + + Show URL: + + + + + + + 0 + + + + + + + + + + + :/remotecontrol/enter.png + + + + + + + + + Sync Contents + + + + + + + Qt::Horizontal + + + + 81 + 20 + + + + + + + + Show Contents + + + + + + + Show Index + + + + + + + Show Bookmarks + + + + + + + + + + + + 0 + 0 + 344 + 21 + + + + + File + + + + + + + + + Quit + + + + + + + + + diff --git a/tests/auto/tools/uic/baseline/qttrid.ui.h b/tests/auto/tools/uic/baseline/qttrid.ui.h new file mode 100644 index 0000000000..3a2b73284b --- /dev/null +++ b/tests/auto/tools/uic/baseline/qttrid.ui.h @@ -0,0 +1,252 @@ +/******************************************************************************** +** Form generated from reading UI file 'qttrid.ui' +** +** Created by: Qt User Interface Compiler version 5.5.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef QTTRID_H +#define QTTRID_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_RemoteControlClass +{ +public: + QAction *actionQuit; + QWidget *centralWidget; + QGridLayout *gridLayout; + QLabel *label; + QLineEdit *startUrlLineEdit; + QPushButton *launchButton; + QSpacerItem *spacerItem; + QSpacerItem *spacerItem1; + QGroupBox *actionGroupBox; + QGridLayout *gridLayout1; + QLabel *label_2; + QHBoxLayout *hboxLayout; + QLineEdit *indexLineEdit; + QToolButton *indexButton; + QLabel *label_4; + QHBoxLayout *hboxLayout1; + QLineEdit *identifierLineEdit; + QToolButton *identifierButton; + QLabel *label_3; + QHBoxLayout *hboxLayout2; + QLineEdit *urlLineEdit; + QToolButton *urlButton; + QPushButton *syncContentsButton; + QSpacerItem *spacerItem2; + QCheckBox *contentsCheckBox; + QCheckBox *indexCheckBox; + QCheckBox *bookmarksCheckBox; + QMenuBar *menuBar; + QMenu *menuFile; + QStatusBar *statusBar; + + void setupUi(QMainWindow *RemoteControlClass) + { + if (RemoteControlClass->objectName().isEmpty()) + RemoteControlClass->setObjectName(QStringLiteral("RemoteControlClass")); + RemoteControlClass->resize(344, 364); + actionQuit = new QAction(RemoteControlClass); + actionQuit->setObjectName(QStringLiteral("actionQuit")); + centralWidget = new QWidget(RemoteControlClass); + centralWidget->setObjectName(QStringLiteral("centralWidget")); + gridLayout = new QGridLayout(centralWidget); + gridLayout->setSpacing(6); + gridLayout->setContentsMargins(11, 11, 11, 11); + gridLayout->setObjectName(QStringLiteral("gridLayout")); + label = new QLabel(centralWidget); + label->setObjectName(QStringLiteral("label")); + + gridLayout->addWidget(label, 0, 0, 1, 1); + + startUrlLineEdit = new QLineEdit(centralWidget); + startUrlLineEdit->setObjectName(QStringLiteral("startUrlLineEdit")); + + gridLayout->addWidget(startUrlLineEdit, 0, 1, 1, 2); + + launchButton = new QPushButton(centralWidget); + launchButton->setObjectName(QStringLiteral("launchButton")); + + gridLayout->addWidget(launchButton, 1, 1, 1, 1); + + spacerItem = new QSpacerItem(101, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + gridLayout->addItem(spacerItem, 1, 2, 1, 1); + + spacerItem1 = new QSpacerItem(113, 16, QSizePolicy::Minimum, QSizePolicy::Fixed); + + gridLayout->addItem(spacerItem1, 2, 1, 1, 1); + + actionGroupBox = new QGroupBox(centralWidget); + actionGroupBox->setObjectName(QStringLiteral("actionGroupBox")); + actionGroupBox->setEnabled(false); + gridLayout1 = new QGridLayout(actionGroupBox); + gridLayout1->setSpacing(6); + gridLayout1->setContentsMargins(11, 11, 11, 11); + gridLayout1->setObjectName(QStringLiteral("gridLayout1")); + label_2 = new QLabel(actionGroupBox); + label_2->setObjectName(QStringLiteral("label_2")); + + gridLayout1->addWidget(label_2, 0, 0, 1, 1); + + hboxLayout = new QHBoxLayout(); + hboxLayout->setSpacing(0); + hboxLayout->setObjectName(QStringLiteral("hboxLayout")); + indexLineEdit = new QLineEdit(actionGroupBox); + indexLineEdit->setObjectName(QStringLiteral("indexLineEdit")); + + hboxLayout->addWidget(indexLineEdit); + + indexButton = new QToolButton(actionGroupBox); + indexButton->setObjectName(QStringLiteral("indexButton")); + const QIcon icon = QIcon(QString::fromUtf8(":/remotecontrol/enter.png")); + indexButton->setIcon(icon); + + hboxLayout->addWidget(indexButton); + + + gridLayout1->addLayout(hboxLayout, 0, 1, 1, 2); + + label_4 = new QLabel(actionGroupBox); + label_4->setObjectName(QStringLiteral("label_4")); + + gridLayout1->addWidget(label_4, 1, 0, 1, 1); + + hboxLayout1 = new QHBoxLayout(); + hboxLayout1->setSpacing(0); + hboxLayout1->setObjectName(QStringLiteral("hboxLayout1")); + identifierLineEdit = new QLineEdit(actionGroupBox); + identifierLineEdit->setObjectName(QStringLiteral("identifierLineEdit")); + + hboxLayout1->addWidget(identifierLineEdit); + + identifierButton = new QToolButton(actionGroupBox); + identifierButton->setObjectName(QStringLiteral("identifierButton")); + identifierButton->setIcon(icon); + + hboxLayout1->addWidget(identifierButton); + + + gridLayout1->addLayout(hboxLayout1, 1, 1, 1, 2); + + label_3 = new QLabel(actionGroupBox); + label_3->setObjectName(QStringLiteral("label_3")); + + gridLayout1->addWidget(label_3, 2, 0, 1, 1); + + hboxLayout2 = new QHBoxLayout(); + hboxLayout2->setSpacing(0); + hboxLayout2->setObjectName(QStringLiteral("hboxLayout2")); + urlLineEdit = new QLineEdit(actionGroupBox); + urlLineEdit->setObjectName(QStringLiteral("urlLineEdit")); + + hboxLayout2->addWidget(urlLineEdit); + + urlButton = new QToolButton(actionGroupBox); + urlButton->setObjectName(QStringLiteral("urlButton")); + urlButton->setIcon(icon); + + hboxLayout2->addWidget(urlButton); + + + gridLayout1->addLayout(hboxLayout2, 2, 1, 1, 2); + + syncContentsButton = new QPushButton(actionGroupBox); + syncContentsButton->setObjectName(QStringLiteral("syncContentsButton")); + + gridLayout1->addWidget(syncContentsButton, 3, 1, 1, 1); + + spacerItem2 = new QSpacerItem(81, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + gridLayout1->addItem(spacerItem2, 3, 2, 1, 1); + + contentsCheckBox = new QCheckBox(actionGroupBox); + contentsCheckBox->setObjectName(QStringLiteral("contentsCheckBox")); + + gridLayout1->addWidget(contentsCheckBox, 4, 0, 1, 3); + + indexCheckBox = new QCheckBox(actionGroupBox); + indexCheckBox->setObjectName(QStringLiteral("indexCheckBox")); + + gridLayout1->addWidget(indexCheckBox, 5, 0, 1, 1); + + bookmarksCheckBox = new QCheckBox(actionGroupBox); + bookmarksCheckBox->setObjectName(QStringLiteral("bookmarksCheckBox")); + + gridLayout1->addWidget(bookmarksCheckBox, 6, 0, 1, 3); + + + gridLayout->addWidget(actionGroupBox, 3, 0, 1, 3); + + RemoteControlClass->setCentralWidget(centralWidget); + menuBar = new QMenuBar(RemoteControlClass); + menuBar->setObjectName(QStringLiteral("menuBar")); + menuBar->setGeometry(QRect(0, 0, 344, 21)); + menuFile = new QMenu(menuBar); + menuFile->setObjectName(QStringLiteral("menuFile")); + RemoteControlClass->setMenuBar(menuBar); + statusBar = new QStatusBar(RemoteControlClass); + statusBar->setObjectName(QStringLiteral("statusBar")); + RemoteControlClass->setStatusBar(statusBar); + + menuBar->addAction(menuFile->menuAction()); + menuFile->addAction(actionQuit); + + retranslateUi(RemoteControlClass); + + QMetaObject::connectSlotsByName(RemoteControlClass); + } // setupUi + + void retranslateUi(QMainWindow *RemoteControlClass) + { + RemoteControlClass->setWindowTitle(qtTrId("RemoteControl")); + actionQuit->setText(qtTrId("Quit")); + label->setText(qtTrId("Start URL:")); + launchButton->setText(qtTrId("Launch Qt HelpViewer")); + actionGroupBox->setTitle(qtTrId("Actions")); + label_2->setText(qtTrId("Search in Index:")); + indexButton->setText(QString()); + label_4->setText(qtTrId("Identifier:")); + identifierButton->setText(QString()); + label_3->setText(qtTrId("Show URL:")); + urlButton->setText(QString()); + syncContentsButton->setText(qtTrId("Sync Contents")); + contentsCheckBox->setText(qtTrId("Show Contents")); + indexCheckBox->setText(qtTrId("Show Index")); + bookmarksCheckBox->setText(qtTrId("Show Bookmarks")); + menuFile->setTitle(qtTrId("File")); + } // retranslateUi + +}; + +namespace Ui { + class RemoteControlClass: public Ui_RemoteControlClass {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // QTTRID_H diff --git a/tests/auto/tools/uic/tst_uic.cpp b/tests/auto/tools/uic/tst_uic.cpp index 8ae2dd701e..cf43cb02d3 100644 --- a/tests/auto/tools/uic/tst_uic.cpp +++ b/tests/auto/tools/uic/tst_uic.cpp @@ -142,10 +142,11 @@ void tst_uic::run() { QFETCH(QString, originalFile); QFETCH(QString, generatedFile); + QFETCH(QStringList, options); QProcess process; process.start(m_command, QStringList(originalFile) - << QString(QLatin1String("-o")) << generatedFile); + << QString(QLatin1String("-o")) << generatedFile << options); QVERIFY2(process.waitForStarted(), msgProcessStartFailed(m_command, process.errorString())); QVERIFY(process.waitForFinished()); QCOMPARE(process.exitStatus(), QProcess::NormalExit); @@ -157,6 +158,7 @@ void tst_uic::run_data() const { QTest::addColumn("originalFile"); QTest::addColumn("generatedFile"); + QTest::addColumn("options"); QDir generated(m_generated.path()); QDir baseline(m_baseline); @@ -165,9 +167,15 @@ void tst_uic::run_data() const const QString generatedFile = generated.absolutePath() + QLatin1Char('/') + baselineFile.fileName() + QLatin1String(".h"); + + QStringList options; + if (baselineFile.fileName() == QLatin1String("qttrid.ui")) + options << QStringList(QLatin1String("-idbased")); + QTest::newRow(qPrintable(baselineFile.baseName())) << baselineFile.absoluteFilePath() - << generatedFile; + << generatedFile + << options; } } -- cgit v1.2.3