From e3720a4659f92cce739dbd0cefd37e0d7dac8eb3 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Mon, 19 Apr 2010 16:03:28 +0200
Subject: [PATCH] Add method to task to retreive the icon

This makes a task somewhat more useful outside of the
context of a taskwindow.

Reviewed-by: dt
---
 src/plugins/projectexplorer/taskwindow.cpp | 49 ++++++++++++----------
 src/plugins/projectexplorer/taskwindow.h   |  3 ++
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index ab407b0683f..c3dc81dccf1 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -53,11 +53,27 @@
 #include <QtGui/QMenu>
 
 namespace {
-    const int TASK_ICON_SIZE = 16;
-    const int TASK_ICON_MARGIN = 2;
+
+const int TASK_ICON_SIZE = 16;
+const int TASK_ICON_MARGIN = 2;
+
+const QIcon ERROR_ICON(":/projectexplorer/images/compile_error.png");
+const QIcon WARNING_ICON(":/projectexplorer/images/compile_warning.png");
+
 }
 
 namespace ProjectExplorer {
+
+QIcon Task::icon() const
+{
+    if (type == ProjectExplorer::Task::Error)
+        return ERROR_ICON;
+    else if (type == ProjectExplorer::Task::Warning)
+        return WARNING_ICON;
+    else
+        return QIcon();
+}
+
 namespace Internal {
 
 class TaskView : public QListView
@@ -123,9 +139,7 @@ public:
     int sizeOfLineNumber();
     void setFileNotFound(const QModelIndex &index, bool b);
 
-    enum Roles { File = Qt::UserRole, Line, Description, FileNotFound, Type, Category, Task_t };
-
-    QIcon iconFor(Task::TaskType type);
+    enum Roles { File = Qt::UserRole, Line, Description, FileNotFound, Type, Category, Icon, Task_t };
 
 private:
     QHash<QString,QString> m_categories; // category id -> display name
@@ -215,7 +229,6 @@ TaskModel::TaskModel()
     m_maxSizeOfFileName = 0;
     m_errorIcon = QIcon(":/projectexplorer/images/compile_error.png");
     m_warningIcon = QIcon(":/projectexplorer/images/compile_warning.png");
-
 }
 
 void TaskModel::addCategory(const QString &categoryId, const QString &categoryName)
@@ -339,6 +352,8 @@ QVariant TaskModel::data(const QModelIndex &index, int role) const
         return (int)m_tasks.at(index.row()).type;
     } else if (role == TaskModel::Category) {
         return m_tasks.at(index.row()).category;
+    } else if (role == TaskModel::Icon) {
+        return m_tasks.at(index.row()).icon();
     } else if (role == TaskModel::Task_t) {
         return QVariant::fromValue(m_tasks.at(index.row()));
     }
@@ -355,16 +370,6 @@ QString TaskModel::categoryDisplayName(const QString &categoryId) const
     return m_categories.value(categoryId);
 }
 
-QIcon TaskModel::iconFor(Task::TaskType type)
-{
-    if (type == Task::Error)
-        return m_errorIcon;
-    else if (type == Task::Warning)
-        return m_warningIcon;
-    else
-        return QIcon();
-}
-
 int TaskModel::sizeOfFile()
 {
     return m_maxSizeOfFileName;
@@ -431,12 +436,11 @@ bool TaskFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceP
 // TaskWindow
 /////
 
-static QToolButton *createFilterButton(Task::TaskType type,
-                                       const QString &toolTip, TaskModel *model,
+static QToolButton *createFilterButton(QIcon icon, const QString &toolTip,
                                        QObject *receiver, const char *slot)
 {
     QToolButton *button = new QToolButton;
-    button->setIcon(model->iconFor(type));
+    button->setIcon(icon);
     button->setToolTip(toolTip);
     button->setCheckable(true);
     button->setChecked(true);
@@ -491,8 +495,8 @@ TaskWindow::TaskWindow()
     connect(m_listview, SIGNAL(clicked(QModelIndex)),
             this, SLOT(showTaskInFile(QModelIndex)));
 
-    m_filterWarningsButton = createFilterButton(Task::Warning,
-                                                tr("Show Warnings"), m_model,
+    m_filterWarningsButton = createFilterButton(WARNING_ICON,
+                                                tr("Show Warnings"),
                                                 this, SLOT(setShowWarnings(bool)));
 
     m_categoriesMenu = new QMenu;
@@ -865,8 +869,7 @@ void TaskDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
     painter->setPen(textColor);
 
     TaskModel *model = static_cast<TaskFilterModel *>(view->model())->taskModel();
-    Task::TaskType type = Task::TaskType(index.data(TaskModel::Type).toInt());
-    QIcon icon = model->iconFor(type);
+    QIcon icon = index.data(TaskModel::Icon).value<QIcon>();
     painter->drawPixmap(TASK_ICON_MARGIN, opt.rect.top() + TASK_ICON_MARGIN, icon.pixmap(TASK_ICON_SIZE, TASK_ICON_SIZE));
 
     int width = opt.rect.width() - model->sizeOfFile() - model->sizeOfLineNumber() - 12 - 22;
diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h
index be57524fd76..656f9940944 100644
--- a/src/plugins/projectexplorer/taskwindow.h
+++ b/src/plugins/projectexplorer/taskwindow.h
@@ -86,6 +86,9 @@ struct PROJECTEXPLORER_EXPORT Task {
     // doesn't work if you split it up, nor are our parsers
     // anywhere near being that good
     QList<QTextLayout::FormatRange> formats;
+
+    /// Get the icon used to represent this task
+    QIcon icon() const;
 };
 
 class PROJECTEXPLORER_EXPORT TaskWindow : public Core::IOutputPane
-- 
GitLab