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 @@
- -
-
-
-
-
-
-
- 100
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- ...
-
-
-
-
-
-
@@ -153,6 +120,16 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+
-
@@ -186,6 +163,14 @@
+
+
+ Core::Utils::PathChooser
+ QWidget
+
+ 1
+
+