From 4a54ac457034da290ca5a423dd59eeb86bac8f1f Mon Sep 17 00:00:00 2001
From: dt_ <qtc-committer@nokia.com>
Date: Fri, 6 May 2011 15:48:20 +0200
Subject: [PATCH] Correctly restore disabled shadow building setting

Task-Nr: QTCREATORBUG-4781
---
 .../qt-desktop/qt4desktoptargetfactory.cpp    | 18 ++++-----
 src/plugins/qt4projectmanager/qt4target.cpp   | 38 +++++++++----------
 src/plugins/qt4projectmanager/qt4target.h     |  6 +--
 3 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
index 7165b0206d4..5c5101f4137 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
@@ -125,15 +125,15 @@ ProjectExplorer::Target  *Qt4DesktopTargetFactory::restore(ProjectExplorer::Proj
 
 Qt4TargetSetupWidget *Qt4DesktopTargetFactory::createTargetSetupWidget(const QString &id, const QString &proFilePath, const QtVersionNumber &number, bool importEnabled, QList<BuildConfigurationInfo> importInfos)
 {
-    Qt4DefaultTargetSetupWidget *widget
-            = static_cast<Qt4DefaultTargetSetupWidget *>(
-                Qt4BaseTargetFactory::createTargetSetupWidget(id,  proFilePath,
-                                                              number,  importEnabled,
-                                                              importInfos));
-    if (widget) {
-        widget->setShadowBuildCheckBoxVisible(true);
-        widget->setBuildConfiguraionComboBoxVisible(true);
-    }
+
+    QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id, proFilePath, number);
+    if (infos.isEmpty())
+        return 0;
+    Qt4DefaultTargetSetupWidget *widget = new Qt4DefaultTargetSetupWidget(this, id, proFilePath,  infos,
+                                                                          number,  importEnabled,
+                                                                          importInfos,
+                                                                          Qt4DefaultTargetSetupWidget::USER);
+    widget->setBuildConfiguraionComboBoxVisible(true);
     return widget;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index 4a2d2702d10..17307522d09 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -83,8 +83,11 @@ Qt4TargetSetupWidget *Qt4BaseTargetFactory::createTargetSetupWidget(const QStrin
     QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id, proFilePath, number);
     if (infos.isEmpty())
         return 0;
-    Qt4DefaultTargetSetupWidget *widget = new Qt4DefaultTargetSetupWidget(this, id, proFilePath, infos, number, importEnabled, importInfos);
-    widget->setShadowBuildSupported(supportsShadowBuilds(id));
+    Qt4DefaultTargetSetupWidget *widget = new Qt4DefaultTargetSetupWidget(this, id, proFilePath,  infos,
+                                                                          number,  importEnabled && supportsShadowBuilds(id),
+                                                                          importInfos,
+                                                                          supportsShadowBuilds(id) ? Qt4DefaultTargetSetupWidget::ENABLE :
+                                                                                                     Qt4DefaultTargetSetupWidget::DISABLE);
     return widget;
 }
 
@@ -365,7 +368,8 @@ Qt4DefaultTargetSetupWidget::Qt4DefaultTargetSetupWidget(Qt4BaseTargetFactory *f
                                                          const QList<BuildConfigurationInfo> &infos,
                                                          const QtVersionNumber &minimumQtVersion,
                                                          bool importEnabled,
-                                                         const QList<BuildConfigurationInfo> &importInfos)
+                                                         const QList<BuildConfigurationInfo> &importInfos,
+                                                         ShadowBuildOption shadowBuild)
     : Qt4TargetSetupWidget(),
       m_id(id),
       m_factory(factory),
@@ -459,7 +463,8 @@ Qt4DefaultTargetSetupWidget::Qt4DefaultTargetSetupWidget(Qt4BaseTargetFactory *f
 
     m_shadowBuildEnabled = new QCheckBox;
     m_shadowBuildEnabled->setText(tr("Use Shadow Building"));
-    m_shadowBuildEnabled->setVisible(false);
+    m_shadowBuildCheckBoxVisible = shadowBuild == USER;
+    m_shadowBuildEnabled->setVisible(m_shadowBuildCheckBoxVisible);
 
     layout->addWidget(m_shadowBuildEnabled);
 
@@ -492,10 +497,16 @@ Qt4DefaultTargetSetupWidget::Qt4DefaultTargetSetupWidget(Qt4BaseTargetFactory *f
         m_importEnabled << true;
     }
 
-    if (m_hasInSourceBuild)
+    if (m_hasInSourceBuild || shadowBuild == DISABLE) {
         m_shadowBuildEnabled->setChecked(false);
-    else
-        m_shadowBuildEnabled->setChecked(s->value("Qt4ProjectManager.TargetSetupPage.ShadowBuilding", true).toBool());
+        m_directoriesEnabled = false;
+    } else if (shadowBuild == ENABLE) {
+        m_shadowBuildEnabled->setChecked(true);
+        m_directoriesEnabled = true;
+    } else {
+        m_directoriesEnabled = s->value("Qt4ProjectManager.TargetSetupPage.ShadowBuilding", true).toBool();
+        m_shadowBuildEnabled->setChecked(m_directoriesEnabled);
+    }
 
     m_selected += m_importInfos.size();
 
@@ -589,19 +600,6 @@ void Qt4DefaultTargetSetupWidget::setProFilePath(const QString &proFilePath)
     setBuildConfigurationInfos(m_factory->availableBuildConfigurations(m_id, proFilePath, m_minimumQtVersion), false);
 }
 
-void Qt4DefaultTargetSetupWidget::setShadowBuildSupported(bool b)
-{
-    // if shadow building is supported we want to enable it, unless we have a in source build
-    m_shadowBuildEnabled->setChecked(b && !m_hasInSourceBuild);
-    m_importLineButton->setVisible(b);
-}
-
-void Qt4DefaultTargetSetupWidget::setShadowBuildCheckBoxVisible(bool b)
-{
-    m_shadowBuildCheckBoxVisible = b;
-    m_shadowBuildEnabled->setVisible(b);
-}
-
 void Qt4DefaultTargetSetupWidget::setBuildConfiguraionComboBoxVisible(bool b)
 {
     m_buildConfigurationLabel->setVisible(b);
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index a546af4df48..add7a9c2066 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -108,13 +108,15 @@ class Qt4DefaultTargetSetupWidget : public Qt4TargetSetupWidget
 {
     Q_OBJECT
 public:
+    enum ShadowBuildOption { DISABLE, ENABLE, USER };
     Qt4DefaultTargetSetupWidget(Qt4BaseTargetFactory *factory,
                                 const QString &id,
                                 const QString &proFilePath,
                                 const QList<BuildConfigurationInfo> &info,
                                 const QtVersionNumber &minimumQtVersion,
                                 bool importEnabled,
-                                const QList<BuildConfigurationInfo> &importInfos);
+                                const QList<BuildConfigurationInfo> &importInfos,
+                                ShadowBuildOption shadowBuild);
     ~Qt4DefaultTargetSetupWidget();
     bool isTargetSelected() const;
     void setTargetSelected(bool b);
@@ -123,8 +125,6 @@ public:
     QList<BuildConfigurationInfo> buildConfigurationInfos() const;
     void setProFilePath(const QString &proFilePath);
 
-    void setShadowBuildSupported(bool b);
-    void setShadowBuildCheckBoxVisible(bool b);
     void setBuildConfiguraionComboBoxVisible(bool b);
 
     enum BuildConfigurationTemplate { PERQT = 0,
-- 
GitLab