From efe4d807728ab464fe53b27c8cbbe668a7a1f3bc Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Wed, 18 Aug 2010 15:37:26 +0200
Subject: [PATCH] Add button to rename Build-/Deploy-/RunConfigurations

 * Add a rename button for Build-, Deploy- and RunConfigurations.

Reviewed-by: dt
---
 .../buildsettingspropertiespage.cpp           | 30 ++++++++++
 .../buildsettingspropertiespage.h             |  2 +
 .../runsettingspropertiespage.cpp             | 55 ++++++++++++++++++-
 .../runsettingspropertiespage.h               |  2 +
 .../runsettingspropertiespage.ui              | 25 ++++++---
 5 files changed, 106 insertions(+), 8 deletions(-)

diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 16e518b7dca..a6fa2d5d1c9 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -163,6 +163,11 @@ void BuildSettingsWidget::setupUi()
         m_removeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
         hbox->addWidget(m_removeButton);
 
+        m_renameButton = new QPushButton(this);
+        m_renameButton->setText(tr("Rename"));
+        m_renameButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        hbox->addWidget(m_renameButton);
+
         hbox->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed));
         vbox->addLayout(hbox);
     }
@@ -180,6 +185,9 @@ void BuildSettingsWidget::setupUi()
     connect(m_removeButton, SIGNAL(clicked()),
             this, SLOT(deleteConfiguration()));
 
+    connect(m_renameButton, SIGNAL(clicked()),
+            this, SLOT(renameConfiguration()));
+
     connect(m_target, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
             this, SLOT(updateActiveConfiguration()));
 
@@ -311,6 +319,28 @@ void BuildSettingsWidget::deleteConfiguration()
     deleteConfiguration(m_buildConfiguration);
 }
 
+void BuildSettingsWidget::renameConfiguration()
+{
+    bool ok;
+    QString name = QInputDialog::getText(this, tr("Rename..."),
+                                         tr("New name for build configuration <b>%1</b>:").
+                                            arg(m_buildConfiguration->displayName()),
+                                         QLineEdit::Normal,
+                                         m_buildConfiguration->displayName(), &ok);
+    if (!ok || !this || name.isEmpty())
+        return;
+
+    QStringList bcNames;
+    foreach (BuildConfiguration *bc, m_target->buildConfigurations()) {
+        if (bc == m_buildConfiguration)
+            continue;
+        bcNames.append(bc->displayName());
+    }
+    name = Project::makeUnique(name, bcNames);
+    m_buildConfiguration->setDisplayName(name);
+
+}
+
 void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfiguration)
 {
     if (!sourceConfiguration ||
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index bb661615d7e..16af2ba6069 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -99,6 +99,7 @@ private slots:
     void createConfiguration();
     void cloneConfiguration();
     void deleteConfiguration();
+    void renameConfiguration();
     void updateAddButtonMenu();
 
     void updateActiveConfiguration();
@@ -112,6 +113,7 @@ private:
 
     QPushButton *m_addButton;
     QPushButton *m_removeButton;
+    QPushButton *m_renameButton;
     QPushButton *m_makeActiveButton;
     QComboBox *m_buildConfigurationComboBox;
     QMenu *m_addButtonMenu;
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 3745ca910f3..c8c765ec168 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -44,6 +44,7 @@
 #include <utils/qtcassert.h>
 
 #include <QtCore/QPair>
+#include <QtGui/QInputDialog>
 #include <QtGui/QMenu>
 
 namespace ProjectExplorer {
@@ -138,9 +139,9 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
 
     m_ui = new Ui::RunSettingsPropertiesPage;
     m_ui->setupUi(this);
-    m_ui->deployWidget->setContentsMargins(0, 0, 0, 25);
 
     // deploy part
+    m_ui->deployWidget->setContentsMargins(0, 10, 0, 25);
     m_deployLayout = new QVBoxLayout(m_ui->deployWidget);
     m_deployLayout->setMargin(0);
     m_deployLayout->setSpacing(5);
@@ -151,9 +152,12 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
 
     updateDeployConfiguration(m_target->activeDeployConfiguration());
 
+    // Some projects may not support deployment, so we need this:
     m_ui->addDeployToolButton->setEnabled(m_target->activeDeployConfiguration());
     m_ui->deployConfigurationCombo->setEnabled(m_target->activeDeployConfiguration());
+
     m_ui->removeDeployToolButton->setEnabled(m_target->deployConfigurations().count() > 1);
+    m_ui->renameDeployButton->setEnabled(m_target->activeDeployConfiguration());
 
     connect(m_addDeployMenu, SIGNAL(aboutToShow()),
             this, SLOT(aboutToShowDeployMenu()));
@@ -161,11 +165,14 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
             this, SLOT(currentDeployConfigurationChanged(int)));
     connect(m_ui->removeDeployToolButton, SIGNAL(clicked(bool)),
             this, SLOT(removeDeployConfiguration()));
+    connect(m_ui->renameDeployButton, SIGNAL(clicked()),
+            this, SLOT(renameDeployConfiguration()));
 
     connect(m_target, SIGNAL(activeDeployConfigurationChanged(ProjectExplorer::DeployConfiguration*)),
             this, SLOT(activeDeployConfigurationChanged()));
 
     // run part
+    m_ui->runWidget->setContentsMargins(0, 10, 0, 25);
     m_runLayout = new QVBoxLayout(m_ui->runWidget);
     m_runLayout->setMargin(0);
     m_runLayout->setSpacing(5);
@@ -177,6 +184,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
             m_runConfigurationsModel->indexFor(m_target->activeRunConfiguration()).row());
 
     m_ui->removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
+    m_ui->renameRunButton->setEnabled(m_target->activeRunConfiguration());
 
     m_runConfigurationWidget = m_target->activeRunConfiguration()->createConfigurationWidget();
     m_runLayout->addWidget(m_runConfigurationWidget);
@@ -187,6 +195,8 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
             this, SLOT(currentRunConfigurationChanged(int)));
     connect(m_ui->removeRunToolButton, SIGNAL(clicked(bool)),
             this, SLOT(removeRunConfiguration()));
