23 #include <QTextLayout>
26 : QItemDelegate(parent)
28 _helpIcon = QPixmap(
":/images/16x16/system-help.png");
33 const QStyleOptionViewItem &option,
34 const QModelIndex &index)
const
36 QItemDelegate::paint(painter, option, index);
39 if (option.state & QStyle::State_Selected)
40 painter->setPen(option.palette.highlightedText().color());
46 QFont font = option.font;
47 QFontMetrics fm = option.fontMetrics;
50 QRect iconRect(option.rect.x(),
52 qMax(fm.width(tstamp.toString()), icon.width()) + 16,
53 option.rect.height());
54 QRect textRect(iconRect.topRight(), option.rect.bottomRight());
57 QPoint center = iconRect.center();
58 int x = center.x() - qRound(icon.width() / 2.0);
59 int y = center.y() - qRound((icon.height() + fm.lineSpacing()) / 2.0);
60 painter->drawPixmap(x, y, icon);
64 y = y + icon.height();
65 painter->drawText(x, y,
75 painter->setFont(font);
79 title = fm.elidedText(title,
81 textRect.width() -
_helpIcon.width() - 24);
83 x = textRect.topRight().x() -
_helpIcon.width() - 8;
87 title = fm.elidedText(title, Qt::ElideRight, textRect.width() - 16);
89 painter->drawText(textRect.x(),
93 Qt::AlignVCenter | Qt::AlignLeft, title);
99 painter->setFont(font);
100 if (option.state & QStyle::State_Selected)
101 text =
layoutText(text, font, textRect.width(), 6).join(
"\n");
103 text =
layoutText(text, font, textRect.width(), 3).join(
"\n");
106 y = textRect.y() + 8 + fm.leading() + fm.lineSpacing();
107 painter->drawText(x, y,
109 textRect.height() - (y - textRect.y()),
110 Qt::AlignTop | Qt::AlignLeft, text);
117 const QModelIndex &index)
const
119 int iconHeight, iconWidth;
120 int textWidth, textHeight;
121 QFontMetrics fontMetrics = option.fontMetrics;
127 iconHeight = icon.height() + fontMetrics.lineSpacing() + 16;
128 iconWidth = qMax(fontMetrics.width(tstamp.toString()), icon.width()) + 16;
129 textWidth = option.rect.width() - iconWidth;
131 if (option.state & QStyle::State_Selected)
132 layoutText(text, option.font, textWidth, 6, &textHeight);
134 layoutText(text, option.font, textWidth, 3, &textHeight);
135 textHeight += 8 + fontMetrics.leading() + fontMetrics.lineSpacing();
137 return QSize(option.rect.width(), qMax(iconHeight, textHeight));
147 QTextLayout textLayout(text, font);
148 QFontMetrics fontMetrics(font);
152 textLayout.beginLayout();
153 while (lines.size() < maxLines) {
154 QTextLine line = textLayout.createLine();
155 if (! line.isValid())
157 if (maxLines <= 0 || lines.size() < maxLines-1) {
159 line.setLineWidth(maxLineWidth);
160 lines.append(text.mid(line.textStart(), line.textLength()));
165 line.setLineWidth(2 * maxLineWidth);
166 lines.append(fontMetrics.elidedText(text.mid(line.textStart()),
170 height += fontMetrics.leading() + line.height();
172 textLayout.endLayout();
175 *textHeight = qRound(height);
StatusEventItemDelegate(QObject *parent=0)
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
static QStringList layoutText(const QString &text, const QFont &fontMetrics, int maxLineWidth, int maxLines=-1, int *textHeight=0)