diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp index f9822ab7c201686ecf7b1a478ed00001dbd7d2af..77a4d5d623abd6b0304990b0d417d90f4881eb6f 100644 --- a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp @@ -474,18 +474,11 @@ QString QmlStandaloneApp::templatesRoot() return Core::ICore::instance()->resourcePath() + QLatin1String("/templates/qmlapp/"); } -static Core::GeneratedFile generateFileCopy(const QString &source, - const QString &target, - bool openEditor = false) +static Core::GeneratedFile file(const QByteArray &data, const QString &targetFile) { - QFile sourceFile(source); - sourceFile.open(QIODevice::ReadOnly); - Q_ASSERT(sourceFile.isOpen()); - Core::GeneratedFile generatedFile(target); + Core::GeneratedFile generatedFile(targetFile); generatedFile.setBinary(true); - generatedFile.setBinaryContents(sourceFile.readAll()); - if (openEditor) - generatedFile.setAttributes(Core::GeneratedFile::OpenEditorAttribute); + generatedFile.setBinaryContents(data); return generatedFile; } @@ -493,22 +486,19 @@ Core::GeneratedFiles QmlStandaloneApp::generateFiles(QString *errorMessage) cons { Core::GeneratedFiles files; - Core::GeneratedFile generatedProFile(path(AppProfile)); - generatedProFile.setContents(generateProFile(errorMessage)); - generatedProFile.setAttributes(Core::GeneratedFile::OpenProjectAttribute); - files.append(generatedProFile); - files.append(generateFileCopy(path(AppPriOrigin), path(AppPri))); + files.append(file(generateFile(AppProfileFile, errorMessage), path(AppProfile))); + files.last().setAttributes(Core::GeneratedFile::OpenProjectAttribute); + files.append(file(generateFile(AppPriFile, errorMessage), path(AppPri))); - if (!useExistingMainQml()) - files.append(generateFileCopy(path(MainQmlOrigin), path(MainQml), true)); - - Core::GeneratedFile generatedMainCppFile(path(MainCpp)); - generatedMainCppFile.setContents(generateMainCpp(errorMessage)); - files.append(generatedMainCppFile); + if (!useExistingMainQml()) { + files.append(file(generateFile(MainQmlFile, errorMessage), path(MainQml))); + files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute); + } - files.append(generateFileCopy(path(AppViewerCppOrigin), path(AppViewerCpp))); - files.append(generateFileCopy(path(AppViewerHOrigin), path(AppViewerH))); - files.append(generateFileCopy(path(SymbianSvgIconOrigin), path(SymbianSvgIcon))); + files.append(file(generateFile(MainCppFile, errorMessage), path(MainCpp))); + files.append(file(generateFile(AppViewerCppFile, errorMessage), path(AppViewerCpp))); + files.append(file(generateFile(AppViewerHFile, errorMessage), path(AppViewerH))); + files.append(file(generateFile(SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon))); return files; } @@ -529,5 +519,68 @@ const QList<QmlModule*> QmlStandaloneApp::modules() const return m_modules; } +static QByteArray readBlob(const QString &source) +{ + QFile sourceFile(source); + sourceFile.open(QIODevice::ReadOnly); + Q_ASSERT(sourceFile.isOpen()); + return sourceFile.readAll(); +} + +QByteArray QmlStandaloneApp::generateFile(GeneratedFile file, const QString *errorMessage) const +{ + QByteArray data; + const QString cFileComment = QLatin1String("//"); + const QString proFileComment = QLatin1String("#"); + QString comment = cFileComment; + bool versionAndChecksum = false; + switch (file) { + case MainQmlFile: + data = readBlob(path(MainQmlOrigin)); + break; + case MainCppFile: + data = generateMainCpp(errorMessage); + break; + case SymbianSvgIconFile: + data = readBlob(path(SymbianSvgIconOrigin)); + break; + case AppProfileFile: + data = generateProFile(errorMessage); + comment = proFileComment; + break; + case AppPriFile: + data = readBlob(path(AppPriOrigin)); + comment = proFileComment; + versionAndChecksum = true; + break; + case AppViewerCppFile: + data = readBlob(path(AppViewerCppOrigin)); + versionAndChecksum = true; + break; + case AppViewerHFile: + default: + data = readBlob(path(AppViewerHOrigin)); + versionAndChecksum = true; + break; + } + if (!versionAndChecksum) + return data; + QByteArray versioned = data; + versioned.replace('\x0D', ""); + versioned.replace('\x0A', ""); + const quint16 checkSum = qChecksum(versioned.constData(), versioned.length()); + const QString checkSumString = QString::number(checkSum, 16); + const QString versionString = QString::number(stubVersion()); + const QString versionLine = + comment + QLatin1String(" checksum: ") + checkSumString + + QLatin1String(" version: ") + versionString + QLatin1Char('\x0A'); + return versionLine.toAscii() + data; +} + +int QmlStandaloneApp::stubVersion() +{ + return 1; +} + } // namespace Internal } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h index 85ff0f966501ce2a3b59cfd7638b9d1a231e0151..54c14007f8a32c66a8945b3dc4da841ada741500 100644 --- a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h @@ -112,6 +112,16 @@ public: ModulesDir }; + enum GeneratedFile { + MainQmlFile, + MainCppFile, + AppProfileFile, + AppPriFile, + AppViewerCppFile, + AppViewerHFile, + SymbianSvgIconFile + }; + QmlStandaloneApp(); ~QmlStandaloneApp(); @@ -142,6 +152,8 @@ public: bool useExistingMainQml() const; QString error() const; const QList<QmlModule*> modules() const; + QByteArray generateFile(GeneratedFile file, const QString *errorMessage) const; + static int stubVersion(); private: QByteArray generateMainCpp(const QString *errorMessage) const;