From ddc216acb876c083a2ee0c8e299fb2f2b6b1b3a1 Mon Sep 17 00:00:00 2001 From: dt_ Date: Mon, 30 May 2011 14:42:37 +0200 Subject: [PATCH] Readd editing of paths The path can only be changed to a version that is of the same type. That should prevent a few interesting problems Change-Id: Ib9ddf4cfbeea7ac408ff7d177726005b90cf0205 Reviewed-on: http://codereview.qt.nokia.com/244 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/qtsupport/baseqtversion.h | 4 +++ src/plugins/qtsupport/qtoptionspage.cpp | 46 +++++++++++++++++++++++-- src/plugins/qtsupport/qtoptionspage.h | 1 + src/plugins/qtsupport/qtversioninfo.ui | 39 +++++++++++++++------ 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index d07c22d6cf5..9bd5200723b 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -70,6 +70,8 @@ private: bool checkVersionString(const QString &version) const; }; +namespace Internal { class QtOptionsPageWidget; } + class QTSUPPORT_EXPORT QtConfigWidget : public QWidget { Q_OBJECT @@ -83,6 +85,7 @@ class QTSUPPORT_EXPORT BaseQtVersion { friend class QtVersionFactory; friend class QtVersionManager; + friend class QtSupport::Internal::QtOptionsPageWidget; public: virtual ~BaseQtVersion(); @@ -219,6 +222,7 @@ private: QString findQtBinary(const QStringList &possibleName) const; void updateMkspec() const; void setId(int id); // used by the qtversionmanager for legacy restore + // and by the qtoptionspage to replace qt versions QString m_displayName; int m_id; bool m_isAutodetected; diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 534676c56b1..d3f6b049d34 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -174,6 +174,9 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList connect(m_versionUi->nameEdit, SIGNAL(textEdited(const QString &)), this, SLOT(updateCurrentQtName())); + connect(m_versionUi->editPathPushButton, SIGNAL(clicked()), + this, SLOT(editPath())); + connect(m_ui->addButton, SIGNAL(clicked()), this, SLOT(addQtDir())); connect(m_ui->delButton, SIGNAL(clicked()), @@ -434,16 +437,21 @@ QtOptionsPageWidget::~QtOptionsPageWidget() qDeleteAll(m_versions); } -void QtOptionsPageWidget::addQtDir() +static QString filterForQmakeFileDialog() { QString filter("qmake ("); foreach (const QString &s, Utils::BuildableHelperLibrary::possibleQMakeCommands()) { filter += s + " "; } filter += ")"; + return filter; +} +void QtOptionsPageWidget::addQtDir() +{ QString qtVersion = QFileDialog::getOpenFileName(this, - tr("Select a qmake executable"), QString(), filter); + tr("Select a qmake executable"), + QString(), filterForQmakeFileDialog()); if (qtVersion.isNull()) return; if (QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion)) { @@ -481,6 +489,39 @@ void QtOptionsPageWidget::removeQtDir() updateCleanUpButton(); } +void QtOptionsPageWidget::editPath() +{ + // TODO Here be dragons + QString qtVersion = QFileDialog::getOpenFileName(this, + tr("Select a qmake executable"), + QString(), filterForQmakeFileDialog()); + if (qtVersion.isNull()) + return; + BaseQtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion); + BaseQtVersion *current = currentVersion(); + // Same type? then replace! + if (current->type() != version->type()) { + // not the same type, error out + QMessageBox::critical(this, tr("Qt versions incompatible"), + tr("The qt version selected must be for the same target."), + QMessageBox::Ok); + delete version; + return; + } + // same type, replace + version->setId(current->uniqueId()); + m_versions.replace(m_versions.indexOf(current), version); + delete current; + + // Update ui + userChangedCurrentVersion(); + QTreeWidgetItem *item = m_ui->qtdirList->currentItem(); + item->setText(0, version->displayName()); + item->setText(1, QDir::toNativeSeparators(version->qmakeCommand())); + item->setData(0, VersionIdRole, version->uniqueId()); + item->setIcon(0, version->isValid()? m_validVersionIcon : m_invalidVersionIcon); +} + void QtOptionsPageWidget::updateDebuggingHelperUi() { BaseQtVersion *version = currentVersion(); @@ -748,6 +789,7 @@ void QtOptionsPageWidget::updateWidgets() const bool isAutodetected = enabled && version->isAutodetected(); m_ui->delButton->setEnabled(enabled && !isAutodetected); m_versionUi->nameEdit->setEnabled(enabled && !isAutodetected); + m_versionUi->editPathPushButton->setEnabled(enabled && !isAutodetected); } void QtOptionsPageWidget::updateCurrentQtName() diff --git a/src/plugins/qtsupport/qtoptionspage.h b/src/plugins/qtsupport/qtoptionspage.h index f8eff141dd1..df89b2c79c9 100644 --- a/src/plugins/qtsupport/qtoptionspage.h +++ b/src/plugins/qtsupport/qtoptionspage.h @@ -96,6 +96,7 @@ private slots: void versionChanged(QTreeWidgetItem *item, QTreeWidgetItem *old); void addQtDir(); void removeQtDir(); + void editPath(); void updateCleanUpButton(); void updateCurrentQtName(); void buildDebuggingHelper(DebuggingHelperBuildTask::Tools tools diff --git a/src/plugins/qtsupport/qtversioninfo.ui b/src/plugins/qtsupport/qtversioninfo.ui index 02375e193d1..0e597e6782e 100644 --- a/src/plugins/qtsupport/qtversioninfo.ui +++ b/src/plugins/qtsupport/qtversioninfo.ui @@ -6,8 +6,8 @@ 0 0 - 222 - 70 + 392 + 87 @@ -29,16 +29,33 @@ - - - - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - + + + + + + 0 + 0 + + + + + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Edit + + + + - +