diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp index 3f7e66b56df1faefca3340651329edf96f6ae3d2..6c841fcd6892b2ba671f81d5ee1dd047c9c25594 100644 --- a/src/plugins/cppeditor/cppclasswizard.cpp +++ b/src/plugins/cppeditor/cppclasswizard.cpp @@ -233,14 +233,19 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par if (namespaceList.empty()) // Paranoia! return false; - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); + const QString headerLicense = + CppTools::AbstractEditorSupport::licenseTemplate(params.headerFile, + params.className); + const QString sourceLicense = + CppTools::AbstractEditorSupport::licenseTemplate(params.sourceFile, + params.className); const QString unqualifiedClassName = namespaceList.takeLast(); const QString guard = Utils::headerGuard(params.headerFile); // == Header file == QTextStream headerStr(header); - headerStr << license << "#ifndef " << guard + headerStr << headerLicense << "#ifndef " << guard << "\n#define " << guard << '\n'; const QRegExp qtClassExpr(QLatin1String("^Q[A-Z3].+")); @@ -328,7 +333,7 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par // == Source file == QTextStream sourceStr(source); - sourceStr << license; + sourceStr << sourceLicense; Utils::writeIncludeFileDirective(params.headerFile, false, sourceStr); if (params.classType == Utils::NewClassWidget::SharedDataClass) Utils::writeIncludeFileDirective(QLatin1String("QSharedData"), true, sourceStr); diff --git a/src/plugins/cppeditor/cppfilewizard.cpp b/src/plugins/cppeditor/cppfilewizard.cpp index eff7f24266113ec44307f50564250d6702643923..2a0cf9b2dd335fdb7bd6b2adf35d349ce64b535f 100644 --- a/src/plugins/cppeditor/cppfilewizard.cpp +++ b/src/plugins/cppeditor/cppfilewizard.cpp @@ -68,10 +68,9 @@ Core::GeneratedFiles CppFileWizard::generateFilesFromPath(const QString &path, QString CppFileWizard::fileContents(FileType type, const QString &fileName) const { - const QString baseName = QFileInfo(fileName).completeBaseName(); QString contents; QTextStream str(&contents); - str << CppTools::AbstractEditorSupport::licenseTemplate(); + str << CppTools::AbstractEditorSupport::licenseTemplate(fileName); switch (type) { case Header: { const QString guard = Utils::headerGuard(fileName); diff --git a/src/plugins/cpptools/abstracteditorsupport.cpp b/src/plugins/cpptools/abstracteditorsupport.cpp index 6a1578d64e3befb6595c79ff05de306e7ecd8649..d1edabf72d90b35a86e8370d71ddde068c2f99a3 100644 --- a/src/plugins/cpptools/abstracteditorsupport.cpp +++ b/src/plugins/cpptools/abstracteditorsupport.cpp @@ -92,9 +92,9 @@ QString AbstractEditorSupport::functionAt(const CppModelManagerInterface *modelM return QString(); } -QString AbstractEditorSupport::licenseTemplate() +QString AbstractEditorSupport::licenseTemplate(const QString &file, const QString &className) { - return Internal::CppFileSettings::licenseTemplate(); + return Internal::CppFileSettings::licenseTemplate(file, className); } } diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp index b3833e016fe13c6260406d4b585c6a716cad6e52..397cb912808a106b93ef113bfab8635160261daf 100644 --- a/src/plugins/cpptools/cppfilesettingspage.cpp +++ b/src/plugins/cpptools/cppfilesettingspage.cpp @@ -41,6 +41,7 @@ #include <QtCore/QSettings> #include <QtCore/QDebug> #include <QtCore/QFile> +#include <QtCore/QFileInfo> #include <QtCore/QCoreApplication> #include <QtCore/QDate> #include <QtCore/QLocale> @@ -106,10 +107,22 @@ bool CppFileSettings::equals(const CppFileSettings &rhs) const } // Replacements of special license template keywords. -static QString keyWordReplacement(const QString &keyWord) +static bool keyWordReplacement(const QString &keyWord, + const QString &file, + const QString &className, + QString *value) { if (keyWord == QLatin1String("%YEAR%")) { - return QString::number(QDate::currentDate().year()); + *value = QString::number(QDate::currentDate().year()); + return true; + } + if (keyWord == QLatin1String("%CLASS%")) { + *value = className; + return true; + } + if (keyWord == QLatin1String("%FILENAME%")) { + *value = QFileInfo(file).fileName(); + return true; } if (keyWord == QLatin1String("%DATE%")) { static QString format; @@ -121,26 +134,29 @@ static QString keyWordReplacement(const QString &keyWord) if (format.count(ypsilon) == 2) format.insert(format.indexOf(ypsilon), QString(2, ypsilon)); } - return QDate::currentDate().toString(format); + *value = QDate::currentDate().toString(format); + return true; } if (keyWord == QLatin1String("%USER%")) { #ifdef Q_OS_WIN - return QString::fromLocal8Bit(qgetenv("USERNAME")); + *value = QString::fromLocal8Bit(qgetenv("USERNAME")); #else - return QString::fromLocal8Bit(qgetenv("USER")); + *value = QString::fromLocal8Bit(qgetenv("USER")); #endif + return true; } // Environment variables (for example '%$EMAIL%'). if (keyWord.startsWith(QLatin1String("%$"))) { const QString varName = keyWord.mid(2, keyWord.size() - 3); - return QString::fromLocal8Bit(qgetenv(varName.toLocal8Bit())); + *value = QString::fromLocal8Bit(qgetenv(varName.toLocal8Bit())); + return true; } - return QString(); + return false; } // Parse a license template, scan for %KEYWORD% and replace if known. // Replace '%%' by '%'. -static void parseLicenseTemplatePlaceholders(QString *t) +static void parseLicenseTemplatePlaceholders(QString *t, const QString &file, const QString &className) { int pos = 0; const QChar placeHolder = QLatin1Char('%'); @@ -156,19 +172,20 @@ static void parseLicenseTemplatePlaceholders(QString *t) pos = placeHolderPos + 1; } else { const QString keyWord = t->mid(placeHolderPos, endPlaceHolderPos + 1 - placeHolderPos); - const QString replacement = keyWordReplacement(keyWord); - if (replacement.isEmpty()) { - pos = endPlaceHolderPos + 1; - } else { + QString replacement; + if (keyWordReplacement(keyWord, file, className, &replacement)) { t->replace(placeHolderPos, keyWord.size(), replacement); pos = placeHolderPos + replacement.size(); + } else { + // Leave invalid keywords as is. + pos = endPlaceHolderPos + 1; } } } while (pos < t->size()); } // Convenience that returns the formatted license template. -QString CppFileSettings::licenseTemplate() +QString CppFileSettings::licenseTemplate(const QString &fileName, const QString &className) { const QSettings *s = Core::ICore::instance()->settings(); @@ -184,7 +201,7 @@ QString CppFileSettings::licenseTemplate() return QString(); } QString license = QString::fromUtf8(file.readAll()); - parseLicenseTemplatePlaceholders(&license); + parseLicenseTemplatePlaceholders(&license, fileName, className); // Ensure exactly one additional new line separating stuff const QChar newLine = QLatin1Char('\n'); if (!license.endsWith(newLine)) diff --git a/src/plugins/cpptools/cppfilesettingspage.h b/src/plugins/cpptools/cppfilesettingspage.h index 6ee5105165620c41b035a9c4b66d3a0e908e7ba3..f00ce4c1f44f8e80dba3d7d14a2f1e10c7b562ee 100644 --- a/src/plugins/cpptools/cppfilesettingspage.h +++ b/src/plugins/cpptools/cppfilesettingspage.h @@ -60,7 +60,7 @@ struct CppFileSettings // Convenience to return a license template completely formatted. // Currently made public in - static QString licenseTemplate(); + static QString licenseTemplate(const QString &file = QString(), const QString &className = QString()); bool equals(const CppFileSettings &rhs) const; }; diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index aab5cf4ad57773e215e7910472292d713207c86a..cf95b468a8285ec6579c0df8753679569893a68a 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -170,7 +170,7 @@ public: const QString &fileName, int line, int column); - static QString licenseTemplate(); + static QString licenseTemplate(const QString &file = QString(), const QString &className = QString()); private: CppModelManagerInterface *m_modelmanager; diff --git a/src/plugins/designer/cpp/formclasswizardparameters.cpp b/src/plugins/designer/cpp/formclasswizardparameters.cpp index 922c97ef985bb033b3ad564b5ca845f812ac8bc4..9fdd1692e9db3f9f360684a397d6372924a717c0 100644 --- a/src/plugins/designer/cpp/formclasswizardparameters.cpp +++ b/src/plugins/designer/cpp/formclasswizardparameters.cpp @@ -341,7 +341,10 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati const QString unqualifiedClassName = namespaceList.takeLast(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); + const QString headerLicense = + CppTools::AbstractEditorSupport::licenseTemplate(headerFile, className); + const QString sourceLicense = + CppTools::AbstractEditorSupport::licenseTemplate(sourceFile, className); // Include guards const QString guard = Utils::headerGuard(headerFile); @@ -351,7 +354,7 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati // 1) Header file QTextStream headerStr(header); - headerStr << license << "#ifndef " << guard + headerStr << headerLicense << "#ifndef " << guard << "\n#define " << guard << '\n' << '\n'; // Include 'ui_' @@ -409,7 +412,7 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati // 2) Source file QTextStream sourceStr(source); - sourceStr << license; + sourceStr << sourceLicense; Utils::writeIncludeFileDirective(headerFile, false, sourceStr); if (embedding == FormClassWizardGenerationParameters::PointerAggregatedUiClass) Utils::writeIncludeFileDirective(uiInclude, false, sourceStr); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp index cbc94a4028a36eb79e82fb28033966f15c8d92c9..c59d5f321f03c69e72488a99f22d0c264c4e6675 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp @@ -33,7 +33,6 @@ #include "pluginoptions.h" #include "filenamingparameters.h" -#include <cpptools/cppmodelmanagerinterface.h> #include <projectexplorer/projectexplorerconstants.h> #include <QtGui/QIcon> @@ -71,7 +70,6 @@ Core::GeneratedFiles CustomWidgetWizard::generateFiles(const QWizard *w, GenerationParameters p; p.fileName = cw->projectName(); p.path = cw->path(); - p.license = CppTools::AbstractEditorSupport::licenseTemplate(); p.templatePath = QtWizard::templateDir(); p.templatePath += QLatin1String("/customwidgetwizard"); return PluginGenerator::generatePlugin(p, *(cw->pluginOptions()), errorMessage); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp index 0da9c70f200c120423f8f1e3a442b05e407f6b34..0ad9269cf7ef2b4bc73ede5af61cee33e1f98007 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp @@ -32,6 +32,8 @@ #include <coreplugin/basefilewizard.h> +#include <cpptools/cppmodelmanagerinterface.h> + #include <QtCore/QFileInfo> #include <QtCore/QDir> #include <QtCore/QSet> @@ -103,7 +105,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (pluginHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginHeader(baseDir + wo.pluginHeaderFile); - pluginHeader.setContents(p.license + pluginHeaderContents); + pluginHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.pluginHeaderFile, wo.pluginClassName) + + pluginHeaderContents); rc.push_back(pluginHeader); sm.remove(QLatin1String("SINGLE_INCLUDE_GUARD")); @@ -134,7 +137,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (pluginSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginSource(baseDir + wo.pluginSourceFile); - pluginSource.setContents(p.license + pluginSourceContents); + pluginSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.pluginSourceFile, wo.pluginClassName) + + pluginSourceContents); if (i == 0 && widgetCount == 1) // Open first widget unless collection pluginSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); rc.push_back(pluginSource); @@ -179,7 +183,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (widgetHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetHeader(baseDir + wo.widgetHeaderFile); - widgetHeader.setContents(p.license + widgetHeaderContents); + widgetHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.widgetHeaderFile, wo.widgetClassName) + + widgetHeaderContents); rc.push_back(widgetHeader); sm.remove(QLatin1String("WIDGET_INCLUDE_GUARD")); @@ -188,7 +193,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (widgetSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetSource(baseDir + wo.widgetSourceFile); - widgetSource.setContents(p.license + widgetSourceContents); + widgetSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.widgetSourceFile, wo.widgetClassName) + + widgetSourceContents); rc.push_back(widgetSource); } } @@ -221,7 +227,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (collectionHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionHeader(baseDir + options.collectionHeaderFile); - collectionHeader.setContents(p.license + collectionHeaderContents); + collectionHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(options.collectionHeaderFile, options.collectionClassName) + + collectionHeaderContents); rc.push_back(collectionHeader); sm.remove(QLatin1String("COLLECTION_INCLUDE_GUARD")); @@ -241,7 +248,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (collectionSourceFileContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionSource(baseDir + options.collectionSourceFile); - collectionSource.setContents(p.license + collectionSourceFileContents); + collectionSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(options.collectionSourceFile, options.collectionClassName) + + collectionSourceFileContents); collectionSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); rc.push_back(collectionSource); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h index c0de7d2d57374fac8cbec563c93bb8e42c926d87..7680dfaa8202916ad29846bdbaf422bc48986856 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h @@ -51,7 +51,6 @@ struct PluginOptions; struct GenerationParameters { QString path; QString fileName; - QString license; QString templatePath; }; diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp index d12e3f0e0b9855f5bafb6e3703e65ecfdcc5f2a3..fa8dc638407da5ed1b85af197cb0eb4e0256828d 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp @@ -81,13 +81,12 @@ Core::GeneratedFiles const ConsoleAppWizardDialog *wizard = qobject_cast< const ConsoleAppWizardDialog *>(w); const QtProjectParameters params = wizard->parameters(); const QString projectPath = params.projectPath(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); // Create files: Source const QString sourceFileName = Core::BaseFileWizard::buildFileName(projectPath, QLatin1String(mainSourceFileC), sourceSuffix()); Core::GeneratedFile source(sourceFileName); - source.setContents(license + QLatin1String(mainCppC)); + source.setContents(CppTools::AbstractEditorSupport::licenseTemplate(sourceFileName) + QLatin1String(mainCppC)); source.setAttributes(Core::GeneratedFile::OpenEditorAttribute); // Create files: Profile const QString profileName = Core::BaseFileWizard::buildFileName(projectPath, params.fileName, profileSuffix()); diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp index a112fb13ae50c66c36cc37dcf8069bf653fb48b9..24e634449833a7b29a2c981d9b4f0983b847f735 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp @@ -165,7 +165,8 @@ Core::GeneratedFiles GuiAppWizard::generateFiles(const QWizard *w, Core::GeneratedFile mainSource(mainSourceFileName); if (!parametrizeTemplate(templatePath, QLatin1String("main.cpp"), params, &contents, errorMessage)) return Core::GeneratedFiles(); - mainSource.setContents(license + contents); + mainSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(mainSourceFileName) + + contents); // Create files: form source with or without form const QString formSourceFileName = buildFileName(projectPath, params.sourceFileName, sourceSuffix()); const QString formHeaderName = buildFileName(projectPath, params.headerFileName, headerSuffix()); @@ -187,13 +188,15 @@ Core::GeneratedFiles GuiAppWizard::generateFiles(const QWizard *w, const QString formSourceTemplate = QLatin1String("mywidget.cpp"); if (!parametrizeTemplate(templatePath, formSourceTemplate, params, &contents, errorMessage)) return Core::GeneratedFiles(); - formSource.setContents(license + contents); + formSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(formSourceFileName) + + contents); formSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); // Create files: form header const QString formHeaderTemplate = QLatin1String("mywidget.h"); if (!parametrizeTemplate(templatePath, formHeaderTemplate, params, &contents, errorMessage)) return Core::GeneratedFiles(); - formHeader.setContents(license + contents); + formHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(formHeaderName) + + contents); } // Create files: profile const QString profileName = buildFileName(projectPath, projectParams.fileName, profileSuffix()); diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp index 39eede1791cca2cebce8f2d8a4860c04ac3032f6..e86de20dcd3e0693ab301b200b6e40d05b597351 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp @@ -82,7 +82,6 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, const QtProjectParameters projectParams = dialog->parameters(); const QString projectPath = projectParams.projectPath(); const LibraryParameters params = dialog->libraryParameters(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); const QString sharedLibExportMacro = QtProjectParameters::exportMacro(projectParams.fileName); @@ -102,7 +101,8 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, const QString globalHeaderName = buildFileName(projectPath, projectParams.fileName + QLatin1String(sharedHeaderPostfixC), headerSuffix()); Core::GeneratedFile globalHeader(globalHeaderName); globalHeaderFileName = QFileInfo(globalHeader.path()).fileName(); - globalHeader.setContents(license + LibraryParameters::generateSharedHeader(globalHeaderFileName, projectParams.fileName, sharedLibExportMacro)); + globalHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(globalHeaderFileName) + + LibraryParameters::generateSharedHeader(globalHeaderFileName, projectParams.fileName, sharedLibExportMacro)); rc.push_back(globalHeader); } @@ -112,8 +112,10 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, globalHeaderFileName, sharedLibExportMacro, /* indentation*/ 4, &headerContents, &sourceContents); - source.setContents(license + sourceContents); - header.setContents(license + headerContents); + source.setContents(CppTools::AbstractEditorSupport::licenseTemplate(sourceFileName, params.className) + + sourceContents); + header.setContents(CppTools::AbstractEditorSupport::licenseTemplate(headerFileFullName, params.className) + + headerContents); rc.push_back(source); rc.push_back(header); // Create files: profile diff --git a/src/plugins/qt4projectmanager/wizards/testwizard.cpp b/src/plugins/qt4projectmanager/wizards/testwizard.cpp index 55b3e21ae84213241105b958f0ef5b5fff8242a8..a493270e2ba297ce667667e675dd018030bcfa98 100644 --- a/src/plugins/qt4projectmanager/wizards/testwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/testwizard.cpp @@ -96,7 +96,7 @@ static QString generateTestCode(const TestWizardParameters &testParams, const QString indent = QString(4, QLatin1Char(' ')); QTextStream str(&rc); // Includes - str << CppTools::AbstractEditorSupport::licenseTemplate() + str << CppTools::AbstractEditorSupport::licenseTemplate(testParams.fileName, testParams.className) << "#include <QtCore/QString>\n#include <QtTest/QtTest>\n"; if (testParams.requiresQApplication) str << "#include <QtCore/QCoreApplication>\n";