e099bc403c
https://codereview.appspot.com/6842062/ git-svn-id: http://skia.googlecode.com/svn/trunk@6480 2bbb7eff-a529-9590-31e7-b0007b416f81
120 lines
4.5 KiB
C++
120 lines
4.5 KiB
C++
|
|
/*
|
|
* Copyright 2012 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
|
|
#include "SkListWidget.h"
|
|
|
|
SkListWidget::SkListWidget(QObject *parent) {}
|
|
|
|
SkListWidget::~SkListWidget() {}
|
|
|
|
void SkListWidget::paint (QPainter *painter,
|
|
const QStyleOptionViewItem &option,
|
|
const QModelIndex &index) const {
|
|
/* We adjust the initial position of the list item so that
|
|
* we don't have overlapping top and bottom borders of concurrent
|
|
* widget items. */
|
|
QRect r = option.rect;
|
|
r.adjust(-1,-1,1,0);
|
|
|
|
QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine);
|
|
QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine);
|
|
QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine);
|
|
|
|
// If selected
|
|
if(option.state & QStyle::State_Selected){
|
|
QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top());
|
|
gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247));
|
|
gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183));
|
|
gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174));
|
|
painter->setBrush(gradientSelected);
|
|
painter->drawRect(r);
|
|
|
|
painter->setPen(linePen);
|
|
painter->drawLine(r.topLeft(),r.topRight());
|
|
painter->drawLine(r.topRight(),r.bottomRight());
|
|
painter->drawLine(r.bottomLeft(),r.bottomRight());
|
|
painter->drawLine(r.topLeft(),r.bottomLeft());
|
|
|
|
painter->setPen(fontMarkedPen);
|
|
|
|
} else {
|
|
// Alternating background
|
|
painter->setBrush((index.row() % 2) ? Qt::white : QColor(252,252,252));
|
|
painter->drawRect(r);
|
|
|
|
painter->setPen(linePen);
|
|
painter->drawLine(r.topLeft(),r.topRight());
|
|
painter->drawLine(r.topRight(),r.bottomRight());
|
|
painter->drawLine(r.bottomLeft(),r.bottomRight());
|
|
painter->drawLine(r.topLeft(),r.bottomLeft());
|
|
|
|
painter->setPen(fontPen);
|
|
}
|
|
|
|
QIcon breakpointIcon =
|
|
QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole)));
|
|
QIcon deleteIcon =
|
|
QIcon(qvariant_cast<QPixmap>(index.data(Qt::UserRole + 2)));
|
|
int indent = index.data(Qt::UserRole + 3).toInt();
|
|
|
|
QString drawCommandText = index.data(Qt::DisplayRole).toString();
|
|
QString drawCommandNumber = index.data(Qt::UserRole + 1).toString();
|
|
float time = index.data(Qt::UserRole + 4).toFloat();
|
|
QString drawTime;
|
|
drawTime.setNum(time, 'f', 2);
|
|
|
|
/* option.rect is a struct that Qt uses as a target to draw into. Following
|
|
* the format (x1,y1,x2,y2) x1 and y1 represent where the painter can start
|
|
* drawing. x2 and y2 represent where the drawing area has to terminate
|
|
* counting from the bottom right corner of each list item styled with this
|
|
* widget. A (x1,y1,0,0) rect would mean that the item being drawn would
|
|
* be pushed down into that bottom corner. Negative values in the x2,y2
|
|
* spot act as a margin for the bottom and right sides. Positive values in
|
|
* x1,y1 act as a margin for the top and left. The target area will not
|
|
* affect size of text but will scale icons. */
|
|
static const int kImageSpace = 35;
|
|
static const int kCommandNumberSpace = 33;
|
|
static const int kTimeSpace = 30;
|
|
|
|
// Breakpoint Icon
|
|
r = option.rect.adjusted(5, 10, -10, -10);
|
|
breakpointIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
|
|
|
|
// Delete Icon
|
|
r = option.rect.adjusted(19, 10, -10, -10);
|
|
deleteIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
|
|
|
|
// Draw Command
|
|
if (time >= 0.0) {
|
|
r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+kTimeSpace+indent, 0, -10, -7);
|
|
} else {
|
|
// don't need time offset
|
|
r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+indent, 0, -10, -7);
|
|
}
|
|
painter->drawText(r.left(), r.top(), r.width(), r.height(),
|
|
Qt::AlignBottom|Qt::AlignLeft, drawCommandText, &r);
|
|
|
|
// Draw Command Number
|
|
r = option.rect.adjusted(kImageSpace, 0, -10, -7);
|
|
painter->drawText(r.left(), r.top(), r.width(), r.height(),
|
|
Qt::AlignBottom|Qt::AlignLeft, drawCommandNumber, &r);
|
|
|
|
if (time >= 0.0) {
|
|
// Draw time
|
|
r = option.rect.adjusted(kImageSpace+kCommandNumberSpace, 0, -10, -7);
|
|
painter->drawText(r.left(), r.top(), r.width(), r.height(),
|
|
Qt::AlignBottom|Qt::AlignLeft, drawTime, &r);
|
|
}
|
|
}
|
|
|
|
QSize SkListWidget::sizeHint ( const QStyleOptionViewItem & option,
|
|
const QModelIndex & index ) const{
|
|
return QSize(200, 30);
|
|
}
|