From d7993c717d08e2884963340d9017156b54b44c05 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@nokia.com>
Date: Wed, 12 Sep 2012 17:38:08 +0200
Subject: [PATCH] Make DeployConfigurations cloneable

The API was there just not the correct implementation.

Change-Id: I65468f3c00f3c8ba1b853f8c11f6296813d1a966
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 .../android/androiddeployconfiguration.cpp    |  1 +
 .../madde/qt4maemodeployconfiguration.cpp     |  1 +
 .../projectexplorer/deployconfiguration.cpp   | 21 ++++++++++++++++---
 .../projectexplorer/deployconfiguration.h     | 11 ++++++++--
 .../qnx/blackberrydeployconfiguration.cpp     |  1 +
 src/plugins/qnx/qnxdeployconfiguration.cpp    |  1 +
 6 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/plugins/android/androiddeployconfiguration.cpp b/src/plugins/android/androiddeployconfiguration.cpp
index 6d06801af65..2c76ccd3bf5 100644
--- a/src/plugins/android/androiddeployconfiguration.cpp
+++ b/src/plugins/android/androiddeployconfiguration.cpp
@@ -57,6 +57,7 @@ AndroidDeployConfiguration::AndroidDeployConfiguration(Target *parent, Core::Id
 AndroidDeployConfiguration::AndroidDeployConfiguration(Target *parent, DeployConfiguration *source)
     : DeployConfiguration(parent, source)
 {
+    cloneSteps(source);
 }
 
 AndroidDeployConfigurationFactory::AndroidDeployConfigurationFactory(QObject *parent)
diff --git a/src/plugins/madde/qt4maemodeployconfiguration.cpp b/src/plugins/madde/qt4maemodeployconfiguration.cpp
index 5f533a9bd9e..68a9865ab7e 100644
--- a/src/plugins/madde/qt4maemodeployconfiguration.cpp
+++ b/src/plugins/madde/qt4maemodeployconfiguration.cpp
@@ -76,6 +76,7 @@ Qt4MaemoDeployConfiguration::Qt4MaemoDeployConfiguration(ProjectExplorer::Target
     : RemoteLinuxDeployConfiguration(target, source)
 {
     init();
+    cloneSteps(source);
 }
 
 DeployConfigurationWidget *Qt4MaemoDeployConfiguration::configurationWidget() const
diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp
index 2be157dd8cc..f5db9d320b7 100644
--- a/src/plugins/projectexplorer/deployconfiguration.cpp
+++ b/src/plugins/projectexplorer/deployconfiguration.cpp
@@ -150,6 +150,21 @@ void DeployConfiguration::cloneSteps(DeployConfiguration *source)
     m_stepList->cloneSteps(source->stepList());
 }
 
+///
+// DefaultDeployConfiguration
+///
+DefaultDeployConfiguration::DefaultDeployConfiguration(Target *target, const Core::Id id)
+    : DeployConfiguration(target, id)
+{
+
+}
+
+DefaultDeployConfiguration::DefaultDeployConfiguration(Target *target, DeployConfiguration *source)
+    : DeployConfiguration(target, source)
+{
+    cloneSteps(source);
+}
+
 ///
 // DeployConfigurationFactory
 ///
@@ -187,7 +202,7 @@ DeployConfiguration *DeployConfigurationFactory::create(Target *parent, const Co
 {
     if (!canCreate(parent, id))
         return 0;
-    return new DeployConfiguration(parent, id);
+    return new DefaultDeployConfiguration(parent, id);
 }
 
 bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
@@ -199,7 +214,7 @@ DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const Q
 {
     if (!canRestore(parent, map))
         return 0;
-    DeployConfiguration *dc = new DeployConfiguration(parent, idFromMap(map));
+    DefaultDeployConfiguration *dc = new DefaultDeployConfiguration(parent, idFromMap(map));
     if (!dc->fromMap(map)) {
         delete dc;
         return 0;
@@ -216,7 +231,7 @@ DeployConfiguration *DeployConfigurationFactory::clone(Target *parent, DeployCon
 {
     if (!canClone(parent, product))
         return 0;
-    return new DeployConfiguration(parent, product);
+    return new DefaultDeployConfiguration(parent, product);
 }
 
 DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map)
diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h
index 18ff4816bf7..49482879dc9 100644
--- a/src/plugins/projectexplorer/deployconfiguration.h
+++ b/src/plugins/projectexplorer/deployconfiguration.h
@@ -78,11 +78,18 @@ protected:
     bool fromMap(const QVariantMap &map);
 
 private:
-    friend class DeployConfigurationFactory;
-
     BuildStepList *m_stepList;
 };
 
+class PROJECTEXPLORER_EXPORT DefaultDeployConfiguration : public DeployConfiguration
+{
+    Q_OBJECT
+    friend class DeployConfigurationFactory; // for the ctors
+protected:
+    DefaultDeployConfiguration(Target *target, const Core::Id id);
+    DefaultDeployConfiguration(Target *target, DeployConfiguration *source);
+};
+
 class PROJECTEXPLORER_EXPORT DeployConfigurationFactory :
     public QObject
 {
diff --git a/src/plugins/qnx/blackberrydeployconfiguration.cpp b/src/plugins/qnx/blackberrydeployconfiguration.cpp
index cbf93f40d25..3bd180bc421 100644
--- a/src/plugins/qnx/blackberrydeployconfiguration.cpp
+++ b/src/plugins/qnx/blackberrydeployconfiguration.cpp
@@ -61,6 +61,7 @@ BlackBerryDeployConfiguration::BlackBerryDeployConfiguration(ProjectExplorer::Ta
     : ProjectExplorer::DeployConfiguration(parent, source)
 {
     ctor();
+    cloneSteps(source);
 }
 
 void BlackBerryDeployConfiguration::ctor()
diff --git a/src/plugins/qnx/qnxdeployconfiguration.cpp b/src/plugins/qnx/qnxdeployconfiguration.cpp
index 9d6efacdce5..859cd65b3fe 100644
--- a/src/plugins/qnx/qnxdeployconfiguration.cpp
+++ b/src/plugins/qnx/qnxdeployconfiguration.cpp
@@ -44,4 +44,5 @@ QnxDeployConfiguration::QnxDeployConfiguration(ProjectExplorer::Target *target,
 QnxDeployConfiguration::QnxDeployConfiguration(ProjectExplorer::Target *target, QnxDeployConfiguration *source)
     : RemoteLinux::RemoteLinuxDeployConfiguration(target, source)
 {
+    cloneSteps(source);
 }
-- 
GitLab