File indexing completed on 2024-05-12 15:59:57

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2008 Jan Hambrecht <jaham@gmx.net>
0003  * SPDX-FileCopyrightText: 2011 José Luis Vergara <pentalis@gmail.com>
0004  * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.0-or-later
0007  */
0008 
0009 #ifndef KISRESOURCEITEMVIEW_H
0010 #define KISRESOURCEITEMVIEW_H
0011 
0012 #include <QTableView>
0013 #include <QScroller>
0014 
0015 #include <KisKineticScroller.h>
0016 
0017 #include "KisIconToolTip.h"
0018 
0019 class QEvent;
0020 class QModelIndex;
0021 
0022 #include "kritaresourcewidgets_export.h"
0023 
0024 /// The resource view
0025 class KRITARESOURCEWIDGETS_EXPORT KisResourceItemView : public QTableView
0026 {
0027     Q_OBJECT
0028 
0029 public:
0030 
0031     enum ViewMode {
0032         FIXED_COLUMNS,  /// The number of columns is fixed
0033         FIXED_ROWS     /// The number of rows is fixed
0034     };
0035 
0036     explicit KisResourceItemView(QWidget *parent = 0);
0037     ~KisResourceItemView() override { disconnect(); }
0038 
0039 public Q_SLOTS:
0040     void slotScrollerStateChange(QScroller::State state){ KisKineticScroller::updateCursor(this, state); }
0041 
0042 Q_SIGNALS:
0043 
0044     void sigSizeChanged();
0045 
0046 Q_SIGNALS:
0047 
0048     void currentResourceChanged(const QModelIndex &);
0049     void currentResourceClicked(const QModelIndex &);
0050 
0051     void contextMenuRequested(const QPoint &);
0052 
0053 protected:
0054 
0055     friend class KisResourceItemChooser;
0056 
0057     void contextMenuEvent(QContextMenuEvent *event) override;
0058     void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override;
0059 
0060     void mousePressEvent(QMouseEvent *event) override;
0061     bool viewportEvent(QEvent *event) override;
0062 
0063     /**
0064      * This will draw a number of rows based on the number of columns if m_viewMode is FIXED_COLUMNS
0065      * And it will draw a number of columns based on the number of rows if m_viewMode is FIXED_ROWS
0066      */
0067     void resizeEvent(QResizeEvent *event) override;
0068 
0069     void setViewMode(ViewMode mode);
0070 
0071     void updateView();
0072 
0073 
0074 private Q_SLOTS:
0075     void slotItemClicked(const QModelIndex &index);
0076 
0077 private:
0078     KisIconToolTip m_tip;
0079     QModelIndex m_beforeClickIndex;
0080     ViewMode m_viewMode;
0081 };
0082 
0083 #endif // KORESOURCEITEMVIEW_H