summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJonas Kvinge <jonas@jkvinge.net>2021-08-14 19:43:09 +0200
committerJonas Kvinge <jonas@jkvinge.net>2021-10-12 18:17:49 +0200
commit18ce6809b2eaef87df059405e025d5ec3b7111ae (patch)
tree515fbf5d4340576f52da2d52b04e18bc65f09cf0 /tools
parente2667fbcf24c6f323a2f71b4a90c0d12ecda531b (diff)
downloadqtactiveqt-18ce6809b2eaef87df059405e025d5ec3b7111ae.tar.gz
Add -controlname option to dumpcpp
This option will use the control name instead of the UUID for setControl() in the generated cpp file. Change-Id: Ib100a53647a3c514bb6fa012268a821c70061079 Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/dumpcpp/main.cpp32
1 files changed, 24 insertions, 8 deletions
diff --git a/tools/dumpcpp/main.cpp b/tools/dumpcpp/main.cpp
index 60e5c94..6aae5e1 100644
--- a/tools/dumpcpp/main.cpp
+++ b/tools/dumpcpp/main.cpp
@@ -180,8 +180,16 @@ static void formatConstructorSignature(QTextStream &out, ObjectCategories catego
static void formatConstructorBody(QTextStream &out, const QByteArray &nameSpace,
const QByteArray &className,
- const QString &controlID, ObjectCategories category)
+ const QString &controlID, ObjectCategories category, bool useControlName)
{
+ QString controlName;
+ if (useControlName) {
+ if (!nameSpace.isEmpty())
+ controlName = QString::fromUtf8(nameSpace) + QStringLiteral(".");
+ controlName += QString::fromUtf8(className);
+ } else {
+ controlName = controlID;
+ }
if (!nameSpace.isEmpty())
out << nameSpace << "::";
out << className << "::" << className;
@@ -198,11 +206,11 @@ static void formatConstructorBody(QTextStream &out, const QByteArray &nameSpace,
out << " internalRelease();" << Qt::endl;
} else if (category & Licensed) {
out << " if (licenseKey.isEmpty())" << Qt::endl;
- out << " setControl(QStringLiteral(\"" << controlID << "\"));" << Qt::endl;
+ out << " setControl(QStringLiteral(\"" << controlName << "\"));" << Qt::endl;
out << " else" << Qt::endl;
- out << " setControl(QStringLiteral(\"" << controlID << ":\") + licenseKey);" << Qt::endl;
+ out << " setControl(QStringLiteral(\"" << controlName << ":\") + licenseKey);" << Qt::endl;
} else {
- out << " setControl(QStringLiteral(\"" << controlID << "\"));" << Qt::endl;
+ out << " setControl(QStringLiteral(\"" << controlName << "\"));" << Qt::endl;
}
out << '}' << Qt::endl << Qt::endl;
}
@@ -539,6 +547,7 @@ void generateClassDecl(QTextStream &out, const QMetaObject *mo,
bool generateClassImpl(QTextStream &out, const QMetaObject *mo, const QByteArray &className,
const QString &controlID,
const QByteArray &nameSpace, ObjectCategories category,
+ bool useControlName,
QString *errorString)
{
Q_STATIC_ASSERT_X(QMetaObjectPrivate::OutputRevision == 10, "dumpcpp should generate the same version as moc");
@@ -557,7 +566,7 @@ bool generateClassImpl(QTextStream &out, const QMetaObject *mo, const QByteArray
out << moCode << "\n\n";
- formatConstructorBody(out, nameSpace, className, controlID, category);
+ formatConstructorBody(out, nameSpace, className, controlID, category, useControlName);
return true;
}
@@ -622,7 +631,7 @@ static const QMetaObject *baseMetaObject(ObjectCategories c)
}
bool generateTypeLibrary(QString typeLibFile, QString outname,
- const QString &nameSpace, ObjectCategories category)
+ const QString &nameSpace, ObjectCategories category, bool useControlName)
{
typeLibFile.replace(QLatin1Char('/'), QLatin1Char('\\'));
@@ -909,7 +918,7 @@ bool generateTypeLibrary(QString typeLibFile, QString outname,
if (implFile.isOpen()) {
QString errorString;
if (!generateClassImpl(classImplOut, metaObject, className, guid.toString(), libNameBa,
- object_category, &errorString)) {
+ object_category, useControlName, &errorString)) {
qWarning("%s", qPrintable(errorString));
return false;
}
@@ -970,6 +979,7 @@ struct Options
ProgramMode mode = GenerateMode;
ObjectCategories category = DefaultObject;
bool dispatchEqualsIDispatch = false;
+ bool useControlName = false;
QString outname;
QString typeLib;
@@ -989,6 +999,7 @@ static void parseOptions(Options *options)
const char outputOptionC[] = "-o";
const char nameSpaceOptionC[] = "-n";
const char getfileOptionC[] = "-getfile";
+ const char useControlNameOptionC[] = "-controlname";
QStringList args = QCoreApplication::arguments();
// Convert Windows-style '/option' into '-option'.
@@ -1036,6 +1047,9 @@ static void parseOptions(Options *options)
parser.addOption(getFileOption);
parser.addPositionalArgument(QStringLiteral("input"),
QStringLiteral("A type library file, type library ID, ProgID or CLSID."));
+ QCommandLineOption useControlNameOption(QLatin1String(useControlNameOptionC + 1),
+ QStringLiteral("Use the control class name instead of the UUID for setControl()."));
+ parser.addOption(useControlNameOption);
parser.process(args);
if (parser.isSet(outputOption))
@@ -1053,6 +1067,8 @@ static void parseOptions(Options *options)
options->typeLib = parser.value(getFileOption);
options->mode = TypeLibID;
}
+ if (parser.isSet(useControlNameOption))
+ options->useControlName = true;
if (!parser.positionalArguments().isEmpty())
options->typeLib = parser.positionalArguments().first();
@@ -1162,7 +1178,7 @@ int main(int argc, char **argv)
return -2;
}
- if (!generateTypeLibrary(typeLib, options.outname, options.nameSpace, options.category)) {
+ if (!generateTypeLibrary(typeLib, options.outname, options.nameSpace, options.category, options.useControlName)) {
qWarning("dumpcpp: error processing type library '%s'", qPrintable(typeLib));
return -1;
}