1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/* 3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc. 4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * 5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be 6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file. 7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */ 8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkListWidget.h" 11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 12e565de4fad5598890124daadf385930043269415chudy@google.comvoid SkListWidget::paint (QPainter *painter, 1357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org const QStyleOptionViewItem &option, 1457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org const QModelIndex &index) const { 15e565de4fad5598890124daadf385930043269415chudy@google.com /* We adjust the initial position of the list item so that 16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * we don't have overlapping top and bottom borders of concurrent 17e565de4fad5598890124daadf385930043269415chudy@google.com * widget items. */ 18902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QRect r = option.rect; 19902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com r.adjust(-1,-1,1,0); 20902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 21902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine); 22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine); 23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine); 24902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 25e565de4fad5598890124daadf385930043269415chudy@google.com // If selected 26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com if(option.state & QStyle::State_Selected){ 27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top()); 28902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247)); 29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183)); 30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174)); 31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->setBrush(gradientSelected); 32902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawRect(r); 33902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 34902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->setPen(linePen); 35902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topLeft(),r.topRight()); 36902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topRight(),r.bottomRight()); 37902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.bottomLeft(),r.bottomRight()); 38902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topLeft(),r.bottomLeft()); 39902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 40902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->setPen(fontMarkedPen); 41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 42902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } else { 43e565de4fad5598890124daadf385930043269415chudy@google.com // Alternating background 44e565de4fad5598890124daadf385930043269415chudy@google.com painter->setBrush((index.row() % 2) ? Qt::white : QColor(252,252,252)); 45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawRect(r); 46902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->setPen(linePen); 48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topLeft(),r.topRight()); 49902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topRight(),r.bottomRight()); 50902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.bottomLeft(),r.bottomRight()); 51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->drawLine(r.topLeft(),r.bottomLeft()); 52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com painter->setPen(fontPen); 54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 56e565de4fad5598890124daadf385930043269415chudy@google.com QIcon breakpointIcon = 57e565de4fad5598890124daadf385930043269415chudy@google.com QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole))); 58e565de4fad5598890124daadf385930043269415chudy@google.com QIcon deleteIcon = 597e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com QIcon(qvariant_cast<QPixmap>(index.data(Qt::UserRole + 2))); 6030d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com int indent = index.data(Qt::UserRole + 3).toInt(); 61e565de4fad5598890124daadf385930043269415chudy@google.com 62e565de4fad5598890124daadf385930043269415chudy@google.com QString drawCommandText = index.data(Qt::DisplayRole).toString(); 6357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org QString drawCommandNumber; 6457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org if (kIndex_IndexStyle == fIndexStyle) { 6557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org drawCommandNumber = index.data(Qt::UserRole + 1).toString(); 6657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org } else { 6757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org drawCommandNumber = index.data(Qt::UserRole + 5).toString(); 6857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org } 69d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com float time = index.data(Qt::UserRole + 4).toFloat(); 70d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com QString drawTime; 71e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com drawTime.setNum(time, 'f', 2); 7220beb481ec72b9723c63f9ed5480adad0ff5a9a0robertphillips@google.com drawTime += "%"; 73e565de4fad5598890124daadf385930043269415chudy@google.com 74e565de4fad5598890124daadf385930043269415chudy@google.com /* option.rect is a struct that Qt uses as a target to draw into. Following 75e565de4fad5598890124daadf385930043269415chudy@google.com * the format (x1,y1,x2,y2) x1 and y1 represent where the painter can start 76e565de4fad5598890124daadf385930043269415chudy@google.com * drawing. x2 and y2 represent where the drawing area has to terminate 77e565de4fad5598890124daadf385930043269415chudy@google.com * counting from the bottom right corner of each list item styled with this 78e565de4fad5598890124daadf385930043269415chudy@google.com * widget. A (x1,y1,0,0) rect would mean that the item being drawn would 79e565de4fad5598890124daadf385930043269415chudy@google.com * be pushed down into that bottom corner. Negative values in the x2,y2 80e565de4fad5598890124daadf385930043269415chudy@google.com * spot act as a margin for the bottom and right sides. Positive values in 81e565de4fad5598890124daadf385930043269415chudy@google.com * x1,y1 act as a margin for the top and left. The target area will not 82e565de4fad5598890124daadf385930043269415chudy@google.com * affect size of text but will scale icons. */ 8330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com static const int kImageSpace = 35; 84e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com static const int kCommandNumberSpace = 33; 85d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com static const int kTimeSpace = 30; 86e565de4fad5598890124daadf385930043269415chudy@google.com 87e565de4fad5598890124daadf385930043269415chudy@google.com // Breakpoint Icon 88902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com r = option.rect.adjusted(5, 10, -10, -10); 89e565de4fad5598890124daadf385930043269415chudy@google.com breakpointIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft); 90e565de4fad5598890124daadf385930043269415chudy@google.com 91e565de4fad5598890124daadf385930043269415chudy@google.com // Delete Icon 92e565de4fad5598890124daadf385930043269415chudy@google.com r = option.rect.adjusted(19, 10, -10, -10); 93e565de4fad5598890124daadf385930043269415chudy@google.com deleteIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft); 94902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 95e565de4fad5598890124daadf385930043269415chudy@google.com // Draw Command 96d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com if (time >= 0.0) { 97d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+kTimeSpace+indent, 0, -10, -7); 98d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com } else { 99d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com // don't need time offset 100d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+indent, 0, -10, -7); 101d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com } 102e565de4fad5598890124daadf385930043269415chudy@google.com painter->drawText(r.left(), r.top(), r.width(), r.height(), 10330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com Qt::AlignBottom|Qt::AlignLeft, drawCommandText, &r); 104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 105e565de4fad5598890124daadf385930043269415chudy@google.com // Draw Command Number 10630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com r = option.rect.adjusted(kImageSpace, 0, -10, -7); 107e565de4fad5598890124daadf385930043269415chudy@google.com painter->drawText(r.left(), r.top(), r.width(), r.height(), 10857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org Qt::AlignBottom|Qt::AlignLeft, drawCommandNumber, &r); 109d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com 110d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com if (time >= 0.0) { 111d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com // Draw time 112d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com r = option.rect.adjusted(kImageSpace+kCommandNumberSpace, 0, -10, -7); 113d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com painter->drawText(r.left(), r.top(), r.width(), r.height(), 11457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org Qt::AlignBottom|Qt::AlignLeft, drawTime, &r); 115d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com } 116902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 11857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgQSize SkListWidget::sizeHint (const QStyleOptionViewItem& option, 11957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org const QModelIndex& index) const{ 120902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com return QSize(200, 30); 121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 122