Krita Source Code Documentation
Loading...
Searching...
No Matches
KisResourceItemView.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2008 Jan Hambrecht <jaham@gmx.net>
3 * SPDX-FileCopyrightText: 2011 José Luis Vergara <pentalis@gmail.com
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
9
10#include <QEvent>
11#include <QHeaderView>
12#include <QScroller>
13#include <QHelpEvent>
14#include <QDebug>
15
16#include <KisKineticScroller.h>
17
18#include <QtMath>
19
21 : QTableView(parent)
22 , m_tip(this)
23{
24 setSelectionMode(QAbstractItemView::SingleSelection);
25 verticalHeader()->hide();
26 horizontalHeader()->hide();
27 verticalHeader()->setDefaultSectionSize(20);
28 setContextMenuPolicy(Qt::DefaultContextMenu);
30
31 QScroller *scroller = KisKineticScroller::createPreconfiguredScroller(this);
32 if (scroller) {
33 connect(scroller, SIGNAL(stateChanged(QScroller::State)), this, SLOT(slotScrollerStateChange(QScroller::State)));
34 }
35
36 connect(this, SIGNAL(clicked(QModelIndex)), SLOT(slotItemClicked(QModelIndex)));
37}
38
40{
41 if (!model()) return true;
42
43 if (event->type() == QEvent::ToolTip) {
44 QHelpEvent *he = static_cast<QHelpEvent *>(event);
45#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
46 QStyleOptionViewItem option = viewOptions();
47#else
48 QStyleOptionViewItem option;
49 initViewItemOption(&option);
50#endif
51 QModelIndex index = model()->buddy(indexAt(he->pos()));
52 if (index.isValid()) {
53 option.rect = visualRect(index);
54 m_tip.showTip(he->pos(), option, index);
55 return true;
56 }
57 }
58
59 return QTableView::viewportEvent(event);
60}
61
62void KisResourceItemView::selectionChanged(const QItemSelection &selected, const QItemSelection &/*deselected*/)
63{
64 if (selected.isEmpty()) {
65 Q_EMIT currentResourceChanged(QModelIndex());
66 }
67 else {
68 Q_EMIT currentResourceChanged(selected.indexes().first());
69 }
70}
71
73{
74 m_beforeClickIndex = currentIndex();
75 QTableView::mousePressEvent(event);
76}
77
78void KisResourceItemView::slotItemClicked(const QModelIndex &index)
79{
80 if (m_beforeClickIndex == index) {
81 Q_EMIT currentResourceClicked(index);
82 }
83 m_beforeClickIndex = QModelIndex();
84}
85
86void KisResourceItemView::contextMenuEvent(QContextMenuEvent *event)
87{
88 QTableView::contextMenuEvent(event);
89 Q_EMIT contextMenuRequested(event->globalPos());
90}
91
92void KisResourceItemView::resizeEvent(QResizeEvent *event)
93{
94 QTableView::resizeEvent(event);
95 updateView();
96 Q_EMIT sigSizeChanged();
97}
98
100{
101 m_viewMode = mode;
102
103 switch (m_viewMode) {
104 case FIXED_COLUMNS:
105 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Horizontal scrollbar is never needed
106 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
107 break;
108 case FIXED_ROWS:
109 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
110 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Vertical scrollbar is never needed
111 break;
112 default:
113 setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
114 setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
115 }
116
117}
118
120{
121 if (!model()) return;
122
123 int columnCount = model()->columnCount(QModelIndex());
124 int rowCount = model()->rowCount(QModelIndex());
125 int rowHeight, columnWidth;
126
127 if (m_viewMode == FIXED_COLUMNS) {
128 columnWidth = qFloor(viewport()->size().width() / static_cast<double>(columnCount));
129
130 for (int i = 0; i < columnCount; ++i) {
131 setColumnWidth(i, columnWidth);
132 }
133 // keep aspect ratio always square.
134 if (columnCount > 1) {
135 for (int i = 0; i < rowCount; ++i) {
136 setRowHeight(i, columnWidth);
137 }
138 }
139 } else if (m_viewMode == FIXED_ROWS) {
140 if (rowCount == 0) return; // Don't divide by zero
141 rowHeight = qFloor(viewport()->size().height() / static_cast<double>(rowCount));
142
143 for (int i = 0; i < rowCount; ++i) {
144 setRowHeight(i, rowHeight);
145 }
146 }
147}
void slotItemClicked(const QModelIndex &index)
void setViewMode(ViewMode mode)
void currentResourceClicked(const QModelIndex &)
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
void currentResourceChanged(const QModelIndex &)
void mousePressEvent(QMouseEvent *event) override
void contextMenuRequested(const QPoint &)
@ FIXED_ROWS
The number of columns is fixed.
bool viewportEvent(QEvent *event) override
void slotScrollerStateChange(QScroller::State state)
KisResourceItemView(QWidget *parent=0)
void contextMenuEvent(QContextMenuEvent *event) override
void resizeEvent(QResizeEvent *event) override
void showTip(const QPoint &pos, const QStyleOptionViewItem &option, const QModelIndex &index)
KRITAWIDGETUTILS_EXPORT QScroller * createPreconfiguredScroller(QAbstractScrollArea *target)