OSDN Git Service

Ver0.21
[gefu/Gefu.git] / thumbnaildelegate.cpp
1 #include "foldermodel.h"
2 #include "thumbnaildelegate.h"
3
4 #include <QApplication>
5 #include <QDebug>
6 #include <QPainter>
7 #include <QStylePainter>
8
9 ThumbnailDelegate::ThumbnailDelegate(QObject *parent) :
10     QStyledItemDelegate(parent)
11 {
12 }
13
14 void ThumbnailDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
15 {
16     const FolderModel *model = static_cast<const FolderModel*>(index.model());
17     bool checked = model->data(index, Qt::CheckStateRole).toInt() == Qt::Checked;
18
19     // マーク
20     if (checked) {
21         painter->fillRect(option.rect, model->data(index, Qt::BackgroundRole).value<QBrush>());
22     }
23     // ハイライト
24     if (option.state & QStyle::State_Selected) {
25         painter->fillRect(option.rect, option.palette.highlight());
26     }
27
28     // ファイル名
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);
38
39     // チェックボックス
40     if (model->flags(index) & Qt::ItemIsUserCheckable) {
41         QStyleOptionButton optBtn;
42         optBtn.rect = option.rect;
43         optBtn.state = option.state;
44         if (checked)
45             optBtn.state |= QStyle::State_On;
46         qApp->style()->drawControl(QStyle::CE_CheckBox, &optBtn, painter);
47     }
48
49     // アイコンまたは画像
50     QSize size(option.rect.size());
51     size -= padding;
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,
55                         pixmap);
56
57 }
58
59 QSize ThumbnailDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
60 {
61     Q_UNUSED(option);
62
63     const FolderModel *model = static_cast<const FolderModel*>(index.model());
64     int pointSize = model->data(index, Qt::FontRole).value<QFont>().pointSize();
65
66     return QSize(pointSize * 10, pointSize * 10 * 3 / 4) * m_scaleFactor;
67 }