From 1e0561e8e5781c61fa884e61132ac573db842170 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 15 Apr 2009 14:52:31 +0200 Subject: [PATCH] Crash on removing RunConfigurations by editing the pro file Task: 250759 --- src/plugins/projectexplorer/project.cpp | 12 +++++++++--- src/plugins/projectexplorer/project.h | 2 ++ .../runsettingspropertiespage.cpp | 17 +++++++++++++++++ .../projectexplorer/runsettingspropertiespage.h | 4 ++-- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 7106ac1383c..3f83f4763e7 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -453,6 +453,7 @@ void Project::addRunConfiguration(QSharedPointer runConfigurat return; } m_runConfigurations.push_back(runConfiguration); + emit addedRunConfiguration(runConfiguration->name()); } void Project::removeRunConfiguration(QSharedPointer runConfiguration) @@ -460,14 +461,19 @@ void Project::removeRunConfiguration(QSharedPointer runConfigu if(!m_runConfigurations.contains(runConfiguration)) { qWarning()<<"Not removing runConfiguration"<name()<<"becasue it doesn't exist"; return; - } - m_runConfigurations.removeOne(runConfiguration); + } + if (m_activeRunConfiguration == runConfiguration) { - if (m_runConfigurations.isEmpty()) + if (m_runConfigurations.size() <= 1) setActiveRunConfiguration(QSharedPointer(0)); + else if (m_runConfigurations.at(0) == m_activeRunConfiguration) + setActiveRunConfiguration(m_runConfigurations.at(1)); else setActiveRunConfiguration(m_runConfigurations.at(0)); } + + m_runConfigurations.removeOne(runConfiguration); + emit removedRunConfiguration(runConfiguration->name()); } QSharedPointer Project::activeRunConfiguration() const diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index fc8b9960a6b..bfe5872e781 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -140,6 +140,8 @@ signals: void fileListChanged(); void activeBuildConfigurationChanged(); void activeRunConfigurationChanged(); + void removedRunConfiguration(const QString &name); + void addedRunConfiguration(const QString &name); // This signal is jut there for updating the tree list in the buildsettings wizard void buildConfigurationDisplayNameChanged(const QString &buildConfiguraiton); diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index bf4c5646376..b8c42716872 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp @@ -189,6 +189,15 @@ RunSettingsWidget::RunSettingsWidget(Project *project) connect(m_ui->removeToolButton, SIGNAL(clicked(bool)), this, SLOT(removeRunConfiguration())); + connect(m_project, SIGNAL(removedRunConfiguration(QString)), + this, SLOT(initRunConfigurationComboBox())); + + connect(m_project, SIGNAL(addedRunConfiguration(QString)), + this, SLOT(initRunConfigurationComboBox())); + + connect(m_project, SIGNAL(activeRunConfigurationChanged()), + this, SLOT(activeRunConfigurationChanged())); + initRunConfigurationComboBox(); const QList > runConfigurations = m_project->runConfigurations(); for (int i=0; igroupBox->layout()->addWidget(m_runConfigurationWidget); } +void RunSettingsWidget::activeRunConfigurationChanged() +{ + QSharedPointer active = m_project->activeRunConfiguration(); + delete m_runConfigurationWidget; + m_runConfigurationWidget = active->configurationWidget(); + m_ui->groupBox->layout()->addWidget(m_runConfigurationWidget); +} + void RunSettingsWidget::nameChanged() { RunConfiguration *rc = qobject_cast(sender()); diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h index 9caab4e4ac2..1412ad71271 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.h +++ b/src/plugins/projectexplorer/runsettingspropertiespage.h @@ -77,9 +77,9 @@ private slots: void addRunConfiguration(); void removeRunConfiguration(); void nameChanged(); - -private: void initRunConfigurationComboBox(); + void activeRunConfigurationChanged(); +private: Project *m_project; RunConfigurationsModel *m_runConfigurationsModel; Ui::RunSettingsPropertiesPage *m_ui;