From 33fedfea6471703a7ca6967f322e89b476bde731 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 27 Oct 2009 18:05:04 +0100 Subject: [PATCH] Qt4ProjectManager: Give a verbose tooltip on the Qt versions. Reviewed-by: dt <qtc-committer@nokia.com> --- .../qt4projectmanager/qtoptionspage.cpp | 23 ++++++++++ src/plugins/qt4projectmanager/qtoptionspage.h | 2 + .../qt4projectmanager/qtversionmanager.cpp | 43 ++++++++++++++++++- .../qt4projectmanager/qtversionmanager.h | 3 ++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp index da0f1346f2a..0796dc44b92 100644 --- a/src/plugins/qt4projectmanager/qtoptionspage.cpp +++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp @@ -17,6 +17,8 @@ #include <QtCore/QDebug> #include <QtCore/QDir> #include <QtCore/QDateTime> +#include <QtGui/QHelpEvent> +#include <QtGui/QToolTip> using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; @@ -133,6 +135,7 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<QtVersion *> ver // setup parent items for auto-detected and manual versions m_ui->qtdirList->header()->setResizeMode(QHeaderView::ResizeToContents); QTreeWidgetItem *autoItem = new QTreeWidgetItem(m_ui->qtdirList); + m_ui->qtdirList->installEventFilter(this); autoItem->setText(0, tr("Auto-detected")); autoItem->setFirstColumnSpanned(true); QTreeWidgetItem *manualItem = new QTreeWidgetItem(m_ui->qtdirList); @@ -200,6 +203,26 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<QtVersion *> ver updateState(); } +bool QtOptionsPageWidget::eventFilter(QObject *o, QEvent *e) +{ + // Set the items tooltip, which may cause costly initialization + // of QtVersion and must be up-to-date + if (o != m_ui->qtdirList || e->type() != QEvent::ToolTip) + return false; + QHelpEvent *helpEvent = static_cast<QHelpEvent *>(e); + const QPoint treePos = helpEvent->pos() - QPoint(0, m_ui->qtdirList->header()->height()); + QTreeWidgetItem *item = m_ui->qtdirList->itemAt(treePos); + if (!item) + return false; + const int index = indexForTreeItem(item); + if (index == -1) + return false; + const QString tooltip = m_versions.at(index)->toHtml(); + QToolTip::showText(helpEvent->globalPos(), tooltip, m_ui->qtdirList); + helpEvent->accept(); + return true; +} + int QtOptionsPageWidget::currentIndex() const { if (QTreeWidgetItem *currentItem = m_ui->qtdirList->currentItem()) diff --git a/src/plugins/qt4projectmanager/qtoptionspage.h b/src/plugins/qt4projectmanager/qtoptionspage.h index c4778d36cda..4e1f2b49fe8 100644 --- a/src/plugins/qt4projectmanager/qtoptionspage.h +++ b/src/plugins/qt4projectmanager/qtoptionspage.h @@ -82,6 +82,8 @@ public: int defaultVersion() const; void finish(); + virtual bool eventFilter(QObject *o, QEvent *e); + private: void showEnvironmentPage(QTreeWidgetItem * item); void fixQtVersionName(int index); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index b9de0fbaa08..b202dd3b058 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -51,6 +51,7 @@ #include <QtCore/QSettings> #include <QtCore/QTime> #include <QtCore/QTimer> +#include <QtCore/QTextStream> #include <QtGui/QApplication> #include <QtGui/QDesktopServices> @@ -482,6 +483,46 @@ QtVersion::~QtVersion() } +QString QtVersion::toHtml() const +{ + QString rc; + QTextStream str(&rc); + str << "<html></head><body><table>"; + str << "<tr><td><b>" << QtVersionManager::tr("Name:") + << "</b></td><td>" << name() << "</td></tr>"; + str << "<tr><td><b>" << QtVersionManager::tr("Source:") + << "</b></td><td>" << sourcePath() << "</td></tr>"; + str << "<tr><td><b>" << QtVersionManager::tr("mkspec:") + << "</b></td><td>" << mkspec() << "</td></tr>"; + str << "<tr><td><b>" << QtVersionManager::tr("qmake:") + << "</b></td><td>" << m_qmakeCommand << "</td></tr>"; + updateVersionInfo(); + if (m_defaultConfigIsDebug || m_defaultConfigIsDebugAndRelease) { + str << "<tr><td><b>" << QtVersionManager::tr("Default:") << "</b></td><td>"; + if (m_defaultConfigIsDebug) + str << "debug"; + if (m_defaultConfigIsDebugAndRelease) + str << "default_and_release"; + str << "</td></tr>"; + } // default config. + if (!qmakeCXX().isEmpty()) + str << "<tr><td><b>" << QtVersionManager::tr("Compiler:") + << "</b></td><td>" << qmakeCXX() << "</td></tr>"; + str << "<tr><td><b>" << QtVersionManager::tr("Version:") + << "</b></td><td>" << qtVersionString() << "</td></tr>"; + if (hasDebuggingHelper()) + str << "<tr><td><b>" << QtVersionManager::tr("Debugging helper:") + << "</b></td><td>" << debuggingHelperLibrary() << "</td></tr>"; + const QHash<QString,QString> vInfo = versionInfo(); + if (!vInfo.isEmpty()) { + const QHash<QString,QString>::const_iterator vcend = vInfo.constEnd(); + for (QHash<QString,QString>::const_iterator it = vInfo.constBegin(); it != vcend; ++it) + str << "<tr><td><pre>" << it.key() << "</pre></td><td>" << it.value() << "</td></tr>"; + } + str << "<table></body></html>"; + return rc; +} + QString QtVersion::name() const { return m_name; @@ -1307,7 +1348,7 @@ bool QtVersion::isQt64Bit() const #ifdef Q_OS_WIN32 # ifdef __GNUC__ // MinGW lacking some definitions/winbase.h # define SCS_64BIT_BINARY 6 -# endif +# endif DWORD binaryType = 0; bool success = GetBinaryTypeW(reinterpret_cast<const TCHAR*>(make.utf16()), &binaryType) != 0; if (success && binaryType == SCS_64BIT_BINARY) diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 545fcc8c2cf..0a5d0f97edf 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -124,6 +124,9 @@ public: }; QmakeBuildConfig defaultBuildConfig() const; + + QString toHtml() const; + private: static int getUniqueId(); // Also used by QtOptionsPageWidget -- GitLab