20 bool strictSelectionMode {
false};
23 QScroller* scroller {0};
26 QSize requestedItemSize = QSize(56, 56);
33 setSelectionMode(QAbstractItemView::SingleSelection);
34 setContextMenuPolicy(Qt::DefaultContextMenu);
35 setResizeMode(QListView::Adjust);
36 setUniformItemSizes(
true);
39 setViewMode(QListView::IconMode);
40 setGridSize(QSize(56, 56));
41 setIconSize(QSize(56, 56));
42 setResizeMode(QListView::Adjust);
43 setUniformItemSizes(
true);
52 m_d->prev_scrollbar_style = horizontalScrollBar()->styleSheet();
63 auto restoreScrollbar = [&,
this] () {
64 horizontalScrollBar()->setStyleSheet(
m_d->prev_scrollbar_style);
65 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
70 setViewMode(ViewMode::IconMode);
71 setFlow(Flow::LeftToRight);
79 setViewMode(ViewMode::IconMode);
80 setFlow(Flow::LeftToRight);
84 horizontalScrollBar()->setStyleSheet(
"QScrollBar::horizontal {height: 0px;}");
85 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
91 setViewMode(ViewMode::ListMode);
92 setFlow(Flow::TopToBottom);
97 setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
98 setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
106 m_d->requestedItemSize = size;
108 switch (
m_d->viewMode) {
120 const int w = width() - horizontalScrollBar()->width();
121 setGridSize(QSize(w, size.height()));
122 setIconSize(QSize(size));
130 m_d->strictSelectionMode = enable;
135 m_d->tip.setFixedToolTipThumbnailSize(size);
140 m_d->tip.setToolTipShouldRenderCheckers(
value);
147 QModelIndex current = currentIndex();
148 if (selectionMode() == SingleSelection
149 &&
m_d->strictSelectionMode
151 && current.row() >= start
152 && current.row() <= end) {
154 selectionModel()->clear();
156 QListView::rowsAboutToBeRemoved(parent, start, end);
162 QListView::selectionChanged(selected, deselected);
164 if (selected.isEmpty()) {
174 QItemSelectionModel::SelectionFlags cmd = QListView::selectionCommand(index, event);
177 if (selectionMode() == SingleSelection
178 &&
m_d->strictSelectionMode
179 && cmd.testFlag(QItemSelectionModel::Deselect)) {
181 cmd = QItemSelectionModel::NoUpdate;
188 QListView::contextMenuEvent(event);
194 if (!model())
return true;
196 if (event->type() == QEvent::ToolTip) {
197 QHelpEvent *he =
static_cast<QHelpEvent *
>(event);
198#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
199 QStyleOptionViewItem option = viewOptions();
201 QStyleOptionViewItem option;
202 initViewItemOption(&option);
204 QModelIndex index = model()->buddy(indexAt(he->pos()));
205 if (index.isValid()) {
206 option.rect = visualRect(index);
207 m_d->tip.showTip(
this, he->pos(), option, index);
213 return QListView::viewportEvent(event);
218 QListView::resizeEvent(event);
220 switch (
m_d->viewMode) {
222 const int height =
event->size().height();
223 setGridSize(QSize(height, height));
224 setIconSize(QSize(height, height));
231 scrollTo(currentIndex(), QAbstractItemView::PositionAtCenter);
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void currentResourceClicked(const QModelIndex &)
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
KisResourceItemListView(QWidget *parent=nullptr)
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