diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index c83cd39d234..07f1fa3a134 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -104,6 +104,11 @@ BuildSettingsWidget::BuildSettingsWidget(Target *target) : m_renameButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); hbox->addWidget(m_renameButton); + m_cloneButton = new QPushButton(this); + m_cloneButton->setText(tr("Clone...")); + m_cloneButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + hbox->addWidget(m_cloneButton); + hbox->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed)); vbox->addLayout(hbox); } @@ -124,6 +129,9 @@ BuildSettingsWidget::BuildSettingsWidget(Target *target) : connect(m_renameButton, &QAbstractButton::clicked, this, &BuildSettingsWidget::renameConfiguration); + connect(m_cloneButton, &QAbstractButton::clicked, + this, &BuildSettingsWidget::cloneConfiguration); + connect(m_target, &Target::activeBuildConfigurationChanged, this, &BuildSettingsWidget::updateActiveConfiguration); @@ -172,11 +180,6 @@ void BuildSettingsWidget::updateAddButtonMenu() m_buildInfoList.clear(); if (m_target) { - if (m_target->activeBuildConfiguration()) { - QAction *cloneAction = m_addButtonMenu->addAction(tr("&Clone Selected")); - connect(cloneAction, &QAction::triggered, - this, [this]() { cloneConfiguration(m_buildConfiguration); }); - } IBuildConfigurationFactory *factory = IBuildConfigurationFactory::find(m_target); if (!factory) return; @@ -198,6 +201,7 @@ void BuildSettingsWidget::updateBuildSettings() QList bcs = m_target->buildConfigurations(); m_removeButton->setEnabled(bcs.size() > 1); m_renameButton->setEnabled(!bcs.isEmpty()); + m_cloneButton->setEnabled(!bcs.isEmpty()); if (!m_buildConfiguration) return; @@ -294,10 +298,9 @@ void BuildSettingsWidget::renameConfiguration() } -void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfiguration) +void BuildSettingsWidget::cloneConfiguration() { - if (!sourceConfiguration) - return; + QTC_ASSERT(m_buildConfiguration, return); IBuildConfigurationFactory *factory = IBuildConfigurationFactory::find(m_target); if (!factory) return; @@ -311,7 +314,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura if (name.isEmpty()) return; - BuildConfiguration *bc = factory->clone(m_target, sourceConfiguration); + BuildConfiguration *bc = factory->clone(m_target, m_buildConfiguration); if (!bc) return; diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 52e6e8a0698..0686d2d341d 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -64,7 +64,7 @@ private: void updateActiveConfiguration(); void createConfiguration(BuildInfo *info); - void cloneConfiguration(BuildConfiguration *toClone); + void cloneConfiguration(); void deleteConfiguration(BuildConfiguration *toDelete); QString uniqueName(const QString &name); @@ -74,6 +74,7 @@ private: QPushButton *m_addButton = nullptr; QPushButton *m_removeButton = nullptr; QPushButton *m_renameButton = nullptr; + QPushButton *m_cloneButton = nullptr; QPushButton *m_makeActiveButton = nullptr; QComboBox *m_buildConfigurationComboBox = nullptr; QMenu *m_addButtonMenu = nullptr; diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index 9447353af88..abd2ed5af9c 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp @@ -104,6 +104,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : m_addRunToolButton = new QPushButton(tr("Add"), this); m_removeRunToolButton = new QPushButton(tr("Remove"), this); m_renameRunButton = new QPushButton(tr("Rename..."), this); + m_cloneRunButton = new QPushButton(tr("Clone..."), this); auto spacer1 = new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Minimum); auto spacer2 = new QSpacerItem(10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding); @@ -142,7 +143,8 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : 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->addItem(spacer1, 4, 5, 1, 1); + m_gridLayout->addWidget(m_cloneRunButton, 4, 5, 1, 1); + m_gridLayout->addItem(spacer1, 4, 6, 1, 1); m_gridLayout->addWidget(runWidget, 5, 0, 1, 6); m_gridLayout->addItem(spacer2, 6, 0, 1, 1); @@ -203,6 +205,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : m_removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1); m_renameRunButton->setEnabled(rc); + m_cloneRunButton->setEnabled(rc); setConfigurationWidget(rc); @@ -214,6 +217,8 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : this, &RunSettingsWidget::removeRunConfiguration); connect(m_renameRunButton, &QAbstractButton::clicked, this, &RunSettingsWidget::renameRunConfiguration); + connect(m_cloneRunButton, &QAbstractButton::clicked, + this, &RunSettingsWidget::cloneRunConfiguration); connect(m_target, &Target::addedRunConfiguration, this, &RunSettingsWidget::updateRemoveToolButton); @@ -232,11 +237,6 @@ RunSettingsWidget::RunSettingsWidget(Target *target) : void RunSettingsWidget::aboutToShowAddMenu() { m_addRunMenu->clear(); - if (m_target->activeRunConfiguration()) { - QAction *cloneAction = m_addRunMenu->addAction(tr("&Clone Selected")); - connect(cloneAction, &QAction::triggered, - this, &RunSettingsWidget::cloneRunConfiguration); - } QList menuActions; for (const RunConfigurationCreationInfo &item : RunConfigurationFactory::creatorsForTarget(m_target)) { @@ -295,6 +295,7 @@ void RunSettingsWidget::removeRunConfiguration() m_target->removeRunConfiguration(rc); m_removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1); m_renameRunButton->setEnabled(m_target->activeRunConfiguration()); + m_cloneRunButton->setEnabled(m_target->activeRunConfiguration()); } void RunSettingsWidget::activeRunConfigurationChanged() @@ -307,6 +308,7 @@ void RunSettingsWidget::activeRunConfigurationChanged() setConfigurationWidget(qobject_cast(m_runConfigurationsModel->projectConfigurationAt(actRc.row()))); m_ignoreChange = false; m_renameRunButton->setEnabled(m_target->activeRunConfiguration()); + m_cloneRunButton->setEnabled(m_target->activeRunConfiguration()); } void RunSettingsWidget::renameRunConfiguration() diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h index 428f7459885..1857fea945e 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.h +++ b/src/plugins/projectexplorer/runsettingspropertiespage.h @@ -106,6 +106,7 @@ private: QPushButton *m_addRunToolButton; QPushButton *m_removeRunToolButton; QPushButton *m_renameRunButton; + QPushButton *m_cloneRunButton; QPushButton *m_renameDeployButton; QLabel *m_disabledIcon; QLabel *m_disabledText;