From 9f86cfaf3c42cc48242f25d537d034e648e0b4ce Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Wed, 9 Jun 2010 13:21:08 +0200 Subject: [PATCH] Cmake: Don't delete run configurations on switching buildconfigurations Just disable them, but preserve them. This is different from qmake, but for qmake we do have different assumptions what a buildconfiguration is. Task-Nr: QTCREATORBUG-1591 --- .../cmakerunconfiguration.cpp | 20 ++++++++++++++++--- .../cmakerunconfiguration.h | 6 ++++++ .../cmakeprojectmanager/cmaketarget.cpp | 6 +++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index f45a479008c..3d1c180ae01 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -80,7 +80,8 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeTarget *parent, const QString m_buildTarget(target), m_workingDirectory(workingDirectory), m_title(title), - m_baseEnvironmentBase(CMakeRunConfiguration::BuildEnvironmentBase) + m_baseEnvironmentBase(CMakeRunConfiguration::BuildEnvironmentBase), + m_enabled(true) { ctor(); } @@ -94,7 +95,8 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeTarget *parent, CMakeRunConfig m_title(source->m_title), m_arguments(source->m_arguments), m_userEnvironmentChanges(source->m_userEnvironmentChanges), - m_baseEnvironmentBase(source->m_baseEnvironmentBase) + m_baseEnvironmentBase(source->m_baseEnvironmentBase), + m_enabled(source->m_enabled) { ctor(); } @@ -293,9 +295,21 @@ ProjectExplorer::ToolChain::ToolChainType CMakeRunConfiguration::toolChainType() return bc->toolChainType(); } -// Configuration widget +void CMakeRunConfiguration::setEnabled(bool b) +{ + if (m_enabled == b) + return; + m_enabled = b; + emit isEnabledChanged(isEnabled()); + setDisplayName(m_title + (m_enabled ? "" : tr(" (disabled)"))); +} +bool CMakeRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *bc) const +{ + return m_enabled && LocalApplicationRunConfiguration::isEnabled(bc); +} +// Configuration widget CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *cmakeRunConfiguration, QWidget *parent) : QWidget(parent), m_ignoreChange(false), m_cmakeRunConfiguration(cmakeRunConfiguration) { diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index c856f0bcc7c..c4f49c5da22 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -81,6 +81,11 @@ public: QVariantMap toMap() const; + void setEnabled(bool b); + + bool isEnabled(ProjectExplorer::BuildConfiguration *bc) const; + using LocalApplicationRunConfiguration::isEnabled; + signals: void baseEnvironmentChanged(); void userEnvironmentChangesChanged(const QList<ProjectExplorer::EnvironmentItem> &diff); @@ -115,6 +120,7 @@ private: QString m_arguments; QList<ProjectExplorer::EnvironmentItem> m_userEnvironmentChanges; BaseEnvironmentBase m_baseEnvironmentBase; + bool m_enabled; }; class CMakeRunConfigurationWidget : public QWidget diff --git a/src/plugins/cmakeprojectmanager/cmaketarget.cpp b/src/plugins/cmakeprojectmanager/cmaketarget.cpp index 9e45ee2cdc0..f0feff5e31b 100644 --- a/src/plugins/cmakeprojectmanager/cmaketarget.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketarget.cpp @@ -120,6 +120,7 @@ void CMakeTarget::updateRunConfigurations() foreach (CMakeRunConfiguration *rc, list) { rc->setExecutable(ct.executable); rc->setWorkingDirectory(ct.workingDirectory); + rc->setEnabled(true); } existingRunConfigurations.remove(ct.title); } else { @@ -131,7 +132,10 @@ void CMakeTarget::updateRunConfigurations() existingRunConfigurations.constBegin(); for( ; it != existingRunConfigurations.constEnd(); ++it) { CMakeRunConfiguration *rc = it.value(); - removeRunConfiguration(rc); + // The executables for those runconfigurations aren't build by the current buildconfiguration + // We just set a disable flag and show that in the display name + rc->setEnabled(false); + // removeRunConfiguration(rc); } if (runConfigurations().isEmpty()) { // Oh no, no run configuration, -- GitLab