File indexing completed on 2024-06-23 04:26:37

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2017 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #ifndef SVGSYMBOLCOLLECTIONDOCKER_H
0007 #define SVGSYMBOLCOLLECTIONDOCKER_H
0008 
0009 #include <QDockWidget>
0010 #include <QAbstractItemModel>
0011 #include <QModelIndex>
0012 #include <QMap>
0013 #include <QIcon>
0014 
0015 #include <KoDockFactoryBase.h>
0016 #include <KoCanvasObserverBase.h>
0017 #include <KisKineticScroller.h>
0018 
0019 #include "ui_WdgSvgCollection.h"
0020 
0021 class KoSvgSymbolCollectionResource;
0022 class KisResourceModel;
0023 
0024 class SvgCollectionModel : public QAbstractListModel
0025 {
0026     Q_OBJECT
0027 public:
0028     explicit SvgCollectionModel(QObject *parent = 0);
0029     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0030     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0031     QMimeData *mimeData(const QModelIndexList &indexes) const override;
0032     QStringList mimeTypes() const override;
0033     Qt::ItemFlags flags(const QModelIndex &index) const override;
0034     Qt::DropActions supportedDragActions() const override;
0035 public:
0036     void setSvgSymbolCollectionResource(QSharedPointer<KoSvgSymbolCollectionResource> resource);
0037 private:
0038     QSharedPointer<KoSvgSymbolCollectionResource> m_symbolCollection;
0039 };
0040 
0041 
0042 class SvgSymbolCollectionDockerFactory : public KoDockFactoryBase
0043 {
0044 public:
0045     SvgSymbolCollectionDockerFactory();
0046 
0047     QString id() const override;
0048     QDockWidget *createDockWidget() override;
0049     DockPosition defaultDockPosition() const override
0050     {
0051         return DockRight;
0052     }
0053 };
0054 
0055 class SvgSymbolCollectionDocker : public QDockWidget, public KoCanvasObserverBase
0056 {
0057     Q_OBJECT
0058 public:
0059 
0060     explicit SvgSymbolCollectionDocker(QWidget *parent = 0);
0061     ~SvgSymbolCollectionDocker();
0062 
0063     /// reimplemented
0064     void setCanvas(KoCanvasBase *canvas) override;
0065     void unsetCanvas() override;
0066 
0067 public Q_SLOTS:
0068     void slotScrollerStateChanged(QScroller::State state){KisKineticScroller::updateCursor(this, state);}
0069 
0070 private Q_SLOTS:
0071 
0072     void collectionActivated(int index);
0073     void slotSetIconSize();
0074 
0075     void slotResourceModelAboutToBeReset();
0076     void slotResourceModelReset();
0077 
0078 
0079 private:
0080 
0081     void clearModels();
0082 
0083     QScopedPointer<Ui_WdgSvgCollection> m_wdgSvgCollection;
0084     QMap<int, SvgCollectionModel*> m_collectionsModelsCache;
0085     QSlider* m_iconSizeSlider {0};
0086 
0087     KisResourceModel* m_resourceModel {0};
0088     int m_rememberedSvgCollectionId {-1};
0089 };
0090 
0091 #endif