aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2023-05-31 14:29:03 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2023-06-08 08:23:01 +0000
commit8e75381fce29504cd3f278f90cfcda22b9e47b4d (patch)
tree2d5f97c186e1ec6635b792f810284fb6141860bd /src
parent6cc325f845b1ed2df3d28271146919c158f003d3 (diff)
CppEditor: Give C++ file name settings a per-project variant
Fixes: QTCREATORBUG-22033 Change-Id: If37517bb091438e70c5af5102bf833ed46d0c951 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp3
-rw-r--r--src/plugins/clangcodemodel/clangdfindreferences.cpp19
-rw-r--r--src/plugins/cppeditor/abstracteditorsupport.cpp9
-rw-r--r--src/plugins/cppeditor/abstracteditorsupport.h8
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.cpp81
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.h16
-rw-r--r--src/plugins/cppeditor/cppfilesettingspage.cpp201
-rw-r--r--src/plugins/cppeditor/cppfilesettingspage.h36
-rw-r--r--src/plugins/cppeditor/cppfindreferences.cpp4
-rw-r--r--src/plugins/cppeditor/cppfindreferences.h2
-rw-r--r--src/plugins/cppeditor/cppheadersource_test.cpp30
-rw-r--r--src/plugins/cppeditor/cpptoolsjsextension.cpp32
-rw-r--r--src/plugins/cppeditor/cpptoolsjsextension.h10
-rw-r--r--src/plugins/cppeditor/cpptoolsreuse.cpp14
-rw-r--r--src/plugins/cppeditor/cpptoolsreuse.h4
-rw-r--r--src/plugins/designer/cpp/formclasswizard.cpp6
-rw-r--r--src/plugins/designer/cpp/formclasswizarddialog.cpp4
-rw-r--r--src/plugins/designer/cpp/formclasswizardpage.cpp14
-rw-r--r--src/plugins/designer/qtcreatorintegration.cpp3
-rw-r--r--src/plugins/designer/qtdesignerformclasscodegenerator.cpp16
-rw-r--r--src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp11
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp6
22 files changed, 399 insertions, 130 deletions
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 0082ff6cef..070653c702 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -570,7 +570,8 @@ void ClangdClient::findUsages(const CppEditor::CursorInEditor &cursor,
if (useClangdForRenaming) {
symbolSupport().renameSymbol(cursor.textDocument(), adjustedCursor, *replacement,
- renameCallback, CppEditor::preferLowerCaseFileNames());
+ renameCallback,
+ CppEditor::preferLowerCaseFileNames(project()));
return;
}
}
diff --git a/src/plugins/clangcodemodel/clangdfindreferences.cpp b/src/plugins/clangcodemodel/clangdfindreferences.cpp
index b44fd41a82..d6a91aa334 100644
--- a/src/plugins/clangcodemodel/clangdfindreferences.cpp
+++ b/src/plugins/clangcodemodel/clangdfindreferences.cpp
@@ -90,7 +90,8 @@ public:
const ReplacementData &replacementData,
const QString &newSymbolName,
const SearchResultItems &checkedItems,
- bool preserveCase);
+ bool preserveCase,
+ bool preferLowerCaseFileNames);
void handleFindUsagesResult(const QList<Location> &locations);
void finishSearch();
void reportAllSearchResultsAndFinish();
@@ -141,13 +142,14 @@ ClangdFindReferences::ClangdFindReferences(ClangdClient *client, TextDocument *d
const auto renameFilesCheckBox = new QCheckBox;
renameFilesCheckBox->setVisible(false);
d->search->setAdditionalReplaceWidget(renameFilesCheckBox);
- const auto renameHandler =
- [search = d->search](const QString &newSymbolName,
- const SearchResultItems &checkedItems,
- bool preserveCase) {
+ const bool preferLowerCase = CppEditor::preferLowerCaseFileNames(client->project());
+ const auto renameHandler = [search = d->search, preferLowerCase](
+ const QString &newSymbolName,
+ const SearchResultItems &checkedItems,
+ bool preserveCase) {
const auto replacementData = search->userData().value<ReplacementData>();
Private::handleRenameRequest(search, replacementData, newSymbolName, checkedItems,
- preserveCase);
+ preserveCase, preferLowerCase);
};
connect(d->search, &SearchResult::replaceButtonClicked, renameHandler);
}
@@ -244,7 +246,8 @@ void ClangdFindReferences::Private::handleRenameRequest(
const ReplacementData &replacementData,
const QString &newSymbolName,
const SearchResultItems &checkedItems,
- bool preserveCase)
+ bool preserveCase,
+ bool preferLowerCaseFileNames)
{
const Utils::FilePaths filePaths = BaseFileFind::replaceAll(newSymbolName, checkedItems,
preserveCase);
@@ -261,7 +264,7 @@ void ClangdFindReferences::Private::handleRenameRequest(
ProjectExplorerPlugin::renameFilesForSymbol(
replacementData.oldSymbolName, newSymbolName,
Utils::toList(replacementData.fileRenameCandidates),
- CppEditor::preferLowerCaseFileNames());
+ preferLowerCaseFileNames);
}
void ClangdFindReferences::Private::handleFindUsagesResult(const QList<Location> &locations)
diff --git a/src/plugins/cppeditor/abstracteditorsupport.cpp b/src/plugins/cppeditor/abstracteditorsupport.cpp
index a47fb412f3..a275ed6b57 100644
--- a/src/plugins/cppeditor/abstracteditorsupport.cpp
+++ b/src/plugins/cppeditor/abstracteditorsupport.cpp
@@ -39,9 +39,10 @@ void AbstractEditorSupport::notifyAboutUpdatedContents() const
filePath().toString(), sourceFilePath().toString(), contents());
}
-QString AbstractEditorSupport::licenseTemplate(const FilePath &filePath, const QString &className)
+QString AbstractEditorSupport::licenseTemplate(ProjectExplorer::Project *project,
+ const FilePath &filePath, const QString &className)
{
- const QString license = Internal::CppFileSettings::licenseTemplate();
+ const QString license = Internal::CppEditorPlugin::licenseTemplate(project);
Utils::MacroExpander expander;
expander.registerVariable("Cpp:License:FileName", Tr::tr("The file name."),
[filePath] { return filePath.fileName(); });
@@ -51,9 +52,9 @@ QString AbstractEditorSupport::licenseTemplate(const FilePath &filePath, const Q
return Utils::TemplateEngine::processText(&expander, license, nullptr);
}
-bool AbstractEditorSupport::usePragmaOnce()
+bool AbstractEditorSupport::usePragmaOnce(ProjectExplorer::Project *project)
{
- return Internal::CppEditorPlugin::usePragmaOnce();
+ return Internal::CppEditorPlugin::usePragmaOnce(project);
}
} // CppEditor
diff --git a/src/plugins/cppeditor/abstracteditorsupport.h b/src/plugins/cppeditor/abstracteditorsupport.h
index 2b18873238..277001e043 100644
--- a/src/plugins/cppeditor/abstracteditorsupport.h
+++ b/src/plugins/cppeditor/abstracteditorsupport.h
@@ -9,6 +9,8 @@
#include <QObject>
+namespace ProjectExplorer { class Project; }
+
namespace CppEditor {
class CppModelManager;
@@ -30,8 +32,10 @@ public:
void notifyAboutUpdatedContents() const;
unsigned revision() const { return m_revision; }
- static QString licenseTemplate(const Utils::FilePath &filePath = {}, const QString &className = {});
- static bool usePragmaOnce();
+ static QString licenseTemplate(ProjectExplorer::Project *project,
+ const Utils::FilePath &filePath = {},
+ const QString &className = {});
+ static bool usePragmaOnce(ProjectExplorer::Project *project);
private:
CppModelManager *m_modelmanager;
diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp
index 5791a5cb62..223ec0e09f 100644
--- a/src/plugins/cppeditor/cppeditorplugin.cpp
+++ b/src/plugins/cppeditor/cppeditorplugin.cpp
@@ -72,6 +72,7 @@
#include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/projectmanager.h>
#include <projectexplorer/projectpanelfactory.h>
#include <projectexplorer/projecttree.h>
@@ -261,17 +262,18 @@ void CppEditorPlugin::initialize()
this, [] { CppModelManager::switchHeaderSource(true); });
MacroExpander *expander = globalMacroExpander();
+
+ // TODO: Per-project variants of these three?
expander->registerVariable("Cpp:LicenseTemplate",
Tr::tr("The license template."),
- []() { return CppEditorPlugin::licenseTemplate(); });
+ []() { return CppEditorPlugin::licenseTemplate(nullptr); });
expander->registerFileVariables("Cpp:LicenseTemplatePath",
Tr::tr("The configured path to the license template"),
- []() { return CppEditorPlugin::licenseTemplatePath(); });
-
+ []() { return CppEditorPlugin::licenseTemplatePath(nullptr); });
expander->registerVariable(
"Cpp:PragmaOnce",
Tr::tr("Insert \"#pragma once\" instead of \"#ifndef\" include guards into header file"),
- [] { return usePragmaOnce() ? QString("true") : QString(); });
+ [] { return usePragmaOnce(nullptr) ? QString("true") : QString(); });
const auto quickFixSettingsPanelFactory = new ProjectPanelFactory;
quickFixSettingsPanelFactory->setPriority(100);
@@ -505,6 +507,14 @@ void CppEditorPlugin::extensionsInitialized()
if (!d->m_fileSettings.applySuffixesToMimeDB())
qWarning("Unable to apply cpp suffixes to mime database (cpp mime types not found).\n");
+ const auto fileNamesPanelFactory = new ProjectPanelFactory;
+ fileNamesPanelFactory->setPriority(99);
+ fileNamesPanelFactory->setDisplayName(Tr::tr("C++ File Naming"));
+ fileNamesPanelFactory->setCreateWidgetFunction([](Project *project) {
+ return new CppFileSettingsForProjectWidget(project);
+ });
+ ProjectPanelFactory::registerFactory(fileNamesPanelFactory);
+
if (CppModelManager::instance()->isClangCodeModelActive()) {
d->m_clangdSettingsPage = new ClangdSettingsPage;
const auto clangdPanelFactory = new ProjectPanelFactory;
@@ -614,50 +624,39 @@ void CppEditorPlugin::clearHeaderSourceCache()
m_headerSourceMapping.clear();
}
-FilePath CppEditorPlugin::licenseTemplatePath()
+FilePath CppEditorPlugin::licenseTemplatePath(Project *project)
{
- return FilePath::fromString(m_instance->d->m_fileSettings.licenseTemplatePath);
+ return FilePath::fromString(fileSettings(project).licenseTemplatePath);
}
-QString CppEditorPlugin::licenseTemplate()
+QString CppEditorPlugin::licenseTemplate(Project *project)
{
- return CppFileSettings::licenseTemplate();
+ return fileSettings(project).licenseTemplate();
}
-bool CppEditorPlugin::usePragmaOnce()
+bool CppEditorPlugin::usePragmaOnce(Project *project)
{
- return m_instance->d->m_fileSettings.headerPragmaOnce;
+ return fileSettings(project).headerPragmaOnce;
}
-const QStringList &CppEditorPlugin::headerSearchPaths()
-{
- return m_instance->d->m_fileSettings.headerSearchPaths;
-}
-
-const QStringList &CppEditorPlugin::sourceSearchPaths()
-{
- return m_instance->d->m_fileSettings.sourceSearchPaths;
-}
-
-const QStringList &CppEditorPlugin::headerPrefixes()
-{
- return m_instance->d->m_fileSettings.headerPrefixes;
-}
-
-const QStringList &CppEditorPlugin::sourcePrefixes()
+CppCodeModelSettings *CppEditorPlugin::codeModelSettings()
{
- return m_instance->d->m_fileSettings.sourcePrefixes;
+ return &d->m_codeModelSettings;
}
-CppCodeModelSettings *CppEditorPlugin::codeModelSettings()
+CppFileSettings CppEditorPlugin::fileSettings(Project *project)
{
- return &d->m_codeModelSettings;
+ if (!project)
+ return instance()->d->m_fileSettings;
+ return CppFileSettingsForProject(project).settings();
}
-CppFileSettings *CppEditorPlugin::fileSettings()
+#ifdef WITH_TESTS
+void CppEditorPlugin::setGlobalFileSettings(const CppFileSettings &settings)
{
- return &instance()->d->m_fileSettings;
+ instance()->d->m_fileSettings = settings;
}
+#endif
static QStringList findFilesInProject(const QString &name, const Project *project)
{
@@ -721,11 +720,12 @@ static QStringList baseNameWithAllSuffixes(const QString &baseName, const QStrin
return result;
}
-static QStringList baseNamesWithAllPrefixes(const QStringList &baseNames, bool isHeader)
+static QStringList baseNamesWithAllPrefixes(const CppFileSettings &settings,
+ const QStringList &baseNames, bool isHeader)
{
QStringList result;
- const QStringList &sourcePrefixes = m_instance->sourcePrefixes();
- const QStringList &headerPrefixes = m_instance->headerPrefixes();
+ const QStringList &sourcePrefixes = settings.sourcePrefixes;
+ const QStringList &headerPrefixes = settings.headerPrefixes;
for (const QString &name : baseNames) {
for (const QString &prefix : isHeader ? headerPrefixes : sourcePrefixes) {
@@ -812,6 +812,9 @@ FilePath correspondingHeaderOrSource(const FilePath &filePath, bool *wasHeader,
if (m_headerSourceMapping.contains(fi.absoluteFilePath()))
return FilePath::fromString(m_headerSourceMapping.value(fi.absoluteFilePath()));
+ Project * const projectForFile = ProjectManager::projectForFile(filePath);
+ const CppFileSettings settings = CppEditorPlugin::fileSettings(projectForFile);
+
if (debug)
qDebug() << Q_FUNC_INFO << fileName << kind;
@@ -838,11 +841,11 @@ FilePath correspondingHeaderOrSource(const FilePath &filePath, bool *wasHeader,
const QDir absoluteDir = fi.absoluteDir();
QStringList candidateDirs(absoluteDir.absolutePath());
// If directory is not root, try matching against its siblings
- const QStringList searchPaths = isHeader ? m_instance->sourceSearchPaths()
- : m_instance->headerSearchPaths();
+ const QStringList searchPaths = isHeader ? settings.sourceSearchPaths
+ : settings.headerSearchPaths;
candidateDirs += baseDirWithAllDirectories(absoluteDir, searchPaths);
- candidateFileNames += baseNamesWithAllPrefixes(candidateFileNames, isHeader);
+ candidateFileNames += baseNamesWithAllPrefixes(settings, candidateFileNames, isHeader);
// Try to find a file in the same or sibling directories first
for (const QString &candidateDir : std::as_const(candidateDirs)) {
@@ -862,7 +865,9 @@ FilePath correspondingHeaderOrSource(const FilePath &filePath, bool *wasHeader,
}
// Find files in the current project
- Project *currentProject = ProjectTree::currentProject();
+ Project *currentProject = projectForFile;
+ if (!projectForFile)
+ currentProject = ProjectTree::currentProject();
if (currentProject) {
const FilePath path = correspondingHeaderOrSourceInProject(fi, candidateFileNames,
currentProject, cacheUsage);
diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h
index c28ee16b1e..d5b5b75f72 100644
--- a/src/plugins/cppeditor/cppeditorplugin.h
+++ b/src/plugins/cppeditor/cppeditorplugin.h
@@ -5,6 +5,7 @@
#include <extensionsystem/iplugin.h>
+namespace ProjectExplorer { class Project; }
namespace Utils { class FilePath; }
namespace CppEditor {
@@ -29,14 +30,10 @@ public:
CppQuickFixAssistProvider *quickFixProvider() const;
- static const QStringList &headerSearchPaths();
- static const QStringList &sourceSearchPaths();
- static const QStringList &headerPrefixes();
- static const QStringList &sourcePrefixes();
static void clearHeaderSourceCache();
- static Utils::FilePath licenseTemplatePath();
- static QString licenseTemplate();
- static bool usePragmaOnce();
+ static Utils::FilePath licenseTemplatePath(ProjectExplorer::Project *project);
+ static QString licenseTemplate(ProjectExplorer::Project *project);
+ static bool usePragmaOnce(ProjectExplorer::Project *project);
void openDeclarationDefinitionInNextSplit();
void openTypeHierarchy();
@@ -46,7 +43,10 @@ public:
void switchDeclarationDefinition();
CppCodeModelSettings *codeModelSettings();
- static CppFileSettings *fileSettings();
+ static CppFileSettings fileSettings(ProjectExplorer::Project *project);
+#ifdef WITH_TESTS
+ static void setGlobalFileSettings(const CppFileSettings &settings);
+#endif
signals:
void typeHierarchyRequested();
diff --git a/src/plugins/cppeditor/cppfilesettingspage.cpp b/src/plugins/cppeditor/cppfilesettingspage.cpp
index 447d608369..21411577d3 100644
--- a/src/plugins/cppeditor/cppfilesettingspage.cpp
+++ b/src/plugins/cppeditor/cppfilesettingspage.cpp
@@ -7,10 +7,9 @@
#include "cppeditortr.h"
#include <app/app_version.h>
-
#include <coreplugin/icore.h>
#include <coreplugin/editormanager/editormanager.h>
-
+#include <projectexplorer/project.h>
#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/layoutbuilder.h>
@@ -25,11 +24,14 @@
#include <QLocale>
#include <QSettings>
#include <QTextStream>
+#include <QVBoxLayout>
using namespace Utils;
namespace CppEditor::Internal {
+const char projectSettingsKeyC[] = "CppEditorFileNames";
+const char useGlobalKeyC[] = "UseGlobal";
const char headerPrefixesKeyC[] = "HeaderPrefixes";
const char sourcePrefixesKeyC[] = "SourcePrefixes";
const char headerSuffixKeyC[] = "HeaderSuffix";
@@ -202,18 +204,14 @@ static void parseLicenseTemplatePlaceholders(QString *t)
}
// Convenience that returns the formatted license template.
-QString CppFileSettings::licenseTemplate()
+QString CppFileSettings::licenseTemplate() const
{
- const QSettings *s = Core::ICore::settings();
- QString key = QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP);
- key += QLatin1Char('/');
- key += QLatin1String(licenseTemplatePathKeyC);
- const QString path = s->value(key, QString()).toString();
- if (path.isEmpty())
+ if (licenseTemplatePath.isEmpty())
return QString();
- QFile file(path);
+ QFile file(licenseTemplatePath);
if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) {
- qWarning("Unable to open the license template %s: %s", qPrintable(path), qPrintable(file.errorString()));
+ qWarning("Unable to open the license template %s: %s", qPrintable(licenseTemplatePath),
+ qPrintable(file.errorString()));
return QString();
}
@@ -235,11 +233,17 @@ QString CppFileSettings::licenseTemplate()
class CppFileSettingsWidget final : public Core::IOptionsPageWidget
{
+ Q_OBJECT
+
public:
explicit CppFileSettingsWidget(CppFileSettings *settings);
void apply() final;
void setSettings(const CppFileSettings &s);
+ CppFileSettings currentSettings() const;
+
+signals:
+ void userChange();
private:
void slotEdit();
@@ -336,6 +340,25 @@ CppFileSettingsWidget::CppFileSettingsWidget(CppFileSettings *settings)
m_licenseTemplatePathChooser->addButton(Tr::tr("Edit..."), this, [this] { slotEdit(); });
setSettings(*m_settings);
+
+ connect(m_headerSuffixComboBox, &QComboBox::currentIndexChanged,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_sourceSuffixComboBox, &QComboBox::currentIndexChanged,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_headerSearchPathsEdit, &QLineEdit::textEdited,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_sourceSearchPathsEdit, &QLineEdit::textEdited,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_headerPrefixesEdit, &QLineEdit::textEdited,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_sourcePrefixesEdit, &QLineEdit::textEdited,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_headerPragmaOnceCheckBox, &QCheckBox::stateChanged,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_lowerCaseFileNamesCheckBox, &QCheckBox::stateChanged,
+ this, &CppFileSettingsWidget::userChange);
+ connect(m_licenseTemplatePathChooser, &PathChooser::textChanged,
+ this, &CppFileSettingsWidget::userChange);
}
FilePath CppFileSettingsWidget::licenseTemplatePath() const
@@ -358,17 +381,7 @@ static QStringList trimmedPaths(const QString &paths)
void CppFileSettingsWidget::apply()
{
- CppFileSettings rc;
- rc.lowerCaseFiles = m_lowerCaseFileNamesCheckBox->isChecked();
- rc.headerPragmaOnce = m_headerPragmaOnceCheckBox->isChecked();
- rc.headerPrefixes = trimmedPaths(m_headerPrefixesEdit->text());
- rc.sourcePrefixes = trimmedPaths(m_sourcePrefixesEdit->text());
- rc.headerSuffix = m_headerSuffixComboBox->currentText();
- rc.sourceSuffix = m_sourceSuffixComboBox->currentText();
- rc.headerSearchPaths = trimmedPaths(m_headerSearchPathsEdit->text());
- rc.sourceSearchPaths = trimmedPaths(m_sourceSearchPathsEdit->text());
- rc.licenseTemplatePath = licenseTemplatePath().toString();
-
+ const CppFileSettings rc = currentSettings();
if (rc == *m_settings)
return;
@@ -398,6 +411,21 @@ void CppFileSettingsWidget::setSettings(const CppFileSettings &s)
setLicenseTemplatePath(FilePath::fromString(s.licenseTemplatePath));
}
+CppFileSettings CppFileSettingsWidget::currentSettings() const
+{
+ CppFileSettings rc;
+ rc.lowerCaseFiles = m_lowerCaseFileNamesCheckBox->isChecked();
+ rc.headerPragmaOnce = m_headerPragmaOnceCheckBox->isChecked();
+ rc.headerPrefixes = trimmedPaths(m_headerPrefixesEdit->text());
+ rc.sourcePrefixes = trimmedPaths(m_sourcePrefixesEdit->text());
+ rc.headerSuffix = m_headerSuffixComboBox->currentText();
+ rc.sourceSuffix = m_sourceSuffixComboBox->currentText();
+ rc.headerSearchPaths = trimmedPaths(m_headerSearchPathsEdit->text());
+ rc.sourceSearchPaths = trimmedPaths(m_sourceSearchPathsEdit->text());
+ rc.licenseTemplatePath = licenseTemplatePath().toString();
+ return rc;
+}
+
void CppFileSettingsWidget::slotEdit()
{
FilePath path = licenseTemplatePath();
@@ -426,4 +454,133 @@ CppFileSettingsPage::CppFileSettingsPage(CppFileSettings *settings)
setWidgetCreator([settings] { return new CppFileSettingsWidget(settings); });
}
+CppFileSettingsForProject::CppFileSettingsForProject(ProjectExplorer::Project *project)
+ : m_project(project)
+{
+ loadSettings();
+}
+
+CppFileSettings CppFileSettingsForProject::settings() const
+{
+ return m_useGlobalSettings ? CppEditorPlugin::fileSettings(nullptr) : m_customSettings;
+}
+
+void CppFileSettingsForProject::setSettings(const CppFileSettings &settings)
+{
+ m_customSettings = settings;
+ saveSettings();
+}
+
+void CppFileSettingsForProject::setUseGlobalSettings(bool useGlobal)
+{
+ m_useGlobalSettings = useGlobal;
+ saveSettings();
+}
+
+void CppFileSettingsForProject::loadSettings()
+{
+ if (!m_project)
+ return;
+
+ const QVariant entry = m_project->namedSettings(projectSettingsKeyC);
+ if (!entry.isValid())
+ return;
+
+ const QVariantMap data = entry.toMap();
+ m_useGlobalSettings = data.value(useGlobalKeyC, true).toBool();
+ m_customSettings.headerPrefixes = data.value(headerPrefixesKeyC,
+ m_customSettings.headerPrefixes).toStringList();
+ m_customSettings.sourcePrefixes = data.value(sourcePrefixesKeyC,
+ m_customSettings.sourcePrefixes).toStringList();
+ m_customSettings.headerSuffix = data.value(headerSuffixKeyC, m_customSettings.headerSuffix)
+ .toString();
+ m_customSettings.sourceSuffix = data.value(sourceSuffixKeyC, m_customSettings.sourceSuffix)
+ .toString();
+ m_customSettings.headerSearchPaths
+ = data.value(headerSearchPathsKeyC, m_customSettings.headerSearchPaths).toStringList();
+ m_customSettings.sourceSearchPaths
+ = data.value(sourceSearchPathsKeyC, m_customSettings.sourceSearchPaths).toStringList();
+ m_customSettings.lowerCaseFiles = data.value(Constants::LOWERCASE_CPPFILES_KEY,
+ m_customSettings.lowerCaseFiles).toBool();
+ m_customSettings.headerPragmaOnce = data.value(headerPragmaOnceC,
+ m_customSettings.headerPragmaOnce).toBool();
+ m_customSettings.licenseTemplatePath
+ = data.value(licenseTemplatePathKeyC, m_customSettings.licenseTemplatePath).toString();
+}
+
+void CppFileSettingsForProject::saveSettings()
+{
+ if (!m_project)
+ return;
+
+ // Optimization: Don't save anything if the user never switched away from the default.
+ if (m_useGlobalSettings && !m_project->namedSettings(projectSettingsKeyC).isValid())
+ return;
+
+ QVariantMap data;
+ data.insert(useGlobalKeyC, m_useGlobalSettings);
+ data.insert(headerPrefixesKeyC, m_customSettings.headerPrefixes);
+ data.insert(sourcePrefixesKeyC, m_customSettings.sourcePrefixes);
+ data.insert(headerSuffixKeyC, m_customSettings.headerSuffix);
+ data.insert(sourceSuffixKeyC, m_customSettings.sourceSuffix);
+ data.insert(headerSearchPathsKeyC, m_customSettings.headerSearchPaths);
+ data.insert(sourceSearchPathsKeyC, m_customSettings.sourceSearchPaths);
+ data.insert(Constants::LOWERCASE_CPPFILES_KEY, m_customSettings.lowerCaseFiles);
+ data.insert(headerPragmaOnceC, m_customSettings.headerPragmaOnce);
+ data.insert(licenseTemplatePathKeyC, m_customSettings.licenseTemplatePath);
+ m_project->setNamedSettings(projectSettingsKeyC, data);
+}
+
+class CppFileSettingsForProjectWidget::Private
+{
+public:
+ Private(const CppFileSettingsForProject &s) : settings(s) {}
+
+ void maybeClearHeaderSourceCache();
+ void updateSubWidgetState() { widget.setEnabled(!settings.useGlobalSettings()); }
+
+ CppFileSettingsForProject settings;
+ CppFileSettings initialSettings = settings.settings();
+ CppFileSettingsWidget widget{&initialSettings};
+ QCheckBox useGlobalSettingsCheckBox;
+ const bool wasGlobal = settings.useGlobalSettings();
+};
+
+CppFileSettingsForProjectWidget::CppFileSettingsForProjectWidget(
+ const CppFileSettingsForProject &settings) : d(new Private(settings))
+{
+ setGlobalSettingsId(Constants::CPP_FILE_SETTINGS_ID);
+ const auto layout = new QVBoxLayout(this);
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(&d->widget);
+
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged, this,
+ [this](bool checked) {
+ d->settings.setUseGlobalSettings(checked);
+ if (!checked)
+ d->settings.setSettings(d->widget.currentSettings());
+ d->maybeClearHeaderSourceCache();
+ d->updateSubWidgetState();
+ });
+ connect(&d->widget, &CppFileSettingsWidget::userChange, this, [this] {
+ d->settings.setSettings(d->widget.currentSettings());
+ d->maybeClearHeaderSourceCache();
+ });
+ d->updateSubWidgetState();
+}
+
+CppFileSettingsForProjectWidget::~CppFileSettingsForProjectWidget() { delete d; }
+
+void CppFileSettingsForProjectWidget::Private::maybeClearHeaderSourceCache()
+{
+ const CppFileSettings &s = settings.settings();
+ if (settings.useGlobalSettings() != wasGlobal
+ || s.headerSearchPaths != initialSettings.headerSearchPaths
+ || s.sourceSearchPaths != initialSettings.sourceSearchPaths) {
+ CppEditorPlugin::clearHeaderSourceCache();
+ }
+}
+
} // namespace CppEditor::Internal
+
+#include <cppfilesettingspage.moc>
diff --git a/src/plugins/cppeditor/cppfilesettingspage.h b/src/plugins/cppeditor/cppfilesettingspage.h
index 50cc38133a..f4c65fbbc5 100644
--- a/src/plugins/cppeditor/cppfilesettingspage.h
+++ b/src/plugins/cppeditor/cppfilesettingspage.h
@@ -6,6 +6,7 @@
#include "cppeditorconstants.h"
#include <coreplugin/dialogs/ioptionspage.h>
+#include <projectexplorer/projectsettingswidget.h>
#include <QDir>
@@ -13,6 +14,8 @@ QT_BEGIN_NAMESPACE
class QSettings;
QT_END_NAMESPACE
+namespace ProjectExplorer { class Project; }
+
namespace CppEditor::Internal {
class CppFileSettings
@@ -38,18 +41,47 @@ public:
bool applySuffixesToMimeDB();
// Convenience to return a license template completely formatted.
- // Currently made public in
- static QString licenseTemplate();
+ QString licenseTemplate() const;
bool equals(const CppFileSettings &rhs) const;
bool operator==(const CppFileSettings &s) const { return equals(s); }
bool operator!=(const CppFileSettings &s) const { return !equals(s); }
};
+class CppFileSettingsForProject
+{
+public:
+ CppFileSettingsForProject(ProjectExplorer::Project *project);
+
+ CppFileSettings settings() const;
+ void setSettings(const CppFileSettings &settings);
+ bool useGlobalSettings() const { return m_useGlobalSettings; }
+ void setUseGlobalSettings(bool useGlobal);
+
+private:
+ void loadSettings();
+ void saveSettings();
+
+ ProjectExplorer::Project * const m_project;
+ CppFileSettings m_customSettings;
+ bool m_useGlobalSettings = true;
+};
+
class CppFileSettingsPage : public Core::IOptionsPage
{
public:
explicit CppFileSettingsPage(CppFileSettings *settings);
};
+class CppFileSettingsForProjectWidget : public ProjectExplorer::ProjectSettingsWidget
+{
+public:
+ CppFileSettingsForProjectWidget(const CppFileSettingsForProject &settings);
+ ~CppFileSettingsForProjectWidget();
+
+private:
+ class Private;
+ Private * const d;
+};
+
} // namespace CppEditor::Internal
diff --git a/src/plugins/cppeditor/cppfindreferences.cpp b/src/plugins/cppeditor/cppfindreferences.cpp
index 5da2285438..460ad7d0b2 100644
--- a/src/plugins/cppeditor/cppfindreferences.cpp
+++ b/src/plugins/cppeditor/cppfindreferences.cpp
@@ -398,6 +398,8 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol,
parameters.symbolId = fullIdForSymbol(symbol);
parameters.symbolFilePath = symbol->filePath();
parameters.categorize = codeModelSettings()->categorizeFindReferences();
+ parameters.preferLowerCaseFileNames = preferLowerCaseFileNames(
+ ProjectManager::projectForFile(symbol->filePath()));
if (symbol->asClass() || symbol->asForwardClassDeclaration()) {
CPlusPlus::Overview overview;
@@ -475,7 +477,7 @@ void CppFindReferences::onReplaceButtonClicked(Core::SearchResult *search, const
ProjectExplorerPlugin::renameFilesForSymbol(
parameters.prettySymbolName, text, parameters.filesToRename,
- preferLowerCaseFileNames());
+ parameters.preferLowerCaseFileNames);
}
void CppFindReferences::searchAgain(SearchResult *search)
diff --git a/src/plugins/cppeditor/cppfindreferences.h b/src/plugins/cppeditor/cppfindreferences.h
index b05ce723c4..37e105ab36 100644
--- a/src/plugins/cppeditor/cppfindreferences.h
+++ b/src/plugins/cppeditor/cppfindreferences.h
@@ -4,6 +4,7 @@
#pragma once
#include "cppeditor_global.h"
+#include "cppeditorconstants.h"
#include <coreplugin/find/searchresultwindow.h>
#include <cplusplus/FindUsages.h>
@@ -51,6 +52,7 @@ public:
QString prettySymbolName;
Utils::FilePaths filesToRename;
bool categorize = false;
+ bool preferLowerCaseFileNames = Constants::LOWERCASE_CPPFILES_DEFAULT;
};
class CppFindReferences: public QObject
diff --git a/src/plugins/cppeditor/cppheadersource_test.cpp b/src/plugins/cppeditor/cppheadersource_test.cpp
index d94920a329..28f5a8b6fb 100644
--- a/src/plugins/cppeditor/cppheadersource_test.cpp
+++ b/src/plugins/cppeditor/cppheadersource_test.cpp
@@ -71,25 +71,27 @@ void HeaderSourceTest::test_data()
void HeaderSourceTest::initTestCase()
{
QDir(baseTestDir()).mkpath(_("."));
- CppFileSettings *fs = CppEditorPlugin::fileSettings();
- fs->headerSearchPaths.append(QLatin1String("include"));
- fs->headerSearchPaths.append(QLatin1String("../include"));
- fs->sourceSearchPaths.append(QLatin1String("src"));
- fs->sourceSearchPaths.append(QLatin1String("../src"));
- fs->headerPrefixes.append(QLatin1String("testh_"));
- fs->sourcePrefixes.append(QLatin1String("testc_"));
+ CppFileSettings fs = CppEditorPlugin::fileSettings(nullptr);
+ fs.headerSearchPaths.append(QLatin1String("include"));
+ fs.headerSearchPaths.append(QLatin1String("../include"));
+ fs.sourceSearchPaths.append(QLatin1String("src"));
+ fs.sourceSearchPaths.append(QLatin1String("../src"));
+ fs.headerPrefixes.append(QLatin1String("testh_"));
+ fs.sourcePrefixes.append(QLatin1String("testc_"));
+ CppEditorPlugin::setGlobalFileSettings(fs);
}
void HeaderSourceTest::cleanupTestCase()
{
Utils::FilePath::fromString(baseTestDir()).removeRecursively();
- CppFileSettings *fs = CppEditorPlugin::fileSettings();
- fs->headerSearchPaths.removeLast();
- fs->headerSearchPaths.removeLast();
- fs->sourceSearchPaths.removeLast();
- fs->sourceSearchPaths.removeLast();
- fs->headerPrefixes.removeLast();
- fs->sourcePrefixes.removeLast();
+ CppFileSettings fs = CppEditorPlugin::fileSettings(nullptr);
+ fs.headerSearchPaths.removeLast();
+ fs.headerSearchPaths.removeLast();
+ fs.sourceSearchPaths.removeLast();
+ fs.sourceSearchPaths.removeLast();
+ fs.headerPrefixes.removeLast();
+ fs.sourcePrefixes.removeLast();
+ CppEditorPlugin::setGlobalFileSettings(fs);
}
} // namespace CppEditor::Internal
diff --git a/src/plugins/cppeditor/cpptoolsjsextension.cpp b/src/plugins/cppeditor/cpptoolsjsextension.cpp
index 73a846593c..0818af0acb 100644
--- a/src/plugins/cppeditor/cpptoolsjsextension.cpp
+++ b/src/plugins/cppeditor/cpptoolsjsextension.cpp
@@ -3,6 +3,7 @@
#include "cpptoolsjsextension.h"
+#include "cppeditorplugin.h"
#include "cppfilesettingspage.h"
#include "cpplocatordata.h"
#include "cppworkingcopy.h"
@@ -12,6 +13,7 @@
#include <projectexplorer/project.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/projectnodes.h>
+#include <projectexplorer/projecttree.h>
#include <cplusplus/AST.h>
#include <cplusplus/ASTPath.h>
@@ -27,6 +29,13 @@
namespace CppEditor::Internal {
+static CppFileSettings fileSettings()
+{
+ // Note that the user can set a different project in the wizard *after* the file names
+ // have been determined. There's nothing we can do about that here.
+ return CppEditorPlugin::fileSettings(ProjectExplorer::ProjectTree::currentProject());
+}
+
static QString fileName(const QString &path, const QString &extension)
{
return Utils::FilePath::fromStringWithExtension(path, extension).toString();
@@ -37,6 +46,16 @@ QString CppToolsJsExtension::headerGuard(const QString &in) const
return Utils::headerGuard(in);
}
+QString CppToolsJsExtension::licenseTemplate() const
+{
+ return fileSettings().licenseTemplate();
+}
+
+bool CppToolsJsExtension::usePragmaOnce() const
+{
+ return fileSettings().headerPragmaOnce;
+}
+
static QStringList parts(const QString &klass)
{
return klass.split(QStringLiteral("::"));
@@ -63,8 +82,7 @@ QString CppToolsJsExtension::className(const QString &klass) const
QString CppToolsJsExtension::classToFileName(const QString &klass, const QString &extension) const
{
const QString raw = fileName(className(klass), extension);
- CppFileSettings settings;
- settings.fromSettings(Core::ICore::settings());
+ const CppFileSettings &settings = fileSettings();
if (!settings.lowerCaseFiles)
return raw;
@@ -249,4 +267,14 @@ QString CppToolsJsExtension::includeStatement(
return {};
}
+QString CppToolsJsExtension::cxxHeaderSuffix() const
+{
+ return fileSettings().headerSuffix;
+}
+
+QString CppToolsJsExtension::cxxSourceSuffix() const
+{
+ return fileSettings().sourceSuffix;
+}
+
} // namespace CppEditor::Internal
diff --git a/src/plugins/cppeditor/cpptoolsjsextension.h b/src/plugins/cppeditor/cpptoolsjsextension.h
index cdb7e56c81..593f953641 100644
--- a/src/plugins/cppeditor/cpptoolsjsextension.h
+++ b/src/plugins/cppeditor/cpptoolsjsextension.h
@@ -26,6 +26,12 @@ public:
// Generate header guard:
Q_INVOKABLE QString headerGuard(const QString &in) const;
+ // Generate license template:
+ Q_INVOKABLE QString licenseTemplate() const;
+
+ // Use #pragma once:
+ Q_INVOKABLE bool usePragmaOnce() const;
+
// Work with classes:
Q_INVOKABLE QStringList namespaces(const QString &klass) const;
Q_INVOKABLE bool hasNamespaces(const QString &klass) const;
@@ -46,6 +52,10 @@ public:
const QString &pathOfIncludingFile
);
+ // File suffixes:
+ Q_INVOKABLE QString cxxHeaderSuffix() const;
+ Q_INVOKABLE QString cxxSourceSuffix() const;
+
private:
CppLocatorData * const m_locatorData;
};
diff --git a/src/plugins/cppeditor/cpptoolsreuse.cpp b/src/plugins/cppeditor/cpptoolsreuse.cpp
index 8f68ed3ec9..325aa8bb24 100644
--- a/src/plugins/cppeditor/cpptoolsreuse.cpp
+++ b/src/plugins/cppeditor/cpptoolsreuse.cpp
@@ -611,9 +611,19 @@ void openEditor(const Utils::FilePath &filePath, bool inNextSplit, Utils::Id edi
: EditorManager::NoFlags);
}
-bool preferLowerCaseFileNames()
+bool preferLowerCaseFileNames(ProjectExplorer::Project *project)
{
- return Internal::CppEditorPlugin::fileSettings()->lowerCaseFiles;
+ return Internal::CppEditorPlugin::fileSettings(project).lowerCaseFiles;
+}
+
+QString preferredCxxHeaderSuffix(ProjectExplorer::Project *project)
+{
+ return Internal::CppEditorPlugin::fileSettings(project).headerSuffix;
+}
+
+QString preferredCxxSourceSuffix(ProjectExplorer::Project *project)
+{
+ return Internal::CppEditorPlugin::fileSettings(project).sourceSuffix;
}
namespace Internal {
diff --git a/src/plugins/cppeditor/cpptoolsreuse.h b/src/plugins/cppeditor/cpptoolsreuse.h
index 9948ab6de7..78d158b576 100644
--- a/src/plugins/cppeditor/cpptoolsreuse.h
+++ b/src/plugins/cppeditor/cpptoolsreuse.h
@@ -67,7 +67,9 @@ void CPPEDITOR_EXPORT openEditor(const Utils::FilePath &filePath, bool inNextSpl
class CppCodeModelSettings;
CppCodeModelSettings CPPEDITOR_EXPORT *codeModelSettings();
-bool CPPEDITOR_EXPORT preferLowerCaseFileNames();
+QString CPPEDITOR_EXPORT preferredCxxHeaderSuffix(ProjectExplorer::Project *project);
+QString CPPEDITOR_EXPORT preferredCxxSourceSuffix(ProjectExplorer::Project *project);
+bool CPPEDITOR_EXPORT preferLowerCaseFileNames(ProjectExplorer::Project *project);
UsePrecompiledHeaders CPPEDITOR_EXPORT getPchUsage();
diff --git a/src/plugins/designer/cpp/formclasswizard.cpp b/src/plugins/designer/cpp/formclasswizard.cpp
index 593c9db95f..1582cd26de 100644
--- a/src/plugins/designer/cpp/formclasswizard.cpp
+++ b/src/plugins/designer/cpp/formclasswizard.cpp
@@ -6,6 +6,8 @@
#include <designer/designerconstants.h>
#include <designer/qtdesignerformclasscodegenerator.h>
#include <cppeditor/cppeditorconstants.h>
+#include <cppeditor/cpptoolsreuse.h>
+#include <projectexplorer/projecttree.h>
#include <qtsupport/qtsupportconstants.h>
#include <QDebug>
@@ -22,12 +24,12 @@ FormClassWizard::FormClassWizard()
QString FormClassWizard::headerSuffix() const
{
- return preferredSuffix(CppEditor::Constants::CPP_HEADER_MIMETYPE);
+ return CppEditor::preferredCxxHeaderSuffix(ProjectExplorer::ProjectTree::currentProject());
}
QString FormClassWizard::sourceSuffix() const
{
- return preferredSuffix(CppEditor::Constants::CPP_SOURCE_MIMETYPE);
+ return CppEditor::preferredCxxSourceSuffix(ProjectExplorer::ProjectTree::currentProject());
}
QString FormClassWizard::formSuffix() const
diff --git a/src/plugins/designer/cpp/formclasswizarddialog.cpp b/src/plugins/designer/cpp/formclasswizarddialog.cpp
index 3d6d760332..cc912683f6 100644
--- a/src/plugins/designer/cpp/formclasswizarddialog.cpp
+++ b/src/plugins/designer/cpp/formclasswizarddialog.cpp
@@ -9,6 +9,7 @@
#include <cppeditor/abstracteditorsupport.h>
#include <designer/formtemplatewizardpage.h>
+#include <projectexplorer/projecttree.h>
#include <qtsupport/codegenerator.h>
#include <utils/filepath.h>
@@ -68,7 +69,8 @@ FormClassWizardParameters FormClassWizardDialog::parameters() const
m_classPage->getParameters(&rc);
// Name the ui class in the Ui namespace after the class specified
rc.uiTemplate = QtSupport::CodeGenerator::changeUiClassName(m_rawFormTemplate, rc.className);
- rc.usePragmaOnce = CppEditor::AbstractEditorSupport::usePragmaOnce();
+ rc.usePragmaOnce = CppEditor::AbstractEditorSupport::usePragmaOnce(
+ ProjectExplorer::ProjectTree::currentProject());
return rc;
}
diff --git a/src/plugins/designer/cpp/formclasswizardpage.cpp b/src/plugins/designer/cpp/formclasswizardpage.cpp
index f8113c6575..9ec4ebfa27 100644
--- a/src/plugins/designer/cpp/formclasswizardpage.cpp
+++ b/src/plugins/designer/cpp/formclasswizardpage.cpp
@@ -8,9 +8,9 @@
#include "../designertr.h"
#include <coreplugin/icore.h>
-
#include <cppeditor/cppeditorconstants.h>
-
+#include <cppeditor/cpptoolsreuse.h>
+#include <projectexplorer/projecttree.h>
#include <utils/mimeutils.h>
#include <utils/wizard.h>
@@ -32,9 +32,9 @@ FormClassWizardPage::FormClassWizardPage()
m_newClassWidget = new NewClassWidget(classGroupBox);
m_newClassWidget->setHeaderExtension(
- Utils::mimeTypeForName(CppEditor::Constants::CPP_HEADER_MIMETYPE).preferredSuffix());
+ CppEditor::preferredCxxHeaderSuffix(ProjectExplorer::ProjectTree::currentProject()));
m_newClassWidget->setSourceExtension(
- Utils::mimeTypeForName(CppEditor::Constants::CPP_SOURCE_MIMETYPE).preferredSuffix());
+ CppEditor::preferredCxxSourceSuffix(ProjectExplorer::ProjectTree::currentProject()));
m_newClassWidget->setLowerCaseFiles(lowercaseHeaderFiles());
connect(m_newClassWidget, &NewClassWidget::validChanged,
@@ -54,11 +54,7 @@ FormClassWizardPage::~FormClassWizardPage() = default;
// Retrieve settings of CppEditor plugin.
bool FormClassWizardPage::lowercaseHeaderFiles()
{
- QString lowerCaseSettingsKey = CppEditor::Constants::CPPEDITOR_SETTINGSGROUP;
- lowerCaseSettingsKey += '/';
- lowerCaseSettingsKey += CppEditor::Constants::LOWERCASE_CPPFILES_KEY;
- const bool lowerCaseDefault = CppEditor::Constants::LOWERCASE_CPPFILES_DEFAULT;
- return Core::ICore::settings()->value(lowerCaseSettingsKey, QVariant(lowerCaseDefault)).toBool();
+ return CppEditor::preferLowerCaseFileNames(ProjectExplorer::ProjectTree::currentProject());
}
void FormClassWizardPage::setClassName(const QString &suggestedClassName)
diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp
index 010ab85a82..75a21d0b5d 100644
--- a/src/plugins/designer/qtcreatorintegration.cpp
+++ b/src/plugins/designer/qtcreatorintegration.cpp
@@ -12,6 +12,7 @@
#include <designer/cpp/formclasswizardpage.h>
#include <cppeditor/cppeditorconstants.h>
+#include <cppeditor/cppeditorplugin.h>
#include <cppeditor/cppeditorwidget.h>
#include <cppeditor/cppmodelmanager.h>
#include <cppeditor/cppsemanticinfo.h>
@@ -795,6 +796,6 @@ void QtCreatorIntegration::handleSymbolRenameStage2(
void QtCreatorIntegration::slotSyncSettingsToDesigner()
{
// Set promotion-relevant parameters on integration.
- setHeaderSuffix(Utils::mimeTypeForName(CppEditor::Constants::CPP_HEADER_MIMETYPE).preferredSuffix());
+ setHeaderSuffix(CppEditor::preferredCxxHeaderSuffix(ProjectTree::currentProject()));
setHeaderLowercase(FormClassWizardPage::lowercaseHeaderFiles());
}
diff --git a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
index d4d5e02a3c..f598984041 100644
--- a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
+++ b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
@@ -5,12 +5,13 @@
#include "formtemplatewizardpage.h"
#include <designer/cpp/formclasswizardparameters.h>
-#include <utils/codegeneration.h>
+#include <extensionsystem/pluginmanager.h>
#include <coreplugin/icore.h>
#include <cppeditor/abstracteditorsupport.h>
+#include <projectexplorer/projecttree.h>
#include <qtsupport/codegenerator.h>
#include <qtsupport/codegensettings.h>
-#include <extensionsystem/pluginmanager.h>
+#include <utils/codegeneration.h>
#include <QTextStream>
#include <QSettings>
@@ -70,12 +71,11 @@ bool QtDesignerFormClassCodeGenerator::generateCpp(const FormClassWizardParamete
const QString unqualifiedClassName = namespaceList.takeLast();
- const QString headerLicense =
- CppEditor::AbstractEditorSupport::licenseTemplate(
- FilePath::fromString(parameters.headerFile), parameters.className);
- const QString sourceLicense =
- CppEditor::AbstractEditorSupport::licenseTemplate(
- FilePath::fromString(parameters.sourceFile), parameters.className);
+ ProjectExplorer::Project * const project = ProjectExplorer::ProjectTree::currentProject();
+ const QString headerLicense = CppEditor::AbstractEditorSupport::licenseTemplate(
+ project, FilePath::fromString(parameters.headerFile), parameters.className);
+ const QString sourceLicense = CppEditor::AbstractEditorSupport::licenseTemplate(
+ project, FilePath::fromString(parameters.sourceFile), parameters.className);
// Include guards
const QString guard = Utils::headerGuard(parameters.headerFile, namespaceList);
diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp
index 28e67ec3ec..565766dff4 100644
--- a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp
+++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp
@@ -7,7 +7,7 @@
#include <coreplugin/generatedfile.h>
#include <cppeditor/abstracteditorsupport.h>
-
+#include <projectexplorer/projecttree.h>
#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/macroexpander.h>
@@ -82,6 +82,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
// First create the widget wrappers (plugins) and - if requested - skeletons
// for the widgets.
const int widgetCount = options.widgetOptions.size();
+ ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject();
for (int i = 0; i < widgetCount; i++) {
const PluginOptions::WidgetOptions &wo = options.widgetOptions.at(i);
sm.clear();
@@ -95,7 +96,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile pluginHeader(baseDir / wo.pluginHeaderFile);
pluginHeader.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
- FilePath::fromString(wo.pluginHeaderFile), wo.pluginClassName)
+ project, FilePath::fromString(wo.pluginHeaderFile),
+ wo.pluginClassName)
+ pluginHeaderContents);
rc.push_back(pluginHeader);
@@ -122,6 +124,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile pluginSource(baseDir / wo.pluginSourceFile);
pluginSource.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
+ project,
FilePath::fromString(wo.pluginSourceFile), wo.pluginClassName)
+ pluginSourceContents);
if (i == 0 && widgetCount == 1) // Open first widget unless collection
@@ -169,6 +172,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile widgetHeader(baseDir / wo.widgetHeaderFile);
widgetHeader.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
+ project,
FilePath::fromString(wo.widgetHeaderFile),
wo.widgetClassName)
+ widgetHeaderContents);
@@ -181,6 +185,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile widgetSource(baseDir / wo.widgetSourceFile);
widgetSource.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
+ project,
FilePath::fromString(wo.widgetSourceFile),
wo.widgetClassName)
+ widgetSourceContents);
@@ -218,6 +223,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile collectionHeader(baseDir / options.collectionHeaderFile);
collectionHeader.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
+ project,
FilePath::fromString(options.collectionHeaderFile),
options.collectionClassName)
+ collectionHeaderContents);
@@ -235,6 +241,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara
return QList<Core::GeneratedFile>();
Core::GeneratedFile collectionSource(baseDir / options.collectionSourceFile);
collectionSource.setContents(CppEditor::AbstractEditorSupport::licenseTemplate(
+ project,
FilePath::fromString(options.collectionSourceFile),
options.collectionClassName)
+ collectionSourceFileContents);
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
index 816101dd31..16f533020d 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
@@ -10,10 +10,12 @@
#include <coreplugin/icore.h>
#include <cppeditor/cppeditorconstants.h>
+#include <cppeditor/cpptoolsreuse.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/projecttree.h>
#include <projectexplorer/targetsetuppage.h>
#include <projectexplorer/task.h>
@@ -39,12 +41,12 @@ QtWizard::QtWizard()
QString QtWizard::sourceSuffix()
{
- return preferredSuffix(QLatin1String(ProjectExplorer::Constants::CPP_SOURCE_MIMETYPE));
+ return CppEditor::preferredCxxSourceSuffix(ProjectTree::currentProject());
}
QString QtWizard::headerSuffix()
{
- return preferredSuffix(QLatin1String(ProjectExplorer::Constants::CPP_HEADER_MIMETYPE));
+ return CppEditor::preferredCxxHeaderSuffix(ProjectTree::currentProject());
}
QString QtWizard::formSuffix()