From 7fc6a0ecc873eb1f54ee60f22fdd010ebe0ea990 Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Thu, 29 Oct 2009 12:24:25 +0100
Subject: [PATCH] Update the makesteps the summary on build directory changes

Also ensure that Qt4ProjectConfigWidget does not emit any signals from
it's init method.
---
 src/plugins/projectexplorer/project.h         |  1 +
 src/plugins/qt4projectmanager/makestep.cpp    |  4 +-
 src/plugins/qt4projectmanager/qt4project.cpp  |  7 +-
 src/plugins/qt4projectmanager/qt4project.h    |  6 ++
 .../qt4projectconfigwidget.cpp                | 79 +++++++++++++------
 5 files changed, 70 insertions(+), 27 deletions(-)

diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 2740b17e498..cd286ae78c0 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -144,6 +144,7 @@ public:
     static QString makeUnique(const QString &preferedName, const QStringList &usedNames);
 signals:
     void fileListChanged();
+    void buildDirectoryChanged();
 
 // TODO clean up signal names
 // might be better to also have
diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 7641c261b61..049d327c11f 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -174,6 +174,9 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
 
     connect(makeStep, SIGNAL(changed()),
             this, SLOT(update()));
+    connect(makeStep->project(), SIGNAL(buildDirectoryChanged()),
+            this, SLOT(updateDetails()));
+
     connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()),
             this, SLOT(updateMakeOverrideLabel()));
     connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()),
@@ -189,7 +192,6 @@ void MakeStepConfigWidget::updateMakeOverrideLabel()
 
 void MakeStepConfigWidget::updateDetails()
 {
-    // TODO reduce heavy code duplication
     Qt4Project *pro = static_cast<Qt4Project *>(m_makeStep->project());
     ProjectExplorer::BuildConfiguration *bc = pro->buildConfiguration(m_buildConfiguration);
     QString workingDirectory = pro->buildDirectory(bc);
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 96c080087a8..a9fd57afe74 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -1004,7 +1004,7 @@ void Qt4Project::updateActiveRunConfiguration()
         }
     }
     emit runConfigurationsEnabledStateChanged();
-    emit invalidateCachedTargetInformation();
+    emit targetInformationChanged();
 }
 
 ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(BuildConfiguration *configuration) const
@@ -1207,6 +1207,11 @@ void Qt4Project::invalidateCachedTargetInformation()
     emit targetInformationChanged();
 }
 
+void Qt4Project::emitBuildDirectoryChanged()
+{
+    emit buildDirectoryChanged();
+}
+
 // We match -spec and -platfrom separetly
 // We ignore -cache, because qmake contained a bug that it didn't
 // mention the -cache in the Makefile
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 597a426247c..a9ed61871dd 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -72,6 +72,7 @@ namespace Internal {
     class Qt4RunConfiguration;
     class GCCPreprocessor;
     struct Qt4ProjectFiles;
+    class Qt4ProjectConfigWidget;
 
     class CodeModelInfo
     {
@@ -266,6 +267,10 @@ private:
     static void findProFile(const QString& fileName, Internal::Qt4ProFileNode *root, QList<Internal::Qt4ProFileNode *> &list);
     static bool hasSubNode(Internal::Qt4PriFileNode *root, const QString &path);
 
+    // called by Qt4ProjectConfigWidget
+    // TODO remove once there's a setBuildDirectory call
+    void emitBuildDirectoryChanged();
+
     QList<Internal::Qt4ProFileNode *> m_applicationProFileChange;
     ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const;
 
@@ -296,6 +301,7 @@ private:
     mutable ProjectExplorer::ToolChain *m_toolChain;
 
     friend class Qt4ProjectFile;
+    friend class Internal::Qt4ProjectConfigWidget;
 };
 
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 292b97e76c1..80572bc68dd 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -72,30 +72,6 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project)
     m_ui->shadowBuildDirEdit->setExpectedKind(Utils::PathChooser::Directory);
     m_ui->invalidQtWarningLabel->setVisible(false);
 
