From d8def1836287839db812299bbd266020922bed76 Mon Sep 17 00:00:00 2001 From: con Date: Tue, 9 Feb 2010 19:05:15 +0100 Subject: [PATCH] Give targets a tool tip property. Use that for showing details about connected Symbian devices. Also update the icon with an (not-)connected overlay icon. Graphics design pending. --- src/plugins/coreplugin/coreconstants.h | 2 + src/plugins/coreplugin/fancyactionbar.cpp | 3 +- .../miniprojecttargetselector.cpp | 40 ++++++++-- .../miniprojecttargetselector.h | 1 + src/plugins/projectexplorer/target.cpp | 11 +++ src/plugins/projectexplorer/target.h | 4 + .../qt4projectmanager/images/connected.png | Bin 0 -> 151 bytes .../qt4projectmanager/images/notconnected.png | Bin 0 -> 173 bytes .../qt-s60/s60devicerunconfiguration.cpp | 6 +- .../qt-s60/s60devicerunconfiguration.h | 3 +- .../qt4projectmanager/qt4projectmanager.qrc | 2 + src/plugins/qt4projectmanager/qt4target.cpp | 74 ++++++++++++++---- src/plugins/qt4projectmanager/qt4target.h | 5 +- 13 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 src/plugins/qt4projectmanager/images/connected.png create mode 100644 src/plugins/qt4projectmanager/images/notconnected.png diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index 9c4ac9d1e6c..0b95a671a83 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -227,6 +227,8 @@ const char * const SETTINGS_CATEGORY_CORE = "A.Core"; const char * const SETTINGS_TR_CATEGORY_CORE = QT_TRANSLATE_NOOP("Core", "Environment"); const char * const SETTINGS_ID_ENVIRONMENT = "A.General"; +const int TARGET_ICON_SIZE = 32; + } // namespace Constants } // namespace Core diff --git a/src/plugins/coreplugin/fancyactionbar.cpp b/src/plugins/coreplugin/fancyactionbar.cpp index 807ddf2c48e..4643ff3d554 100644 --- a/src/plugins/coreplugin/fancyactionbar.cpp +++ b/src/plugins/coreplugin/fancyactionbar.cpp @@ -28,6 +28,7 @@ **************************************************************************/ #include "fancyactionbar.h" +#include "coreconstants.h" #include @@ -98,7 +99,7 @@ void FancyToolButton::paintEvent(QPaintEvent *event) QRect drawRect = rect(); qDrawBorderPixmap(&painter, drawRect, margins, borderPixmap); - QPixmap pix = icon().pixmap(32, 32, isEnabled() ? QIcon::Normal : QIcon::Disabled); + QPixmap pix = icon().pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE, isEnabled() ? QIcon::Normal : QIcon::Disabled); QPoint center = rect().center(); QSizeF halfPixSize = pix.size()/2.0; diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index 0bc8eb17a09..23585ef7c2f 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include @@ -135,8 +137,7 @@ MiniTargetWidget::MiniTargetWidget(Target *target, QWidget *parent) : m_targetName = new QLabel(m_target->displayName()); m_targetName->setObjectName(QLatin1String("target")); m_targetIcon = new QLabel(); - m_targetIcon->setPixmap(m_target->icon().pixmap(48, 48)); - + updateIcon(); if (hasBuildConfiguration()) { Q_FOREACH(BuildConfiguration* bc, m_target->buildConfigurations()) addBuildConfiguration(bc); @@ -163,6 +164,7 @@ MiniTargetWidget::MiniTargetWidget(Target *target, QWidget *parent) : connect(m_target, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), SLOT(setActiveRunConfiguration())); + connect(m_target, SIGNAL(iconChanged()), this, SLOT(updateIcon())); QHBoxLayout *buildHelperLayout = 0; if (hasBuildConfiguration()) { @@ -193,6 +195,24 @@ MiniTargetWidget::MiniTargetWidget(Target *target, QWidget *parent) : gridLayout->addLayout(formLayout, 1, 0); } +void MiniTargetWidget::updateIcon() +{ + QPixmap targetPixmap; + QPixmap targetPixmapCandidate = m_target->icon().pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE); + QSize actualSize = m_target->icon().actualSize(QSize(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE)); + if (actualSize == QSize(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE)) { + targetPixmap = targetPixmapCandidate; + } else { + targetPixmap = QPixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE); + targetPixmap.fill(Qt::transparent); + QPainter painter(&targetPixmap); + painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE - actualSize.width())/2, + (Core::Constants::TARGET_ICON_SIZE - actualSize.height())/2, + targetPixmapCandidate); + } + m_targetIcon->setPixmap(targetPixmap); +} + ProjectExplorer::Target *MiniTargetWidget::target() const { return m_target; @@ -210,6 +230,7 @@ void MiniTargetWidget::setActiveRunConfiguration(int index) { m_target->setActiveRunConfiguration( m_runComboBox->itemData(index).value()); + updateIcon(); emit changed(); } void MiniTargetWidget::setActiveBuildConfiguration() @@ -379,6 +400,8 @@ void MiniProjectTargetSelector::addTarget(ProjectExplorer::Target *target, bool if (index < 0) return; + connect(target, SIGNAL(toolTipChanged()), this, SLOT(updateAction())); + connect(target, SIGNAL(iconChanged()), this, SLOT(updateAction())); ProjectListWidget *plw = qobject_cast(m_widgetStack->widget(index)); QListWidgetItem *lwi = new QListWidgetItem(); @@ -426,6 +449,8 @@ void MiniProjectTargetSelector::updateAction() QString projectName = tr("No Project"); QString targetName; + QString targetToolTipText; + QIcon targetIcon; QString buildConfig; QString runConfig; @@ -443,18 +468,21 @@ void MiniProjectTargetSelector::updateAction() if (RunConfiguration *rc = target->activeRunConfiguration()) { runConfig = rc->displayName(); } + targetToolTipText = target->toolTip(); + targetIcon = target->icon(); } } m_projectAction->setProperty("heading", projectName); m_projectAction->setProperty("subtitle", buildConfig); - if (project && project->activeTarget()) - m_projectAction->setIcon(project->activeTarget()->icon()); - QString toolTip = tr("Project: %1
%2%3Run: %4"); + m_projectAction->setIcon(targetIcon); + QString toolTip = tr("Project: %1
%2%3Run: %4%5"); QString targetTip = targetName.isEmpty() ? QLatin1String("") : tr("Target: %1
").arg(targetName); QString buildTip = buildConfig.isEmpty() ? QLatin1String("") : tr("Build: %2
").arg(buildConfig); - m_projectAction->setToolTip(toolTip.arg(projectName, targetTip, buildTip, runConfig)); + QString targetToolTip = targetToolTipText.isEmpty() ? QLatin1String("") + : tr("
%1").arg(targetToolTipText); + m_projectAction->setToolTip(toolTip.arg(projectName, targetTip, buildTip, runConfig, targetToolTip)); } int MiniProjectTargetSelector::indexFor(ProjectExplorer::Project *project) const diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.h b/src/plugins/projectexplorer/miniprojecttargetselector.h index 7590ad644e4..c78906240d3 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.h +++ b/src/plugins/projectexplorer/miniprojecttargetselector.h @@ -91,6 +91,7 @@ private slots: void setActiveRunConfiguration(); void updateDisplayName(); + void updateIcon(); signals: void changed(); diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index c9f0c41b957..f6a1f8e6d8c 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -214,6 +214,17 @@ void Target::setIcon(QIcon icon) emit iconChanged(); } +QString Target::toolTip() const +{ + return m_toolTip; +} + +void Target::setToolTip(const QString &text) +{ + m_toolTip = text; + emit toolTipChanged(); +} + QVariantMap Target::toMap() const { const QList bcs = buildConfigurations(); diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h index 09f00f4f894..e06eae82266 100644 --- a/src/plugins/projectexplorer/target.h +++ b/src/plugins/projectexplorer/target.h @@ -82,12 +82,15 @@ public: QIcon icon() const; void setIcon(QIcon icon); + QString toolTip() const; + void setToolTip(const QString &text); virtual QVariantMap toMap() const; signals: void targetEnabled(bool); void iconChanged(); + void toolTipChanged(); // TODO clean up signal names // might be better to also have aboutToRemove signals @@ -119,6 +122,7 @@ private: Project *m_project; bool m_isEnabled; QIcon m_icon; + QString m_toolTip; QList m_buildConfigurations; BuildConfiguration *m_activeBuildConfiguration; diff --git a/src/plugins/qt4projectmanager/images/connected.png b/src/plugins/qt4projectmanager/images/connected.png new file mode 100644 index 0000000000000000000000000000000000000000..fa20718cd02da88f1a35af306bfcf4348a4b2a5d GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp@3=9k$9Bd2>3`%OH=NT9n;yhg(LnI_~dk=CRFyLXH zJIQ_dYrfbuv6{D+*o)foY}%m6;l12~p=E!C*`ufhRmc8v%>GyxaJoEg=@rJ7JM;4d zUb*coTG?!!|H#gr?N@Zw%2QLlrBr-M_fN4pz@1XJ^{f5G`SGue85kHCJYD@<);T3K F0RVr~HbMXZ literal 0 HcmV?d00001 diff --git a/src/plugins/qt4projectmanager/images/notconnected.png b/src/plugins/qt4projectmanager/images/notconnected.png new file mode 100644 index 0000000000000000000000000000000000000000..5a57aa88cc1800a38b8105860e8b93aec7a649a6 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp@3=9k$9Bd2>3`%OH=NT9nN<3X0LnI{U23Ybn81NL| z?wr1H!={hUN7`Cu{A7-Q*|w5<;;qibL9Z+d`B+spT7F>IQK911qG`lq-TJ6YTYv73 ze>u|xPKBh@-Q1uhw9!eJ^X&F#PRm6D_Uz0z%AQ>HHGGkD@images/qt_qrc.png images/sources.png images/unknown.png + images/connected.png + images/notconnected.png diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp index 48eab94ecbe..a83d01eadbf 100644 --- a/src/plugins/qt4projectmanager/qt4target.cpp +++ b/src/plugins/qt4projectmanager/qt4target.cpp @@ -40,8 +40,12 @@ #include "qt-s60/s60emulatorrunconfiguration.h" #include +#include +#include #include +#include +#include using namespace ProjectExplorer; using namespace Qt4ProjectManager; @@ -67,13 +71,13 @@ QIcon iconForId(const QString &id) { if (id == QLatin1String(DESKTOP_TARGET_ID)) return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon)); if (id == QLatin1String(S60_EMULATOR_TARGET_ID)) - return QIcon(); + return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon)); if (id == QLatin1String(S60_DEVICE_TARGET_ID)) - return QIcon(); + return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon)); if (id == QLatin1String(MAEMO_EMULATOR_TARGET_ID)) - return QIcon(); + return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon)); if (id == QLatin1String(MAEMO_DEVICE_TARGET_ID)) - return QIcon(); + return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon)); return QIcon(); } @@ -182,9 +186,13 @@ Qt4Target::Qt4Target(Qt4Project *parent, const QString &id) : this, SIGNAL(targetInformationChanged())); connect(this, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)), this, SIGNAL(environmentChanged())); + connect(this, SIGNAL(addedRunConfiguration(ProjectExplorer::RunConfiguration*)), + this, SLOT(onAddedRunConfiguration(ProjectExplorer::RunConfiguration*))); + connect(this, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), + this, SLOT(updateToolTipAndIcon())); setDisplayName(displayNameForId(id)); - setIcon(iconForId(id)); + updateToolTipAndIcon(); } Qt4Target::~Qt4Target() @@ -385,18 +393,54 @@ void Qt4Target::updateQtVersion() setEnabled(project()->supportedTargetIds().contains(id())); } -void Qt4Target::onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) +void Qt4Target::onAddedRunConfiguration(ProjectExplorer::RunConfiguration *rc) { - Q_ASSERT(bc); - Qt4BuildConfiguration *qt4bc(qobject_cast(bc)); - Q_ASSERT(qt4bc); - connect(qt4bc, SIGNAL(targetInformationChanged()), - this, SLOT(changeTargetInformation())); + Q_ASSERT(rc); + S60DeviceRunConfiguration *deviceRc(qobject_cast(rc)); + if (!deviceRc) + return; + connect(deviceRc, SIGNAL(serialPortNameChanged()), + this, SLOT(slotUpdateDeviceInformation())); } -void Qt4Target::changeTargetInformation() +void Qt4Target::slotUpdateDeviceInformation() { - ProjectExplorer::BuildConfiguration *bc(qobject_cast(sender())); - if (bc && bc == activeBuildConfiguration()) - emit targetInformationChanged(); + S60DeviceRunConfiguration *deviceRc(qobject_cast(sender())); + if (deviceRc && deviceRc == activeRunConfiguration()) { + updateToolTipAndIcon(); + } +} + +void Qt4Target::updateToolTipAndIcon() +{ + static const QPixmap connected(":/qt4projectmanager/images/connected.png"); + static const QPixmap notconnected(":/qt4projectmanager/images/notconnected.png"); + S60DeviceRunConfiguration *deviceRc(qobject_cast(activeRunConfiguration())); + if (!deviceRc) { + setToolTip(QString()); + setIcon(iconForId(id())); + } else { + QString friendlyPortName = SymbianUtils::SymbianDeviceManager::instance()->friendlyNameForPort( + deviceRc->serialPortName()); + QPixmap pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE); + pixmap.fill(Qt::transparent); + QPainter painter(&pixmap); + const QIcon &icon = iconForId(id()); + QSize actualSize = icon.actualSize(QSize(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE)); + painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE-actualSize.width())/2, + (Core::Constants::TARGET_ICON_SIZE-actualSize.height())/2, + icon.pixmap(Core::Constants::TARGET_ICON_SIZE)); + + if (!friendlyPortName.isEmpty()) { + // device connected + setToolTip(tr("Device: %1").arg(friendlyPortName)); + painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - connected.width(), + connected.height(), connected); + } else { + setToolTip(tr("Device: Not connected")); + painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - notconnected.width(), + notconnected.height(), notconnected); + } + setIcon(QIcon(pixmap)); + } } diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h index 9b240e8f036..aa91ae50deb 100644 --- a/src/plugins/qt4projectmanager/qt4target.h +++ b/src/plugins/qt4projectmanager/qt4target.h @@ -102,8 +102,9 @@ protected: private slots: void updateQtVersion(); - void onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc); - void changeTargetInformation(); + void onAddedRunConfiguration(ProjectExplorer::RunConfiguration *rc); + void slotUpdateDeviceInformation(); + void updateToolTipAndIcon(); private: Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;