File indexing completed on 2024-06-16 04:16:16

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef _PRESETHISTORY_DOCK_H_
0008 #define _PRESETHISTORY_DOCK_H_
0009 
0010 #include <QDockWidget>
0011 #include <QListWidget>
0012 #include <QPointer>
0013 #include <KisKineticScroller.h>
0014 
0015 #include <KoCanvasObserverBase.h>
0016 #include <KisResourceModel.h>
0017 
0018 #include <kis_canvas2.h>
0019 #include <kis_types.h>
0020 
0021 class QActionGroup;
0022 
0023 class PresetHistoryList : public QListWidget {
0024     Q_OBJECT
0025 public:
0026     PresetHistoryList(QWidget *parent = nullptr);
0027 protected:
0028     void mouseReleaseEvent(QMouseEvent *e) override;
0029 Q_SIGNALS:
0030     void mouseReleased(QListWidgetItem *item);
0031 };
0032 
0033 class PresetHistoryDock : public QDockWidget, public KoCanvasObserverBase {
0034     Q_OBJECT
0035 public:
0036     enum HistoryDataRole {
0037         ResourceID = Qt::UserRole,
0038         BubbleMarkerRole = Qt::UserRole + 1
0039     };
0040 
0041     enum DisplayOrder {
0042         Static = 0,
0043         MostRecent = 1,
0044         Bubbling = 2
0045     };
0046 
0047     PresetHistoryDock();
0048     QString observerName() override { return "PresetHistoryDock"; }
0049     void setCanvas(KoCanvasBase *canvas) override;
0050     void unsetCanvas() override;
0051 public Q_SLOTS:
0052     void slotScrollerStateChanged(QScroller::State state){ KisKineticScroller::updateCursor(this, state); }
0053 private Q_SLOTS:
0054     void presetSelected(QListWidgetItem *item);
0055     void canvasResourceChanged(int key, const QVariant& v);
0056     void slotSortingModeChanged(QAction *action);
0057     void slotPresetLimitChanged(int presetLimit);
0058     void showPresetLimitDialog();
0059     void slotContextMenuRequest(const QPoint &pos);
0060     void updatePresets();
0061 private:
0062     void updatePresetState(int position);
0063     int bubblePreset(int position);
0064     void addPreset(QString name, QIcon icon, int resourceId);
0065 private:
0066     QPointer<KisCanvas2> m_canvas;
0067     PresetHistoryList *m_presetHistory;
0068     QAction *m_actionSortStatic;
0069     QAction *m_actionSortMostRecent;
0070     QAction *m_actionSortBubble;
0071     QActionGroup *m_sortingModes;
0072     DisplayOrder m_sorting {Static};
0073     int m_presetLimit;
0074     KisResourceModel* m_resourceModel {0};
0075     bool m_block {false};
0076     bool m_initialized {false};
0077 };
0078 
0079 
0080 #endif