diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp index da0f1346f2a4cabb7e2601da6c16f0d8ab6fcdb2..0796dc44b9226f5be98c835265b11ef534264b6d 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 c4778d36cda2632f930eba6fe58ee27b7e492e36..4e1f2b49fe82f446ea9ec0385f2d24b46627a48e 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 b9de0fbaa081d682dd2c68e13303bbe20b827984..b202dd3b05839d5b355937fb250d3a3286100ce7 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 545fcc8c2cfa23e9402005b63e8f19068647ea25..0a5d0f97edf78ae53a1d15226be5b9612d1e2a0a 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