diff options
author | hjk <hjk@qt.io> | 2019-06-11 09:37:23 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-12 05:51:34 +0000 |
commit | 504e0140bb99ea80ad06b797d4567c54e9ad26fe (patch) | |
tree | 0e466c0669ce5ab02ae37c9722e4ea48b9c4a338 /src/plugins/projectexplorer | |
parent | 9d39e68173a7d2d19e473e907a519fea42e3784a (diff) | |
download | qt-creator-504e0140bb99ea80ad06b797d4567c54e9ad26fe.tar.gz |
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 <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r-- | src/plugins/projectexplorer/kit.cpp | 15 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kit.h | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitchooser.cpp | 12 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitchooser.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanagerconfigwidget.cpp | 21 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanagerconfigwidget.h | 4 | ||||
-rw-r--r-- | 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 7f58bf4a13..88e2e65ada 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -39,6 +39,7 @@ #include <utils/optional.h> #include <utils/qtcassert.h> #include <utils/stringutils.h> +#include <utils/utilsicons.h> #include <QApplication> #include <QFileInfo> @@ -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 9f0fc91623..8e45911d17 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 b0b779122e..c3a0204fba 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 0f23baa537..046c18f571 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 bcf5c472b8..cdd508b078 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -39,6 +39,7 @@ #include <utils/macroexpander.h> #include <utils/pathchooser.h> #include <utils/qtcassert.h> +#include <utils/utilsicons.h> #include <QAction> #include <QRegularExpression> @@ -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 9eda98582d..cf1b6b44d6 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 937615154f..5f157dcbb3 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(); |