diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 41abdd62431..5faed536865 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -58,6 +59,7 @@ #include #include +#include #include #include #include @@ -190,6 +192,36 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) aspectWidgetBuilder.finishRow(); initialCMakeAspect->addToLayout(aspectWidgetBuilder); aspectWidgetBuilder.finishRow(); + auto clearCMakeConfiguration = new QPushButton(tr("Re-configure with Initial Parameters")); + connect(clearCMakeConfiguration, &QPushButton::clicked, this, [bc]() { + auto *settings = CMakeProjectPlugin::projectTypeSpecificSettings(); + bool doNotAsk{!settings->askBeforeReConfigureInitialParams()}; + if (!doNotAsk) { + QDialogButtonBox::StandardButton reply = Utils::CheckableMessageBox::question( + nullptr, + tr("Re-configure with Initial Parameters"), + tr("Clear CMake configuration and configure with initial parameters?"), + tr("Do not ask again"), + &doNotAsk, + QDialogButtonBox::Yes | QDialogButtonBox::No, + QDialogButtonBox::Yes); + + settings->setAskBeforeReConfigureInitialParams(!doNotAsk); + settings->toSettings(Core::ICore::settings()); + + if (reply != QDialogButtonBox::Yes) { + return; + } + } + + auto cbc = static_cast(bc->buildSystem()); + cbc->clearCMakeCache(); + if (ProjectExplorerPlugin::saveModifiedFiles()) + cbc->runCMake(); + }); + aspectWidgetBuilder.addItem(LayoutBuilder::LayoutItem(new QLabel(""))); + aspectWidgetBuilder.addItem(LayoutBuilder::LayoutItem(clearCMakeConfiguration)); + aspectWidgetBuilder.finishRow(); auto buildTypeAspect = bc->aspect(); connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect]() { if (!m_buildConfiguration->isMultiConfig()) { diff --git a/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp b/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp index bc95e380bc8..070610fd7d7 100644 --- a/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp +++ b/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp @@ -33,6 +33,7 @@ static const char SETTINGS_KEY[] = "CMakeSpecificSettings"; static const char AFTER_ADD_FILE_ACTION_KEY[] = "ProjectPopupSetting"; static const char NINJA_PATH[] = "NinjaPath"; static const char PACKAGE_MANAGER_AUTO_SETUP[] = "PackageManagerAutoSetup"; +static const char ASK_RECONFIGURE_INITIAL_PARAMS[] = "AskReConfigureInitialParams"; } void CMakeSpecificSettings::fromSettings(QSettings *settings) @@ -53,6 +54,7 @@ void CMakeSpecificSettings::toSettings(QSettings *settings) const settings->beginGroup(QString(SETTINGS_KEY)); settings->setValue(QString(AFTER_ADD_FILE_ACTION_KEY), static_cast(m_afterAddFileToProjectSetting)); settings->setValue(QString(PACKAGE_MANAGER_AUTO_SETUP), m_packageManagerAutoSetup); + settings->setValue(QString(ASK_RECONFIGURE_INITIAL_PARAMS), m_askBeforeReConfigureInitialParams); settings->endGroup(); } } diff --git a/src/plugins/cmakeprojectmanager/cmakespecificsettings.h b/src/plugins/cmakeprojectmanager/cmakespecificsettings.h index e4ead416c31..273ae7937e1 100644 --- a/src/plugins/cmakeprojectmanager/cmakespecificsettings.h +++ b/src/plugins/cmakeprojectmanager/cmakespecificsettings.h @@ -53,10 +53,13 @@ public: void setPackageManagerAutoSetup(bool checked) { m_packageManagerAutoSetup = checked; } bool packageManagerAutoSetup() const { return m_packageManagerAutoSetup; } + bool askBeforeReConfigureInitialParams() const { return m_askBeforeReConfigureInitialParams; } + void setAskBeforeReConfigureInitialParams(bool doAsk) { m_askBeforeReConfigureInitialParams = doAsk; } private: AfterAddFileAction m_afterAddFileToProjectSetting; Utils::FilePath m_ninjaPath; bool m_packageManagerAutoSetup = true; + bool m_askBeforeReConfigureInitialParams = true; }; } diff --git a/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp index 9b7c71ca440..9653e32b7cd 100644 --- a/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp +++ b/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp @@ -72,6 +72,7 @@ CMakeSpecificSettingWidget::CMakeSpecificSettingWidget(CMakeSpecificSettings *se } m_ui.packageManagerAutoSetup->setChecked(settings->packageManagerAutoSetup()); + m_ui.askBeforeReConfigureWithInitialParams->setChecked(settings->askBeforeReConfigureInitialParams()); } void CMakeSpecificSettingWidget::apply() @@ -80,6 +81,7 @@ void CMakeSpecificSettingWidget::apply() m_settings->setAfterAddFileSetting(popupSetting == -1 ? AfterAddFileAction::ASK_USER : static_cast(popupSetting)); m_settings->setPackageManagerAutoSetup(m_ui.packageManagerAutoSetup->isChecked()); + m_settings->setAskBeforeReConfigureInitialParams(m_ui.askBeforeReConfigureWithInitialParams->isChecked()); m_settings->toSettings(Core::ICore::settings()); } diff --git a/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui b/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui index 171c6a3246c..b232685974c 100644 --- a/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui +++ b/src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui @@ -70,6 +70,13 @@ + + + + Ask before re-configuring with initial parameters + + +