diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index 20b46f30544..1aeecabf956 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp @@ -53,6 +53,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : m_addRunToolButton = new QPushButton(Tr::tr("Add..."), this); m_removeRunToolButton = new QPushButton(Tr::tr("Remove"), this); + m_removeAllRunConfigsButton = new QPushButton(Tr::tr("Remove All"), this); m_renameRunButton = new QPushButton(Tr::tr("Rename..."), this); m_cloneRunButton = new QPushButton(Tr::tr("Clone..."), this); @@ -92,9 +93,10 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : m_gridLayout->addWidget(m_runConfigurationCombo, 4, 1, 1, 1); m_gridLayout->addWidget(m_addRunToolButton, 4, 2, 1, 1); m_gridLayout->addWidget(m_removeRunToolButton, 4, 3, 1, 1); - m_gridLayout->addWidget(m_renameRunButton, 4, 4, 1, 1); - m_gridLayout->addWidget(m_cloneRunButton, 4, 5, 1, 1); - m_gridLayout->addItem(spacer1, 4, 6, 1, 1); + m_gridLayout->addWidget(m_removeAllRunConfigsButton, 4, 4, 1, 1); + m_gridLayout->addWidget(m_renameRunButton, 4, 5, 1, 1); + m_gridLayout->addWidget(m_cloneRunButton, 4, 6, 1, 1); + m_gridLayout->addItem(spacer1, 4, 7, 1, 1); m_gridLayout->addWidget(runWidget, 5, 0, 1, -1); m_gridLayout->addItem(spacer2, 6, 0, 1, 1); @@ -144,7 +146,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : m_runConfigurationCombo->setModel(model); m_runConfigurationCombo->setCurrentIndex(model->indexFor(rc)); - updateRemoveToolButton(); + updateRemoveToolButtons(); m_renameRunButton->setEnabled(rc); m_cloneRunButton->setEnabled(rc); @@ -156,20 +158,22 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : this, &RunSettingsWidget::currentRunConfigurationChanged); connect(m_removeRunToolButton, &QAbstractButton::clicked, this, &RunSettingsWidget::removeRunConfiguration); + connect(m_removeAllRunConfigsButton, &QAbstractButton::clicked, + this, &RunSettingsWidget::removeAllRunConfigurations); connect(m_renameRunButton, &QAbstractButton::clicked, this, &RunSettingsWidget::renameRunConfiguration); connect(m_cloneRunButton, &QAbstractButton::clicked, this, &RunSettingsWidget::cloneRunConfiguration); connect(m_target, &Target::addedRunConfiguration, - this, &RunSettingsWidget::updateRemoveToolButton); + this, &RunSettingsWidget::updateRemoveToolButtons); connect(m_target, &Target::removedRunConfiguration, - this, &RunSettingsWidget::updateRemoveToolButton); + this, &RunSettingsWidget::updateRemoveToolButtons); connect(m_target, &Target::addedDeployConfiguration, - this, &RunSettingsWidget::updateRemoveToolButton); + this, &RunSettingsWidget::updateRemoveToolButtons); connect(m_target, &Target::removedDeployConfiguration, - this, &RunSettingsWidget::updateRemoveToolButton); + this, &RunSettingsWidget::updateRemoveToolButtons); connect(m_target, &Target::activeRunConfigurationChanged, this, &RunSettingsWidget::activeRunConfigurationChanged); @@ -188,7 +192,7 @@ void RunSettingsWidget::showAddRunConfigDialog() QTC_CHECK(newRC->id() == rci.factory->runConfigurationId()); m_target->addRunConfiguration(newRC); m_target->setActiveRunConfiguration(newRC); - updateRemoveToolButton(); + updateRemoveToolButtons(); } void RunSettingsWidget::cloneRunConfiguration() @@ -226,11 +230,27 @@ void RunSettingsWidget::removeRunConfiguration() return; m_target->removeRunConfiguration(rc); - updateRemoveToolButton(); + updateRemoveToolButtons(); m_renameRunButton->setEnabled(m_target->activeRunConfiguration()); m_cloneRunButton->setEnabled(m_target->activeRunConfiguration()); } +void RunSettingsWidget::removeAllRunConfigurations() +{ + QMessageBox msgBox(QMessageBox::Question, Tr::tr("Remove Run Configurations?"), + Tr::tr("Do you really want to delete all run configurations?"), + QMessageBox::Yes|QMessageBox::No, this); + msgBox.setDefaultButton(QMessageBox::No); + msgBox.setEscapeButton(QMessageBox::No); + if (msgBox.exec() == QMessageBox::No) + return; + + m_target->removeAllRunConfigurations(); + updateRemoveToolButtons(); + m_renameRunButton->setEnabled(false); + m_cloneRunButton->setEnabled(false); +} + void RunSettingsWidget::activeRunConfigurationChanged() { if (m_ignoreChanges.isLocked()) @@ -367,10 +387,12 @@ void RunSettingsWidget::renameDeployConfiguration() m_target->activeDeployConfiguration()->setDisplayName(name); } -void RunSettingsWidget::updateRemoveToolButton() +void RunSettingsWidget::updateRemoveToolButtons() { m_removeDeployToolButton->setEnabled(m_target->deployConfigurations().count() > 1); - m_removeRunToolButton->setEnabled(!m_target->runConfigurations().isEmpty()); + const bool hasRunConfigs = !m_target->runConfigurations().isEmpty(); + m_removeRunToolButton->setEnabled(hasRunConfigs); + m_removeAllRunConfigsButton->setEnabled(hasRunConfigs); } void RunSettingsWidget::updateDeployConfiguration(DeployConfiguration *dc) diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h index 00998e1817c..18db4568a45 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.h +++ b/src/plugins/projectexplorer/runsettingspropertiespage.h @@ -41,6 +41,7 @@ private: void showAddRunConfigDialog(); void cloneRunConfiguration(); void removeRunConfiguration(); + void removeAllRunConfigurations(); void activeRunConfigurationChanged(); void renameRunConfiguration(); void currentDeployConfigurationChanged(int index); @@ -49,7 +50,7 @@ private: void activeDeployConfigurationChanged(); void renameDeployConfiguration(); - void updateRemoveToolButton(); + void updateRemoveToolButtons(); QString uniqueDCName(const QString &name); QString uniqueRCName(const QString &name); @@ -82,6 +83,7 @@ private: QPushButton *m_removeDeployToolButton; QPushButton *m_addRunToolButton; QPushButton *m_removeRunToolButton; + QPushButton *m_removeAllRunConfigsButton; QPushButton *m_renameRunButton; QPushButton *m_cloneRunButton; QPushButton *m_renameDeployButton; diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index d2e59aab063..82d85f84e58 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -525,6 +525,20 @@ void Target::removeRunConfiguration(RunConfiguration *rc) delete rc; } +void Target::removeAllRunConfigurations() +{ + QList runConfigs = d->m_runConfigurations; + d->m_runConfigurations.clear(); + setActiveRunConfiguration(nullptr); + while (!runConfigs.isEmpty()) { + RunConfiguration * const rc = runConfigs.takeFirst(); + emit removedRunConfiguration(rc); + ProjectExplorerPlugin::targetSelector()->removedRunConfiguration(rc); + d->m_runConfigurationModel.removeProjectConfiguration(rc); + delete rc; + } +} + RunConfiguration *Target::activeRunConfiguration() const { return d->m_activeRunConfiguration; diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h index aeca2fd9e0b..5cfb69eeca0 100644 --- a/src/plugins/projectexplorer/target.h +++ b/src/plugins/projectexplorer/target.h @@ -77,6 +77,7 @@ public: const QList runConfigurations() const; void addRunConfiguration(RunConfiguration *rc); void removeRunConfiguration(RunConfiguration *rc); + void removeAllRunConfigurations(); RunConfiguration *activeRunConfiguration() const; void setActiveRunConfiguration(RunConfiguration *rc);