blob: cc94ff8111ea4b3339e4f7f07a9993e333962a32 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#include "SkListWidget.h"
11
12SkListWidget::SkListWidget(QObject *parent) {}
13
14SkListWidget::~SkListWidget() {}
15
chudy@google.come565de42012-07-12 14:15:54 +000016void SkListWidget::paint (QPainter *painter,
17 const QStyleOptionViewItem &option,
18 const QModelIndex &index) const {
19 /* We adjust the initial position of the list item so that
chudy@google.com902ebe52012-06-29 14:21:22 +000020 * we don't have overlapping top and bottom borders of concurrent
chudy@google.come565de42012-07-12 14:15:54 +000021 * widget items. */
chudy@google.com902ebe52012-06-29 14:21:22 +000022 QRect r = option.rect;
23 r.adjust(-1,-1,1,0);
24
25 QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine);
26 QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine);
27 QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine);
28
chudy@google.come565de42012-07-12 14:15:54 +000029 // If selected
chudy@google.com902ebe52012-06-29 14:21:22 +000030 if(option.state & QStyle::State_Selected){
31 QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top());
32 gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247));
33 gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183));
34 gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174));
35 painter->setBrush(gradientSelected);
36 painter->drawRect(r);
37
38 painter->setPen(linePen);
39 painter->drawLine(r.topLeft(),r.topRight());
40 painter->drawLine(r.topRight(),r.bottomRight());
41 painter->drawLine(r.bottomLeft(),r.bottomRight());
42 painter->drawLine(r.topLeft(),r.bottomLeft());
43
44 painter->setPen(fontMarkedPen);
45
46 } else {
chudy@google.come565de42012-07-12 14:15:54 +000047 // Alternating background
48 painter->setBrush((index.row() % 2) ? Qt::white : QColor(252,252,252));
chudy@google.com902ebe52012-06-29 14:21:22 +000049 painter->drawRect(r);
50
51 painter->setPen(linePen);
52 painter->drawLine(r.topLeft(),r.topRight());
53 painter->drawLine(r.topRight(),r.bottomRight());
54 painter->drawLine(r.bottomLeft(),r.bottomRight());
55 painter->drawLine(r.topLeft(),r.bottomLeft());
56
57 painter->setPen(fontPen);
58 }
59
chudy@google.come565de42012-07-12 14:15:54 +000060 QIcon breakpointIcon =
61 QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole)));
62 QIcon deleteIcon =
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000063 QIcon(qvariant_cast<QPixmap>(index.data(Qt::UserRole + 2)));
robertphillips@google.com30d35f22012-11-06 16:45:36 +000064 int indent = index.data(Qt::UserRole + 3).toInt();
chudy@google.com902ebe52012-06-29 14:21:22 +000065
chudy@google.come565de42012-07-12 14:15:54 +000066 QString drawCommandText = index.data(Qt::DisplayRole).toString();
67 QString drawCommandNumber = index.data(Qt::UserRole + 1).toString();
robertphillips@google.comd26c7062012-11-12 20:42:12 +000068 float time = index.data(Qt::UserRole + 4).toFloat();
69 QString drawTime;
robertphillips@google.come099bc42012-11-19 16:26:40 +000070 drawTime.setNum(time, 'f', 2);
robertphillips@google.com20beb482013-03-07 19:32:45 +000071 drawTime += "%";
chudy@google.come565de42012-07-12 14:15:54 +000072
73 /* option.rect is a struct that Qt uses as a target to draw into. Following
74 * the format (x1,y1,x2,y2) x1 and y1 represent where the painter can start
75 * drawing. x2 and y2 represent where the drawing area has to terminate
76 * counting from the bottom right corner of each list item styled with this
77 * widget. A (x1,y1,0,0) rect would mean that the item being drawn would
78 * be pushed down into that bottom corner. Negative values in the x2,y2
79 * spot act as a margin for the bottom and right sides. Positive values in
80 * x1,y1 act as a margin for the top and left. The target area will not
81 * affect size of text but will scale icons. */
robertphillips@google.com30d35f22012-11-06 16:45:36 +000082 static const int kImageSpace = 35;
robertphillips@google.come099bc42012-11-19 16:26:40 +000083 static const int kCommandNumberSpace = 33;
robertphillips@google.comd26c7062012-11-12 20:42:12 +000084 static const int kTimeSpace = 30;
chudy@google.come565de42012-07-12 14:15:54 +000085
86 // Breakpoint Icon
chudy@google.com902ebe52012-06-29 14:21:22 +000087 r = option.rect.adjusted(5, 10, -10, -10);
chudy@google.come565de42012-07-12 14:15:54 +000088 breakpointIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
chudy@google.com902ebe52012-06-29 14:21:22 +000089
chudy@google.come565de42012-07-12 14:15:54 +000090 // Delete Icon
91 r = option.rect.adjusted(19, 10, -10, -10);
92 deleteIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
chudy@google.com902ebe52012-06-29 14:21:22 +000093
chudy@google.come565de42012-07-12 14:15:54 +000094 // Draw Command
robertphillips@google.comd26c7062012-11-12 20:42:12 +000095 if (time >= 0.0) {
96 r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+kTimeSpace+indent, 0, -10, -7);
97 } else {
98 // don't need time offset
99 r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+indent, 0, -10, -7);
100 }
chudy@google.come565de42012-07-12 14:15:54 +0000101 painter->drawText(r.left(), r.top(), r.width(), r.height(),
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000102 Qt::AlignBottom|Qt::AlignLeft, drawCommandText, &r);
chudy@google.come565de42012-07-12 14:15:54 +0000103
104 // Draw Command Number
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000105 r = option.rect.adjusted(kImageSpace, 0, -10, -7);
chudy@google.come565de42012-07-12 14:15:54 +0000106 painter->drawText(r.left(), r.top(), r.width(), r.height(),
107 Qt::AlignBottom|Qt::AlignLeft, drawCommandNumber, &r);
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000108
109 if (time >= 0.0) {
110 // Draw time
111 r = option.rect.adjusted(kImageSpace+kCommandNumberSpace, 0, -10, -7);
112 painter->drawText(r.left(), r.top(), r.width(), r.height(),
113 Qt::AlignBottom|Qt::AlignLeft, drawTime, &r);
114 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000115}
116
chudy@google.come565de42012-07-12 14:15:54 +0000117QSize SkListWidget::sizeHint ( const QStyleOptionViewItem & option,
118 const QModelIndex & index ) const{
chudy@google.com902ebe52012-06-29 14:21:22 +0000119 return QSize(200, 30);
120}