CMakePM: Add ability to stop CMake run in Settings

Previously the only way to stop the CMake run was to click on "x"
button of the "Configure" progress bar.

Now you can click in Settings on "Stop CMake".

Change-Id: I167b86ba62679f197c194148b122ff0c87e87162
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Cristian Adam
2021-12-22 15:18:00 +01:00
parent d17d8ab50f
commit dfacdbefa8
8 changed files with 42 additions and 14 deletions

View File

@@ -411,13 +411,16 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
}); });
connect(m_resetButton, &QPushButton::clicked, m_configModel, &ConfigModel::resetAllChanges); connect(m_resetButton, &QPushButton::clicked, m_configModel, &ConfigModel::resetAllChanges);
connect(m_reconfigureButton, connect(m_reconfigureButton, &QPushButton::clicked, this, [this]() {
&QPushButton::clicked, auto buildSystem = static_cast<CMakeBuildSystem *>(m_buildConfiguration->buildSystem());
m_buildConfiguration, if (!buildSystem->isParsing()) {
&CMakeBuildConfiguration::runCMakeWithExtraArguments); buildSystem->runCMakeWithExtraArguments();
connect(m_setButton, &QPushButton::clicked, this, [this]() { } else {
setVariableUnsetFlag(false); buildSystem->stopCMakeRun();
m_reconfigureButton->setEnabled(false);
}
}); });
connect(m_setButton, &QPushButton::clicked, this, [this]() { setVariableUnsetFlag(false); });
connect(m_unsetButton, &QPushButton::clicked, this, [this]() { connect(m_unsetButton, &QPushButton::clicked, this, [this]() {
setVariableUnsetFlag(true); setVariableUnsetFlag(true);
}); });
@@ -570,7 +573,15 @@ void CMakeBuildSettingsWidget::updateButtonState()
}); });
m_resetButton->setEnabled(m_configModel->hasChanges() && !isParsing); m_resetButton->setEnabled(m_configModel->hasChanges() && !isParsing);
m_reconfigureButton->setEnabled(!configChanges.isEmpty() && !isParsing); m_reconfigureButton->setEnabled(true);
if (isParsing)
m_reconfigureButton->setText(tr("Stop CMake"));
else if (m_configModel->hasChanges())
m_reconfigureButton->setText(tr("Apply Configuration Changes"));
else
m_reconfigureButton->setText(tr("Run CMake"));
m_buildConfiguration->setConfigurationChanges(configChanges); m_buildConfiguration->setConfigurationChanges(configChanges);
} }
@@ -1323,11 +1334,6 @@ BuildSystem *CMakeBuildConfiguration::buildSystem() const
return m_buildSystem; return m_buildSystem;
} }
void CMakeBuildConfiguration::runCMakeWithExtraArguments()
{
m_buildSystem->runCMakeWithExtraArguments();
}
void CMakeBuildConfiguration::setSourceDirectory(const FilePath &path) void CMakeBuildConfiguration::setSourceDirectory(const FilePath &path)
{ {
aspect<SourceDirectoryAspect>()->setValue(path.toString()); aspect<SourceDirectoryAspect>()->setValue(path.toString());

View File

@@ -69,8 +69,6 @@ public:
void buildTarget(const QString &buildTarget); void buildTarget(const QString &buildTarget);
ProjectExplorer::BuildSystem *buildSystem() const final; ProjectExplorer::BuildSystem *buildSystem() const final;
void runCMakeWithExtraArguments();
void setSourceDirectory(const Utils::FilePath& path); void setSourceDirectory(const Utils::FilePath& path);
Utils::FilePath sourceDirectory() const; Utils::FilePath sourceDirectory() const;

View File

@@ -434,6 +434,13 @@ void CMakeBuildSystem::runCMakeWithExtraArguments()
| REPARSE_URGENT); | REPARSE_URGENT);
} }
void CMakeBuildSystem::stopCMakeRun()
{
qCDebug(cmakeBuildSystemLog) << cmakeBuildConfiguration()->displayName()
<< "stopping CMake's runb";
m_reader.stopCMakeRun();
}
void CMakeBuildSystem::buildCMakeTarget(const QString &buildTarget) void CMakeBuildSystem::buildCMakeTarget(const QString &buildTarget)
{ {
QTC_ASSERT(!buildTarget.isEmpty(), return); QTC_ASSERT(!buildTarget.isEmpty(), return);

View File

@@ -77,6 +77,7 @@ public:
void runCMake(); void runCMake();
void runCMakeAndScanProjectTree(); void runCMakeAndScanProjectTree();
void runCMakeWithExtraArguments(); void runCMakeWithExtraArguments();
void stopCMakeRun();
bool persistCMakeState(); bool persistCMakeState();
void clearCMakeCache(); void clearCMakeCache();

View File

@@ -148,6 +148,14 @@ void CMakeProcess::run(const BuildDirParameters &parameters, const QStringList &
m_future = std::move(future); m_future = std::move(future);
} }
void CMakeProcess::terminate()
{
if (m_process) {
m_processWasCanceled = true;
m_process->terminate();
}
}
QProcess::ProcessState CMakeProcess::state() const QProcess::ProcessState CMakeProcess::state() const
{ {
if (m_process) if (m_process)

View File

@@ -51,6 +51,7 @@ public:
~CMakeProcess(); ~CMakeProcess();
void run(const BuildDirParameters &parameters, const QStringList &arguments); void run(const BuildDirParameters &parameters, const QStringList &arguments);
void terminate();
QProcess::ProcessState state() const; QProcess::ProcessState state() const;

View File

@@ -170,6 +170,12 @@ void FileApiReader::stop()
m_isParsing = false; m_isParsing = false;
} }
void FileApiReader::stopCMakeRun()
{
if (m_cmakeProcess)
m_cmakeProcess->terminate();
}
bool FileApiReader::isParsing() const bool FileApiReader::isParsing() const
{ {
return m_isParsing; return m_isParsing;

View File

@@ -64,6 +64,7 @@ public:
void resetData(); void resetData();
void parse(bool forceCMakeRun, bool forceInitialConfiguration, bool forceExtraConfiguration); void parse(bool forceCMakeRun, bool forceInitialConfiguration, bool forceExtraConfiguration);
void stop(); void stop();
void stopCMakeRun();
bool isParsing() const; bool isParsing() const;