diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index b769ea755890194b98a737b4c50ce57fbdb43bb3..91504b496c9cddfe0c42aeef955afa734b64cc44 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 f22c20120b7b0a1d7d56680b8c59b883e492787c..5fcc8ee228ca8d6b2949f6d5a4a719e5e61a4fdf 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 2ee2d0f8bc0be72d7b49e106b690af32dccab592..13fb5980a907db410ffe71b93354e4af4bb19c3c 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 622ce98be2e78d007c63aaa2a514df9fb7243272..da126023a091b385d5d9a85b407593d7dfad4f18 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 f62d4a69b535bcb2d624e7daacb599105481a706..ab5e8858611fa5ab5340d2d8bb897973169d3fe7 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>