Skip to content

Commit 66d12a2

Browse files
committed
added custom delegate for listview (WIP) #34
1 parent 3b92b5d commit 66d12a2

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

fm/src/actiontriggers.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,11 @@ void MainWindow::toggleIcons() {
743743
if (iconAct->isChecked()) {
744744
currentView = 1;
745745
list->setViewMode(QListView::IconMode);
746-
list->setGridSize(QSize(zoom + 32, zoom + 32));
746+
int padding = 10;
747+
if (zoom<48) { padding = 20; }
748+
if (zoom<32) { padding = 40; }
749+
if (zoom<24) { padding = 50; }
750+
list->setGridSize(QSize(zoom*2+padding, zoom*2+padding));
747751
list->setIconSize(QSize(zoom, zoom));
748752
list->setFlow(QListView::LeftToRight);
749753

fm/src/mainwindow.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ MainWindow::MainWindow()
176176
list->setWrapping(true);
177177
list->setWordWrap(true);
178178
list->setModel(modelView);
179+
list->setItemDelegate(new Delegate());
180+
list->setTextElideMode(Qt::ElideNone);
179181
listSelectionModel = list->selectionModel();
180182

181183
detailTree->setRootIsDecorated(false);

fm/src/mainwindow.h

+35
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,41 @@ class QAction;
6565
class QMenu;
6666
QT_END_NAMESPACE
6767

68+
69+
#include <QItemDelegate>
70+
71+
class Delegate : public QItemDelegate
72+
{
73+
public:
74+
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
75+
{
76+
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
77+
QSize iconsize = icon.actualSize(option.decorationSize);
78+
QRect item = option.rect;
79+
QRect txtRect(item.left(), item.top()+(iconsize.height()/2), item.width()-10, item.height()-10);
80+
QSize txtsize = option.fontMetrics.boundingRect(txtRect, Qt::AlignCenter|Qt::TextWrapAnywhere, index.data().toString()).size();
81+
return QSize(txtsize.width(),txtsize.height()+iconsize.height());
82+
}
83+
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
84+
{
85+
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
86+
QSize iconsize = icon.actualSize(option.decorationSize);
87+
QRect item = option.rect;
88+
QRect iconRect(item.left()+(item.width()/2)-(iconsize.width()/2), item.top()+3, iconsize.width(), iconsize.height());
89+
QRect txtRect(item.left(), item.top()+(iconsize.height()/2)+5, item.width(), item.height());
90+
91+
if (option.state & QStyle::State_Selected) {
92+
painter->fillRect(option.rect, option.palette.highlight());
93+
painter->setPen(option.palette.highlightedText().color());
94+
} else {
95+
painter->setPen(option.palette.text().color());
96+
}
97+
98+
painter->drawPixmap(iconRect, icon.pixmap(iconsize.width(),iconsize.height()));
99+
painter->drawText(txtRect, Qt::AlignCenter|Qt::TextWrapAnywhere, index.data().toString());
100+
}
101+
};
102+
68103
//---------------------------------------------------------------------------------
69104

70105
/**

0 commit comments

Comments
 (0)