diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-04-18 13:39:05 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-04-19 13:21:45 +0000 |
commit | 460fdc02e058100baabdc5cdb658bbb9790a46ca (patch) | |
tree | 8a20a5e5be70ede06ccdf9753dd8ec9540175692 /src/plugins/projectexplorer/targetsettingspanel.cpp | |
parent | da18fc1f50e07d4bec6f32c0ccf5f08ea10fb634 (diff) |
ProjectExplorer: Report project-specific kit errors/warnings
Report project-specific warnings about the kit used in Project Mode.
E.g. a python project should not complain about missing toolchains,
while a qmake project should.
Change-Id: I5ce6742683cdeffc7ff3f1a3e8f0b89aee9aa0b4
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/targetsettingspanel.cpp')
-rw-r--r-- | src/plugins/projectexplorer/targetsettingspanel.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index c98e670eae..b14d574e85 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -40,6 +40,7 @@ #include "session.h" #include "target.h" #include "targetsetuppage.h" +#include "task.h" #include <app/app_version.h> @@ -282,9 +283,12 @@ class TargetItem : public TypedTreeItem<TreeItem, TargetGroupItem> public: enum { DefaultPage = 0 }; // Build page. - TargetItem(Project *project, Id kitId) - : m_project(project), m_kitId(kitId) + TargetItem(Project *project, Id kitId, const QList<Task> &issues) + : m_project(project), m_kitId(kitId), m_kitIssues(issues) { + m_kitWarningForProject = containsType(m_kitIssues, Task::TaskType::Warning); + m_kitErrorsForProject = containsType(m_kitIssues, Task::TaskType::Error); + updateSubItems(); } @@ -298,7 +302,8 @@ public: Qt::ItemFlags flags(int column) const override { Q_UNUSED(column) - return Qt::ItemFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + return m_kitErrorsForProject ? Qt::ItemFlags(0) + : Qt::ItemFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); } QVariant data(int column, int role) const override @@ -313,11 +318,11 @@ public: case Qt::DecorationRole: { const Kit *k = KitManager::kit(m_kitId); QTC_ASSERT(k, return QVariant()); + if (m_kitErrorsForProject) + return kitIconWithOverlay(*k, IconOverlay::Error); if (!isEnabled()) return kitIconWithOverlay(*k, IconOverlay::Add); - if (!k->isValid()) - return kitIconWithOverlay(*k, IconOverlay::Error); - if (k->hasWarning()) + if (m_kitWarningForProject) return kitIconWithOverlay(*k, IconOverlay::Warning); return k->icon(); } @@ -341,9 +346,12 @@ public: Kit *k = KitManager::kit(m_kitId); QTC_ASSERT(k, return QVariant()); QString toolTip; - if (!isEnabled()) + if (m_kitErrorsForProject) + toolTip = "<h3>" + tr("Kit is unsuited for Project") + "</h3>"; + else if (!isEnabled()) toolTip = "<h3>" + tr("Click to activate:") + "</h3>"; - toolTip += k->toHtml(); + if (!m_kitIssues.isEmpty()) + toolTip += toHtml(m_kitIssues); return toolTip; } @@ -466,12 +474,15 @@ public: } } - bool isEnabled() const { return target() != 0; } + bool isEnabled() const { return target() != nullptr; } public: QPointer<Project> m_project; // Not owned. Id m_kitId; - int m_currentChild = DefaultPage; // Use run page by default. + int m_currentChild = DefaultPage; + bool m_kitErrorsForProject = false; + bool m_kitWarningForProject = false; + QList<Task> m_kitIssues; private: enum class IconOverlay { @@ -526,10 +537,9 @@ public: BuildOrRunItem(Project *project, Id kitId, SubIndex subIndex) : m_project(project), m_kitId(kitId), m_subIndex(subIndex) - { - } + { } - ~BuildOrRunItem() + ~BuildOrRunItem() override { delete m_panel; } @@ -769,7 +779,7 @@ TargetItem *TargetGroupItem::targetItem(Target *target) const Id needle = target->id(); // Unconfigured project have no active target. return findFirstLevelChild([needle](TargetItem *item) { return item->m_kitId == needle; }); } - return 0; + return nullptr; } void TargetGroupItemPrivate::handleRemovedKit(Kit *kit) @@ -786,8 +796,7 @@ void TargetGroupItemPrivate::handleUpdatedKit(Kit *kit) void TargetGroupItemPrivate::handleAddedKit(Kit *kit) { - if (m_project->supportsKit(kit)) - q->appendChild(new TargetItem(m_project, kit->id())); + q->appendChild(new TargetItem(m_project, kit->id(), m_project->projectIssues(kit))); } void TargetItem::updateSubItems() @@ -805,11 +814,9 @@ void TargetGroupItemPrivate::rebuildContents() { q->removeChildren(); - const QList<Kit *> kits = KitManager::sortKits(KitManager::kits([this](const Kit *kit) { - return m_project->supportsKit(const_cast<Kit *>(kit)); - })); + const QList<Kit *> kits = KitManager::sortKits(KitManager::kits()); for (Kit *kit : kits) - q->appendChild(new TargetItem(m_project, kit->id())); + q->appendChild(new TargetItem(m_project, kit->id(), m_project->projectIssues(kit))); if (q->parent()) q->parent()->setData(0, QVariant::fromValue(static_cast<TreeItem *>(q)), |