-    connect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)),
-            this, SLOT(changeConfigName(QString)));
-
-    connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)),
-            this, SLOT(shadowBuildCheckBoxClicked(bool)));
-
-    connect(m_ui->shadowBuildDirEdit, SIGNAL(beforeBrowsing()),
-            this, SLOT(onBeforeBeforeShadowBuildDirBrowsed()));
-
-    connect(m_ui->shadowBuildDirEdit, SIGNAL(changed(QString)),
-            this, SLOT(shadowBuildLineEditTextChanged()));
-
-    connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
-            this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
-
-    connect(m_ui->toolChainComboBox, SIGNAL(activated(int)),
-            this, SLOT(selectToolChain(int)));
-
-    connect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
-            this, SLOT(importLabelClicked()));
-
-    connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()),
-            this, SLOT(manageQtVersions()));
-
     QtVersionManager *vm = QtVersionManager::instance();
 
     connect(vm, SIGNAL(qtVersionsChanged()),
@@ -147,6 +123,31 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration)
     if (debug)
         qDebug() << "Qt4ProjectConfigWidget::init() for"<<buildConfiguration;
 
+    disconnect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)),
+            this, SLOT(changeConfigName(QString)));
+
+    disconnect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)),
+            this, SLOT(shadowBuildCheckBoxClicked(bool)));
+
+    disconnect(m_ui->shadowBuildDirEdit, SIGNAL(beforeBrowsing()),
+            this, SLOT(onBeforeBeforeShadowBuildDirBrowsed()));
+
+    disconnect(m_ui->shadowBuildDirEdit, SIGNAL(changed(QString)),
+            this, SLOT(shadowBuildLineEditTextChanged()));
+
+    disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
+            this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
+
+    disconnect(m_ui->toolChainComboBox, SIGNAL(activated(int)),
+            this, SLOT(selectToolChain(int)));
+
+    disconnect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
+            this, SLOT(importLabelClicked()));
+
+    disconnect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()),
+            this, SLOT(manageQtVersions()));
+
+
     m_buildConfiguration = buildConfiguration;
     ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfiguration);
     m_ui->nameLineEdit->setText(bc->displayName());
@@ -161,6 +162,31 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration)
     updateImportLabel();
     updateToolChainCombo();
     updateDetails();
+
+    connect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)),
+            this, SLOT(changeConfigName(QString)));
+
+    connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)),
+            this, SLOT(shadowBuildCheckBoxClicked(bool)));
+
+    connect(m_ui->shadowBuildDirEdit, SIGNAL(beforeBrowsing()),
+            this, SLOT(onBeforeBeforeShadowBuildDirBrowsed()));
+
+    connect(m_ui->shadowBuildDirEdit, SIGNAL(changed(QString)),
+            this, SLOT(shadowBuildLineEditTextChanged()));
+
+    connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
+            this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
+
+    connect(m_ui->toolChainComboBox, SIGNAL(activated(int)),
+            this, SLOT(selectToolChain(int)));
+
+    connect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
+            this, SLOT(importLabelClicked()));
+
+    connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()),
+            this, SLOT(manageQtVersions()));
+
 }
 
 void Qt4ProjectConfigWidget::changeConfigName(const QString &newName)
@@ -222,6 +248,7 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked)
         bc->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path());
     else
         bc->setValue("buildDirectory", QVariant(QString::null));
+    m_pro->buildDirectoryChanged();
     updateDetails();
     updateImportLabel();
 }
@@ -262,9 +289,11 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged()
     // if the directory already exists
     // check if we have a build in there and
     // offer to import it
-    updateImportLabel();
 
+    m_pro->buildDirectoryChanged();
     m_pro->invalidateCachedTargetInformation();
+
+    updateImportLabel();
     updateDetails();
 }
 
-- 
GitLab