#include "SkListWidget.h"
void SkListWidget::paint (QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const {
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(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 {
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;
if (kIndex_IndexStyle == fIndexStyle) {
drawCommandNumber = index.data(Qt::UserRole + 1).toString();
} else {
drawCommandNumber = index.data(Qt::UserRole + 5).toString();
}
float time = index.data(Qt::UserRole + 4).toFloat();
QString drawTime;
drawTime.setNum(time, 'f', 2);
drawTime += "%";
static const int kImageSpace = 35;
static const int kCommandNumberSpace = 33;
static const int kTimeSpace = 30;
r = option.rect.adjusted(5, 10, -10, -10);
breakpointIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
r = option.rect.adjusted(19, 10, -10, -10);
deleteIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
if (time >= 0.0) {
r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+kTimeSpace+indent, 0, -10, -7);
} else {
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);
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) {
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);
}