diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-05-22 16:50:55 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-05-23 11:21:22 +0000 |
commit | 478fda1b76cd6d69014819a422c891ebeb140df1 (patch) | |
tree | 0b3ba1f352e7ee13568566f4b780cc9ad39bc24c | |
parent | 90d377bee9c35d0b233ff6897896973855851211 (diff) | |
download | qt-creator-478fda1b76cd6d69014819a422c891ebeb140df1.tar.gz |
Project: Show warning icon in project tree
Show warning icon in project tree whenever a project reports an
error/warning and report details in the tooltip.
Change-Id: I8b91161b74d5def97bad919bdda28b4ec4637da9
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/plugins/projectexplorer/projectmodels.cpp | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 87b2d8279f..6111928c05 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -30,6 +30,7 @@ #include "projectexplorer.h" #include "projecttree.h" #include "session.h" +#include "target.h" #include <coreplugin/fileiconprovider.h> #include <utils/utilsicons.h> @@ -98,8 +99,11 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const { QVariant result; - if (Node *node = nodeForIndex(index)) { - FolderNode *folderNode = node->asFolderNode(); + if (const Node *node = nodeForIndex(index)) { + const FolderNode *folderNode = node->asFolderNode(); + const ContainerNode *containerNode = node->asContainerNode(); + const Project *project = containerNode ? containerNode->project() : nullptr; + switch (role) { case Qt::DisplayRole: { result = node->displayName(); @@ -110,16 +114,31 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const break; } case Qt::ToolTipRole: { - result = node->tooltip(); + QString tooltip = node->tooltip(); + + if (project) { + if (project->activeTarget()) { + QString projectIssues = toHtml(project->projectIssues(project->activeTarget()->kit())); + if (!projectIssues.isEmpty()) + tooltip += "<p>" + projectIssues; + } else { + tooltip += "<p>" + tr("No Kit is used for this project. " + "Please visit \"Projects\" mode for configuration."); + } + } + result = tooltip; break; } case Qt::DecorationRole: { if (folderNode) { + static QIcon warnIcon = Utils::Icons::WARNING.icon(); static QIcon emptyIcon = Utils::Icons::EMPTY16.icon(); - if (ContainerNode *containerNode = folderNode->asContainerNode()) { - Project *project = containerNode->project(); - if (project && project->isParsing()) + if (project) { + if (project->isParsing()) result = emptyIcon; + else if (!project->activeTarget() + || !project->projectIssues(project->activeTarget()->kit()).isEmpty()) + result = warnIcon; else result = containerNode->rootProjectNode() ? containerNode->rootProjectNode()->icon() : folderNode->icon(); @@ -133,10 +152,8 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const } case Qt::FontRole: { QFont font; - if (Project *project = SessionManager::startupProject()) { - if (node == project->containerNode()) - font.setBold(true); - } + if (project == SessionManager::startupProject()) + font.setBold(true); result = font; break; } @@ -149,13 +166,6 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const break; } case Project::isParsingRole: { - const Project *project = nullptr; - if (node->asContainerNode()) { - WrapperNode *wn = wrapperForNode(node); - project = Utils::findOrDefault(SessionManager::projects(), [this, wn](const Project *p) { - return nodeForProject(p) == wn; - }); - } result = project ? project->isParsing() : false; break; } |