1 #include "foldermodel.h"
2 #include "thumbnaildelegate.h"
4 #include <QApplication>
7 #include <QStylePainter>
9 ThumbnailDelegate::ThumbnailDelegate(QObject *parent) :
10 QStyledItemDelegate(parent)
14 void ThumbnailDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
16 const FolderModel *model = static_cast<const FolderModel*>(index.model());
17 bool checked = model->data(index, Qt::CheckStateRole).toInt() == Qt::Checked;
21 painter->fillRect(option.rect, model->data(index, Qt::BackgroundRole).value<QBrush>());
24 if (option.state & QStyle::State_Selected) {
25 painter->fillRect(option.rect, option.palette.highlight());
29 QFont font = model->data(index, Qt::FontRole).value<QFont>();
30 QFontMetrics fm(font);
31 QSize padding(20, fm.height());
32 QRect rc(option.rect);
33 rc.setLeft(rc.left() + padding.width());
34 QString name = fm.elidedText(model->fileName(index), Qt::ElideMiddle, rc.width());
35 painter->setFont(font);
36 painter->setPen(model->data(index, Qt::ForegroundRole).value<QBrush>().color());
37 painter->drawText(rc, name, Qt::AlignCenter | Qt::AlignBottom);
40 if (model->flags(index) & Qt::ItemIsUserCheckable) {
41 QStyleOptionButton optBtn;
42 optBtn.rect = option.rect;
43 optBtn.state = option.state;
45 optBtn.state |= QStyle::State_On;
46 qApp->style()->drawControl(QStyle::CE_CheckBox, &optBtn, painter);
50 QSize size(option.rect.size());
52 QPixmap pixmap = model->pixmap(index, size);
53 painter->drawPixmap(padding.width() + option.rect.left() + (size.width() - pixmap.width()) / 2,
54 option.rect.top() + (size.height() - pixmap.height()) / 2,
59 QSize ThumbnailDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
63 const FolderModel *model = static_cast<const FolderModel*>(index.model());
64 int pointSize = model->data(index, Qt::FontRole).value<QFont>().pointSize();
66 return QSize(pointSize * 10, pointSize * 10 * 3 / 4) * m_scaleFactor;