From 504e0140bb99ea80ad06b797d4567c54e9ad26fe Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 11 Jun 2019 09:37:23 +0200 Subject: [PATCH] ProjectExplorer: Let the KitChooser optionally show icons There are cases in the debugger where it's more convenient or with the current state of Abi matching even needed to use non-matching kits. Still, visual hints are helpful. Change-Id: I66ca89cbd1664f43864873e3b4d81a9c8e1b36fa Reviewed-by: David Schulz --- src/plugins/projectexplorer/kit.cpp | 15 +++++++++++++ src/plugins/projectexplorer/kit.h | 3 ++- src/plugins/projectexplorer/kitchooser.cpp | 12 +++++++++-- src/plugins/projectexplorer/kitchooser.h | 2 ++ .../kitmanagerconfigwidget.cpp | 21 ++++++++----------- .../projectexplorer/kitmanagerconfigwidget.h | 4 +--- src/plugins/projectexplorer/kitmodel.cpp | 10 +-------- 7 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 7f58bf4a13f..88e2e65adaa 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -400,6 +401,20 @@ QIcon Kit::icon() const return d->m_cachedIcon; } +QIcon Kit::displayIcon() const +{ + QIcon result = icon(); + if (hasWarning()) { + static const QIcon warningIcon(Utils::Icons::WARNING.icon()); + result = warningIcon; + } + if (!isValid()) { + static const QIcon errorIcon(Utils::Icons::CRITICAL.icon()); + result = errorIcon; + } + return result; +} + FilePath Kit::iconPath() const { return d->m_iconPath; diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 9f0fc91623b..8e45911d175 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -96,7 +96,8 @@ public: // all other aspects are equal. int weight() const; - QIcon icon() const; + QIcon icon() const; // Raw device icon, independent of warning or error. + QIcon displayIcon() const; // Error or warning or device icon. Utils::FilePath iconPath() const; void setIconPath(const Utils::FilePath &path); void setDeviceTypeForIcon(Core::Id deviceType); diff --git a/src/plugins/projectexplorer/kitchooser.cpp b/src/plugins/projectexplorer/kitchooser.cpp index b0b779122e8..c3a0204fba1 100644 --- a/src/plugins/projectexplorer/kitchooser.cpp +++ b/src/plugins/projectexplorer/kitchooser.cpp @@ -72,6 +72,11 @@ void KitChooser::onManageButtonClicked() Core::ICore::showOptionsDialog(Constants::KITS_SETTINGS_PAGE_ID, this); } +void KitChooser::setShowIcons(bool showIcons) +{ + m_showIcons = showIcons; +} + void KitChooser::onCurrentIndexChanged() { const Id id = Id::fromSetting(m_chooser->currentData()); @@ -127,9 +132,12 @@ void KitChooser::populate() foreach (Kit *kit, KitManager::sortKits(KitManager::kits())) { if (m_kitPredicate(kit)) { m_chooser->addItem(kitText(kit), kit->id().toSetting()); - m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole); + const int pos = m_chooser->count() - 1; + m_chooser->setItemData(pos, kitToolTip(kit), Qt::ToolTipRole); + if (m_showIcons) + m_chooser->setItemData(pos, kit->displayIcon(), Qt::DecorationRole); if (!didActivate && kit->id() == lastKit) { - m_chooser->setCurrentIndex(m_chooser->count() - 1); + m_chooser->setCurrentIndex(pos); didActivate = true; } } diff --git a/src/plugins/projectexplorer/kitchooser.h b/src/plugins/projectexplorer/kitchooser.h index 0f23baa5378..046c18f571f 100644 --- a/src/plugins/projectexplorer/kitchooser.h +++ b/src/plugins/projectexplorer/kitchooser.h @@ -54,6 +54,7 @@ public: Core::Id currentKitId() const; void setKitPredicate(const Kit::Predicate &predicate); + void setShowIcons(bool showIcons); Kit *currentKit() const; bool hasStartupKit() const { return m_hasStartupKit; } @@ -78,6 +79,7 @@ private: QComboBox *m_chooser; QPushButton *m_manageButton; bool m_hasStartupKit = false; + bool m_showIcons = false; }; } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index bcf5c472b89..cdd508b0785 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -155,9 +156,15 @@ QString KitManagerConfigWidget::displayName() const return m_cachedDisplayName; } -QIcon KitManagerConfigWidget::icon() const +QIcon KitManagerConfigWidget::displayIcon() const { - return m_modifiedKit->icon(); + // Special case: Extra warning if there are no errors but name is not unique. + if (m_modifiedKit->isValid() && !m_hasUniqueName) { + static const QIcon warningIcon(Utils::Icons::WARNING.icon()); + return warningIcon; + } + + return m_modifiedKit->displayIcon(); } void KitManagerConfigWidget::apply() @@ -199,16 +206,6 @@ bool KitManagerConfigWidget::isDirty() const || m_isDefaultKit != (KitManager::defaultKit() == m_kit); } -bool KitManagerConfigWidget::isValid() const -{ - return m_modifiedKit->isValid(); -} - -bool KitManagerConfigWidget::hasWarning() const -{ - return m_modifiedKit->hasWarning() || !m_hasUniqueName; -} - QString KitManagerConfigWidget::validityMessage() const { Tasks tmp; diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h index 9eda98582d9..cf1b6b44d6e 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h @@ -52,13 +52,11 @@ public: ~KitManagerConfigWidget() override; QString displayName() const; - QIcon icon() const; + QIcon displayIcon() const; void apply(); void discard(); bool isDirty() const; - bool isValid() const; - bool hasWarning() const; QString validityMessage() const; void addAspectToWorkingCopy(KitAspect *aspect); void makeStickySubWidgetsReadOnly(); diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp index 937615154f2..5f157dcbb37 100644 --- a/src/plugins/projectexplorer/kitmodel.cpp +++ b/src/plugins/projectexplorer/kitmodel.cpp @@ -85,15 +85,7 @@ public: return baseName; } if (role == Qt::DecorationRole) { - if (!widget->isValid()) { - static const QIcon errorIcon(Utils::Icons::CRITICAL.icon()); - return errorIcon; - } - if (widget->hasWarning()) { - static const QIcon warningIcon(Utils::Icons::WARNING.icon()); - return warningIcon; - } - return widget->icon(); + return widget->displayIcon(); } if (role == Qt::ToolTipRole) { return widget->validityMessage();