diff options
author | Christian Stenger <[email protected]> | 2024-07-01 13:56:25 +0200 |
---|---|---|
committer | Christian Stenger <[email protected]> | 2024-07-02 05:33:35 +0000 |
commit | 6d4e5a0002ff535380a3a5100c2ab294521ef5d2 (patch) | |
tree | 856d713f7451fae3434e792a216b2ce32c964652 /src/plugins/cppcheck | |
parent | 6cb0c69c436e5bd9a831297f838b3777dde24b84 (diff) |
Cppcheck: Treat manual run settings as project settings
Instead of always deriving from global settings store the
settings for the manual run into the project settings.
Fixes: QTCREATORBUG-31092
Change-Id: I7854cff4e71b58225c7e9c1198c4e60128ed07e4
Reviewed-by: hjk <[email protected]>
Diffstat (limited to 'src/plugins/cppcheck')
-rw-r--r-- | src/plugins/cppcheck/cppcheckmanualrundialog.cpp | 8 | ||||
-rw-r--r-- | src/plugins/cppcheck/cppcheckmanualrundialog.h | 8 | ||||
-rw-r--r-- | src/plugins/cppcheck/cppcheckplugin.cpp | 57 |
3 files changed, 62 insertions, 11 deletions
diff --git a/src/plugins/cppcheck/cppcheckmanualrundialog.cpp b/src/plugins/cppcheck/cppcheckmanualrundialog.cpp index f5d5f687581..9ba540f50fd 100644 --- a/src/plugins/cppcheck/cppcheckmanualrundialog.cpp +++ b/src/plugins/cppcheck/cppcheckmanualrundialog.cpp @@ -19,10 +19,12 @@ namespace Cppcheck::Internal { -ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project) +ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project, + CppcheckSettings *settings) : m_model(new ProjectExplorer::SelectableFilesFromDirModel(this)) { QTC_ASSERT(project, return ); + QTC_ASSERT(settings, return); setWindowTitle(Tr::tr("Cppcheck Run Configuration")); @@ -52,9 +54,7 @@ ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project) analyzeButton->setEnabled(m_model->hasCheckedFiles()); }); - m_manualRunSettings.readSettings(); - m_manualRunSettings.setAutoApply(true); - auto optionsWidget = m_manualRunSettings.layouter()().emerge(); + auto optionsWidget = settings->layouter()().emerge(); auto layout = new QVBoxLayout(this); layout->addWidget(optionsWidget); diff --git a/src/plugins/cppcheck/cppcheckmanualrundialog.h b/src/plugins/cppcheck/cppcheckmanualrundialog.h index fe5b920ee23..1f9c91e576a 100644 --- a/src/plugins/cppcheck/cppcheckmanualrundialog.h +++ b/src/plugins/cppcheck/cppcheckmanualrundialog.h @@ -3,8 +3,6 @@ #pragma once -#include "cppchecksettings.h" - #include <QDialog> namespace Utils { @@ -19,18 +17,18 @@ class SelectableFilesFromDirModel; namespace Cppcheck::Internal { +class CppcheckSettings; + class ManualRunDialog : public QDialog { public: - explicit ManualRunDialog(const ProjectExplorer::Project *project); + explicit ManualRunDialog(const ProjectExplorer::Project *project, CppcheckSettings *settings); Utils::FilePaths filePaths() const; QSize sizeHint() const override; - const CppcheckSettings &manualRunSettings() const { return m_manualRunSettings; } private: ProjectExplorer::SelectableFilesFromDirModel *m_model; - CppcheckSettings m_manualRunSettings; }; } // Cppcheck::Internal diff --git a/src/plugins/cppcheck/cppcheckplugin.cpp b/src/plugins/cppcheck/cppcheckplugin.cpp index 5bc99e54efb..341b25db029 100644 --- a/src/plugins/cppcheck/cppcheckplugin.cpp +++ b/src/plugins/cppcheck/cppcheckplugin.cpp @@ -40,6 +40,7 @@ class CppcheckPluginPrivate final : public QObject { public: explicit CppcheckPluginPrivate(); + ~CppcheckPluginPrivate(); CppcheckTextMarkManager marks; CppcheckTool tool{marks, Constants::CHECK_PROGRESS_ID}; @@ -49,9 +50,12 @@ public: Utils::Perspective perspective{Constants::PERSPECTIVE_ID, ::Cppcheck::Tr::tr("Cppcheck")}; Action *manualRunAction = nullptr; + QHash<Project *, CppcheckSettings *> projectSettings; void startManualRun(); void updateManualRunAction(); + void saveProjectSettings(Project *project); + void loadProjectSettings(Project *project); }; CppcheckPluginPrivate::CppcheckPluginPrivate() @@ -104,6 +108,29 @@ CppcheckPluginPrivate::CppcheckPluginPrivate() action, &QAction::setEnabled); perspective.addToolBarAction(action); } + connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, + this, [this](Project *project) { + if (!project) + return; + CppcheckSettings *settings = projectSettings.value(project, nullptr); + if (!settings) { + settings = new CppcheckSettings; + settings->readSettings(); + settings->setAutoApply(true); + connect(project, &Project::aboutToSaveSettings, + this, [this, project]{ saveProjectSettings(project); }); + connect(project, &Project::settingsLoaded, + this, [this, project]{ loadProjectSettings(project); }); + projectSettings.insert(project, settings); + loadProjectSettings(project); + } + }); +} + +CppcheckPluginPrivate::~CppcheckPluginPrivate() +{ + qDeleteAll(projectSettings); + projectSettings.clear(); } void CppcheckPluginPrivate::startManualRun() @@ -112,7 +139,9 @@ void CppcheckPluginPrivate::startManualRun() if (!project) return; - ManualRunDialog dialog(project); + CppcheckSettings *settings = projectSettings.value(project, nullptr); + QTC_ASSERT(settings, return); + ManualRunDialog dialog(project, settings); if (dialog.exec() == ManualRunDialog::Rejected) return; @@ -123,7 +152,7 @@ void CppcheckPluginPrivate::startManualRun() return; manualRunTool.setProject(project); - manualRunTool.updateOptions(dialog.manualRunSettings()); + manualRunTool.updateOptions(*settings); manualRunTool.check(files); perspective.select(); } @@ -138,6 +167,30 @@ void CppcheckPluginPrivate::updateManualRunAction() manualRunAction->setEnabled(canRun); } +void CppcheckPluginPrivate::saveProjectSettings(Project *project) +{ + QTC_ASSERT(project, return); + CppcheckSettings *settings = projectSettings.value(project, nullptr); + QTC_ASSERT(settings, return); + + Store store; + settings->toMap(store); + project->setNamedSettings("CppcheckManual", Utils::variantFromStore(store)); +} + +void CppcheckPluginPrivate::loadProjectSettings(Project *project) +{ + QTC_ASSERT(project, return); + CppcheckSettings *settings = projectSettings.value(project, nullptr); + QTC_ASSERT(settings, return); + + const QVariant variant = project->namedSettings("CppcheckManual"); + if (!variant.isValid()) + return; + Store store = Utils::storeFromVariant(project->namedSettings("CppcheckManual")); + settings->fromMap(store); +} + class CppcheckPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT |