From 2c2f15dbc6726210a1d9208342158644fbb6e1fc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 14 Sep 2010 17:03:08 +0200 Subject: [PATCH] Custom wizard: Introduce 'binary' attribute for source files. Indicating the file is to be copied as is and not preprocessed. Task-number: QTCREATORBUG-2344 --- .../customwizard/customwizard.cpp | 21 +++++++++++++++---- .../customwizard/customwizardparameters.cpp | 6 +++++- .../customwizard/customwizardparameters.h | 1 + 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp index 2943e55dfd3..39d4416285b 100644 --- a/src/plugins/projectexplorer/customwizard/customwizard.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp @@ -151,17 +151,30 @@ static inline bool createFile(Internal::CustomWizardFile cwFile, const QString targetPath = QDir::toNativeSeparators(targetDirectory + slash + cwFile.target); if (CustomWizardPrivate::verbose) qDebug() << "generating " << targetPath << sourcePath << fm; + + // Read contents of source file + const QFile::OpenMode openMode + = cwFile.binary ? QIODevice::ReadOnly : (QIODevice::ReadOnly|QIODevice::Text); QFile file(sourcePath); - if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) { + if (!file.open(openMode)) { *errorMessage = QString::fromLatin1("Cannot open %1: %2").arg(sourcePath, file.errorString()); return false; } - // Field replacement on contents - const QString contentsIn = QString::fromLocal8Bit(file.readAll()); + const QByteArray contentData = file.readAll(); + file.close(); Core::GeneratedFile generatedFile; - generatedFile.setContents(Internal::CustomWizardContext::processFile(fm, contentsIn)); generatedFile.setPath(targetPath); + if (cwFile.binary) { + // Binary file: Set data. + generatedFile.setBinary(true); + generatedFile.setBinaryContents(contentData); + } else { + // Template file: Preprocess. + const QString contentsIn = QString::fromLocal8Bit(contentData); + generatedFile.setContents(Internal::CustomWizardContext::processFile(fm, contentsIn)); + } + Core::GeneratedFile::Attributes attributes = 0; if (cwFile.openEditor) attributes |= Core::GeneratedFile::OpenEditorAttribute; diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp index 6ccca044989..67a9e5844b7 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp @@ -88,6 +88,7 @@ static const char filesGeneratorScriptAttributeC[] = "generatorscript"; static const char fileElementC[] = "file"; static const char fileSourceAttributeC[] = "source"; static const char fileTargetAttributeC[] = "target"; +static const char fileBinaryAttributeC[] = "binary"; enum ParseState { ParseBeginning, @@ -137,7 +138,7 @@ QString CustomWizardField::comboEntryTextKey(int i) } CustomWizardFile::CustomWizardFile() : - openEditor(false), openProject(false) + openEditor(false), openProject(false), binary(false) { } @@ -543,6 +544,7 @@ CustomWizardParameters::ParseResult file.target = attributeValue(reader, fileTargetAttributeC); file.openEditor = booleanAttributeValue(reader, customWizardFileOpenEditorAttributeC, false); file.openProject = booleanAttributeValue(reader, customWizardFileOpenProjectAttributeC, false); + file.binary = booleanAttributeValue(reader, fileBinaryAttributeC, false); if (file.target.isEmpty()) file.target = file.source; if (file.source.isEmpty()) { @@ -644,6 +646,8 @@ QString CustomWizardParameters::toString() const str << " [editor]"; if (f.openProject) str << " [project]"; + if (f.binary) + str << " [binary]"; str << '\n'; } foreach(const CustomWizardField &f, fields) { diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.h b/src/plugins/projectexplorer/customwizard/customwizardparameters.h index 732098ff35e..15c8bbb97ea 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardparameters.h +++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.h @@ -68,6 +68,7 @@ struct CustomWizardFile { QString target; bool openEditor; bool openProject; + bool binary; }; // Argument to the generator script containing placeholders to -- GitLab