22 bool strictSelectionMode {
false};
25 QScroller* scroller {0};
28 QSize requestedItemSize = QSize(56, 56);
35 setSelectionMode(QAbstractItemView::SingleSelection);
36 setContextMenuPolicy(Qt::DefaultContextMenu);
37 setResizeMode(QListView::Adjust);
38 setUniformItemSizes(
true);
41 setViewMode(QListView::IconMode);
42 setGridSize(QSize(56, 56));
43 setIconSize(QSize(56, 56));
44 setResizeMode(QListView::Adjust);
45 setUniformItemSizes(
true);
54 m_d->prev_scrollbar_style = horizontalScrollBar()->styleSheet();
65 auto restoreScrollbar = [&,
this] () {
66 horizontalScrollBar()->setStyleSheet(
m_d->prev_scrollbar_style);
67 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
72 setViewMode(ViewMode::IconMode);
73 setFlow(Flow::LeftToRight);
81 setViewMode(ViewMode::IconMode);
82 setFlow(Flow::LeftToRight);
86 horizontalScrollBar()->setStyleSheet(
"QScrollBar::horizontal {height: 0px;}");
87 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
93 setViewMode(ViewMode::ListMode);
94 setFlow(Flow::TopToBottom);
99 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
100 setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
108 m_d->requestedItemSize = size;
110 switch (
m_d->viewMode) {
122 const int w = width() - horizontalScrollBar()->width();
123 setGridSize(QSize(w, size.height()));
124 setIconSize(QSize(size));
132 m_d->strictSelectionMode = enable;
137 m_d->tip.setFixedToolTipThumbnailSize(size);
142 m_d->tip.setToolTipShouldRenderCheckers(
value);
149 QModelIndex current = currentIndex();
150 if (selectionMode() == SingleSelection
151 &&
m_d->strictSelectionMode
153 && current.row() >= start
154 && current.row() <= end) {
156 selectionModel()->clear();
158 QListView::rowsAboutToBeRemoved(parent, start, end);
164 QListView::selectionChanged(selected, deselected);
166 if (selected.isEmpty()) {
176 QItemSelectionModel::SelectionFlags cmd = QListView::selectionCommand(index, event);
179 if (selectionMode() == SingleSelection
180 &&
m_d->strictSelectionMode
181 && cmd.testFlag(QItemSelectionModel::Deselect)) {
183 cmd = QItemSelectionModel::NoUpdate;
190 QListView::contextMenuEvent(event);
196 if (!model())
return true;
198 if (event->type() == QEvent::ToolTip) {
199 QHelpEvent *he =
static_cast<QHelpEvent *
>(event);
200#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
201 QStyleOptionViewItem option = viewOptions();
203 QStyleOptionViewItem option;
204 initViewItemOption(&option);
206 QModelIndex index = model()->buddy(indexAt(he->pos()));
207 if (index.isValid()) {
208 option.rect = visualRect(index);
209 m_d->tip.showTip(he->pos(), option, index);
215 return QListView::viewportEvent(event);
220 QListView::resizeEvent(event);
222 switch (
m_d->viewMode) {
224 const int height =
event->size().height();
225 setGridSize(QSize(height, height));
226 setIconSize(QSize(height, height));
237 scrollTo(currentIndex(), QAbstractItemView::PositionAtCenter);
float value(const T *src, size_t ch)
void currentResourceClicked(const QModelIndex &)
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
KisResourceItemListView(QWidget *parent=nullptr)
Private(KisResourceItemListView *_q)
void slotScrollerStateChange(QScroller::State state)
bool viewportEvent(QEvent *event) override
QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *event=nullptr) const override
void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override
~KisResourceItemListView() override
void currentResourceChanged(const QModelIndex &)
void setToolTipShouldRenderCheckers(bool value)
void setListViewMode(ListViewMode layout)
QString prev_scrollbar_style
const QScopedPointer< Private > m_d
void setItemSize(QSize size)
setItemSize convenience function which sets both the icon and the grid size to the same value.
void resizeEvent(QResizeEvent *event) override
void contextMenuRequested(const QPoint &)
void setFixedToolTipThumbnailSize(const QSize &size)
void setStrictSelectionMode(bool enable)
setStrictSelectionMode sets additional restrictions on the selection.
void contextMenuEvent(QContextMenuEvent *event) override