From 6ef67df88b379332430deadbac91d391f203681e Mon Sep 17 00:00:00 2001
From: goro <qtc-committer@nokia.com>
Date: Fri, 19 Dec 2008 18:25:20 +0100
Subject: [PATCH] PathChooser migration for Qt4 build config page

---
 src/libs/utils/pathchooser.cpp                | 16 +++++-
 src/libs/utils/pathchooser.h                  |  3 ++
 .../qt4buildconfigwidget.cpp                  | 41 +++++++--------
 .../qt4projectmanager/qt4buildconfigwidget.h  |  1 +
 .../qt4projectmanager/qt4buildconfigwidget.ui | 51 +++++++------------
 5 files changed, 53 insertions(+), 59 deletions(-)

diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index b769ea75589..91504b496c9 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -90,6 +90,7 @@ struct PathChooserPrivate
     PathValidatingLineEdit *m_lineEdit;
     PathChooser::Kind m_acceptingKind;
     QString m_dialogTitleOverride;
+    QString m_initialBrowsePathOverride;
 };
 
 PathChooserPrivate::PathChooserPrivate(PathChooser *chooser) :
@@ -143,9 +144,15 @@ void PathChooser::setPath(const QString &path)
 
 void PathChooser::slotBrowse()
 {
+    emit beforeBrowsing();
+
     QString predefined = path();
-    if (!predefined.isEmpty() && !QFileInfo(predefined).isDir())
-        predefined.clear();
+    if ((predefined.isEmpty() || !QFileInfo(predefined).isDir())
+            && !m_d->m_initialBrowsePathOverride.isNull()) {
+        predefined = m_d->m_initialBrowsePathOverride;
+        if (!QFileInfo(predefined).isDir())
+            predefined.clear();
+    }
 
     // Prompt for a file/dir
     QString dialogTitle;
@@ -271,6 +278,11 @@ void PathChooser::setPromptDialogTitle(const QString &title)
     m_d->m_dialogTitleOverride = title;
 }
 
+void PathChooser::setInitialBrowsePathBackup(const QString &path)
+{
+    m_d->m_initialBrowsePathOverride = path;
+}
+
 QString PathChooser::makeDialogTitle(const QString &title)
 {
     if (m_d->m_dialogTitleOverride.isNull())
diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h
index f22c20120b7..5fcc8ee228c 100644
--- a/src/libs/utils/pathchooser.h
+++ b/src/libs/utils/pathchooser.h
@@ -71,6 +71,8 @@ public:
 
     void setPromptDialogTitle(const QString &title);
 
+    void setInitialBrowsePathBackup(const QString &path);
+
     bool isValid() const;
     QString errorMessage() const;
 
@@ -91,6 +93,7 @@ private:
 signals:
     void validChanged();
     void changed();
+    void beforeBrowsing();
     void browsingFinished();
     void returnPressed();
 
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
index 2ee2d0f8bc0..13fb5980a90 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
@@ -54,6 +54,8 @@ Qt4BuildConfigWidget::Qt4BuildConfigWidget(Qt4Project *project)
 {
     m_ui = new Ui::Qt4BuildConfigWidget();
     m_ui->setupUi(this);
+    m_ui->shadowBuildDirEdit->setPromptDialogTitle(tr("Shadow Build Directory"));
+    m_ui->shadowBuildDirEdit->setExpectedKind(Core::Utils::PathChooser::Directory);
     m_ui->invalidQtWarningLabel->setVisible(false);
 
     connect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)),
@@ -62,10 +64,10 @@ Qt4BuildConfigWidget::Qt4BuildConfigWidget(Qt4Project *project)
     connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)),
             this, SLOT(shadowBuildCheckBoxClicked(bool)));
 
-    connect(m_ui->shadowBuildButton, SIGNAL(clicked(bool)),
-            this, SLOT(shadowBuildButtonClicked()));
+    connect(m_ui->shadowBuildDirEdit, SIGNAL(beforeBrowsing()),
+            this, SLOT(onBeforeBeforeShadowBuildDirBrowsed()));
 
-    connect(m_ui->shadowBuildLineEdit, SIGNAL(textEdited(QString)),
+    connect(m_ui->shadowBuildDirEdit, SIGNAL(changed()),
             this, SLOT(shadowBuildLineEditTextChanged()));
 
     connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
@@ -102,10 +104,9 @@ void Qt4BuildConfigWidget::init(const QString &buildConfiguration)
 
     bool shadowBuild = m_pro->value(buildConfiguration, "useShadowBuild").toBool();
     m_ui->shadowBuildCheckBox->setChecked(shadowBuild);
-    m_ui->shadowBuildLineEdit->setEnabled(shadowBuild);
-    m_ui->shadowBuildLineEdit->setText(m_pro->buildDirectory(buildConfiguration));
+    m_ui->shadowBuildDirEdit->setEnabled(shadowBuild);
+    m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(buildConfiguration));
     shadowBuildLineEditTextChanged(); // Update the import label