+    connect(m_ui->renameRunButton, SIGNAL(clicked()),
+            this, SLOT(renameRunConfiguration()));
 
     connect(m_target, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
             this, SLOT(activeRunConfigurationChanged()));
@@ -246,6 +256,7 @@ void RunSettingsWidget::removeRunConfiguration()
     RunConfiguration *rc = m_target->activeRunConfiguration();
     m_target->removeRunConfiguration(rc);
     m_ui->removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
+    m_ui->renameRunButton->setEnabled(m_target->activeRunConfiguration());
 }
 
 void RunSettingsWidget::activeRunConfigurationChanged()
@@ -262,6 +273,27 @@ void RunSettingsWidget::activeRunConfigurationChanged()
     m_runLayout->addWidget(m_runConfigurationWidget);
 }
 
+void RunSettingsWidget::renameRunConfiguration()
+{
+    bool ok;
+    QString name = QInputDialog::getText(this, tr("Rename..."),
+                                         tr("New name for run configuration <b>%1</b>:").
+                                            arg(m_target->activeRunConfiguration()->displayName()),
+                                         QLineEdit::Normal,
+                                         m_target->activeRunConfiguration()->displayName(), &ok);
+    if (!ok || !this || name.isEmpty())
+        return;
+
+    QStringList rcNames;
+    foreach (RunConfiguration *rc, m_target->runConfigurations()) {
+        if (rc == m_target->activeRunConfiguration())
+            continue;
+        rcNames.append(rc->displayName());
+    }
+    name = Project::makeUnique(name, rcNames);
+    m_target->activeRunConfiguration()->setDisplayName(name);
+}
+
 void RunSettingsWidget::currentRunConfigurationChanged(int index)
 {
     if (m_ignoreChange)
@@ -331,6 +363,27 @@ void RunSettingsWidget::activeDeployConfigurationChanged()
     updateDeployConfiguration(m_target->activeDeployConfiguration());
 }
 
+void RunSettingsWidget::renameDeployConfiguration()
+{
+    bool ok;
+    QString name = QInputDialog::getText(this, tr("Rename..."),
+                                         tr("New name for deploy configuration <b>%1</b>:").
+                                            arg(m_target->activeDeployConfiguration()->displayName()),
+                                         QLineEdit::Normal,
+                                         m_target->activeDeployConfiguration()->displayName(), &ok);
+    if (!ok || !this || name.isEmpty())
+        return;
+
+    QStringList dcNames;
+    foreach (DeployConfiguration *dc, m_target->deployConfigurations()) {
+        if (dc == m_target->activeDeployConfiguration())
+            continue;
+        dcNames.append(dc->displayName());
+    }
+    name = Project::makeUnique(name, dcNames);
+    m_target->activeDeployConfiguration()->setDisplayName(name);
+}
+
 void RunSettingsWidget::updateDeployConfiguration(DeployConfiguration *dc)
 {
     delete m_deployConfigurationWidget;
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h
index 9883b1add6e..f90548c1eaa 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.h
@@ -95,11 +95,13 @@ private slots:
     void addRunConfiguration();
     void removeRunConfiguration();
     void activeRunConfigurationChanged();
+    void renameRunConfiguration();
     void currentDeployConfigurationChanged(int index);
     void aboutToShowDeployMenu();
     void addDeployConfiguration();
     void removeDeployConfiguration();
     void activeDeployConfigurationChanged();
+    void renameDeployConfiguration();
 
 private:
     void updateDeployConfiguration(DeployConfiguration *);
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.ui b/src/plugins/projectexplorer/runsettingspropertiespage.ui
index 8b2d408e20c..ffaea67ba75 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.ui
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.ui
@@ -6,15 +6,12 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>474</width>
+    <width>485</width>
     <height>191</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
-    <number>0</number>
-   </property>
-   <property name="spacing">
+   <property name="horizontalSpacing">
     <number>6</number>
    </property>
    <item row="0" column="0">
@@ -41,7 +38,14 @@
      </property>
     </widget>
    </item>
-   <item row="1" column="0" colspan="5">
+   <item row="0" column="4">
+    <widget class="QPushButton" name="renameDeployButton">
+     <property name="text">
+      <string>Rename</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="6">
     <widget class="QWidget" name="deployWidget" native="true"/>
    </item>
    <item row="2" column="0">
@@ -91,6 +95,13 @@
     </widget>
    </item>
    <item row="2" column="4">
+    <widget class="QPushButton" name="renameRunButton">
+     <property name="text">
+      <string>Rename</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="5">
     <spacer name="runHorizontalSpacer">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
@@ -103,7 +114,7 @@
      </property>
     </spacer>
    </item>
-   <item row="3" column="0" colspan="5">
+   <item row="3" column="0" colspan="6">
     <widget class="QWidget" name="runWidget" native="true"/>
    </item>
   </layout>
-- 
GitLab