summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-05-22 16:50:55 +0200
committerTobias Hunger <tobias.hunger@qt.io>2018-05-23 11:21:22 +0000
commit478fda1b76cd6d69014819a422c891ebeb140df1 (patch)
tree0b3ba1f352e7ee13568566f4b780cc9ad39bc24c
parent90d377bee9c35d0b233ff6897896973855851211 (diff)
downloadqt-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.cpp44
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;
}