-    m_ui->shadowBuildButton->setEnabled(shadowBuild);
 }
 
 void Qt4BuildConfigWidget::changeConfigName(const QString &newName)
@@ -145,47 +146,39 @@ void Qt4BuildConfigWidget::setupQtVersionsComboBox()
         this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
 }
 
-void Qt4BuildConfigWidget::shadowBuildButtonClicked()
+void Qt4BuildConfigWidget::onBeforeBeforeShadowBuildDirBrowsed()
 {
-    QString initialDirectory = m_ui->shadowBuildLineEdit->text();
-    if (initialDirectory.isEmpty())
-        initialDirectory = QFileInfo(m_pro->file()->fileName()).absolutePath();
-
-    QString shadowBuildDirectory =
-        QFileDialog::getExistingDirectory(this, tr("Shadow Build Directory"), initialDirectory );
-
-    if (shadowBuildDirectory != QString::null)
-        m_ui->shadowBuildLineEdit->setText(shadowBuildDirectory);
-    shadowBuildLineEditTextChanged();
+    QString initialDirectory = QFileInfo(m_pro->file()->fileName()).absolutePath();
+    if (!initialDirectory.isEmpty())
+        m_ui->shadowBuildDirEdit->setInitialBrowsePathBackup(initialDirectory);
 }
 
 void Qt4BuildConfigWidget::shadowBuildCheckBoxClicked(bool checked)
 {
-    m_ui->shadowBuildLineEdit->setEnabled(checked);
-    m_ui->shadowBuildButton->setEnabled(checked);
+    m_ui->shadowBuildDirEdit->setEnabled(checked);
     bool b = m_ui->shadowBuildCheckBox->isChecked();
     m_pro->setValue(m_buildConfiguration, "useShadowBuild", b);
     if (b)
-        m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildLineEdit->text());
+        m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildDirEdit->path());
     else
         m_pro->setValue(m_buildConfiguration, "buildDirectory", QVariant(QString::null));
 }
 
 void Qt4BuildConfigWidget::shadowBuildLineEditTextChanged()
 {
-    m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildLineEdit->text());
+    m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildDirEdit->path());
     // if the directory already exists
     // check if we have a build in there and
     // offer to import it
     m_ui->importLabel->setVisible(false);
     if (m_ui->shadowBuildCheckBox->isChecked()) {
-        QString qtPath = m_pro->qt4ProjectManager()->versionManager()->findQtVersionFromMakefile(m_ui->shadowBuildLineEdit->text());
+        QString qtPath = m_pro->qt4ProjectManager()->versionManager()->findQtVersionFromMakefile(m_ui->shadowBuildDirEdit->path());
         if (!qtPath.isEmpty()) {
             m_ui->importLabel->setVisible(true);
         }
     }
 
-//    QFileInfo fi(m_ui->shadowBuildLineEdit->text());
+//    QFileInfo fi(m_ui->shadowBuildDirEdit->path());
 //    if (fi.exists()) {
 //        m_ui->shadowBuildLineEdit->setStyleSheet("");
 //        m_ui->shadowBuildLineEdit->setToolTip("");
@@ -198,7 +191,7 @@ void Qt4BuildConfigWidget::shadowBuildLineEditTextChanged()
 void Qt4BuildConfigWidget::importLabelClicked()
 {
     if (m_ui->shadowBuildCheckBox->isChecked()) {
-        QString directory = m_ui->shadowBuildLineEdit->text();
+        QString directory = m_ui->shadowBuildDirEdit->path();
         if (!directory.isEmpty()) {
             QtVersionManager *vm = m_pro->qt4ProjectManager()->versionManager();
             QString qtPath = vm->findQtVersionFromMakefile(directory);
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
index 622ce98be2e..da126023a09 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
@@ -61,6 +61,7 @@ private slots:
     void setupQtVersionsComboBox();
     void shadowBuildCheckBoxClicked(bool checked);
     void shadowBuildButtonClicked();
+    void onBeforeBeforeShadowBuildDirBrowsed();
     void shadowBuildLineEditTextChanged();
     void importLabelClicked();
     void qtVersionComboBoxCurrentIndexChanged(const QString &);
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
index f62d4a69b53..ab5e8858611 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
@@ -110,39 +110,6 @@
        </property>
       </widget>
      </item>
-     <item row="3" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout">
-       <item>
-        <widget class="QLineEdit" name="shadowBuildLineEdit">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>100</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>16777215</width>
-           <height>16777215</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QToolButton" name="shadowBuildButton">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>...</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
      <item row="4" column="1">
       <widget class="QLabel" name="importLabel">
        <property name="text">
@@ -153,6 +120,16 @@
        </property>
       </widget>
      </item>
+     <item row="3" column="1">
+      <widget class="Core::Utils::PathChooser" name="shadowBuildDirEdit" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item row="0" column="1">
@@ -186,6 +163,14 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Core::Utils::PathChooser</class>
+   <extends>QWidget</extends>
+   <header location="global">utils/pathchooser.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>
-- 
GitLab