File indexing completed on 2024-05-12 16:01:36

0001 /*
0002  *  SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
0003  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0004  *  SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
0005  * 
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #ifndef _KIS_PAINTOP_LIST_MODEL_H_
0010 #define _KIS_PAINTOP_LIST_MODEL_H_
0011 
0012 #include <QAbstractListModel>
0013 #include <QPixmap>
0014 #include <kritaui_export.h>
0015 #include "kis_categorized_list_model.h"
0016 #include <brushengine/kis_paintop_factory.h>
0017 
0018 class KisPaintOpFactory;
0019 
0020 struct KRITAUI_EXPORT KisPaintOpInfo
0021 {
0022     KisPaintOpInfo() { }
0023     KisPaintOpInfo(const QString& _id, const QString& _name, const QString& _category, const QIcon& _icon, qint32 _priority):
0024         id(_id),  name(_name), category(_category), icon(_icon), priority(_priority) { }
0025 
0026     KisPaintOpInfo(const QString& _id):
0027         id(_id) { }
0028 
0029     bool operator==(const KisPaintOpInfo info) const{
0030         return (info.id == id);
0031     }
0032 
0033     QString id;
0034     QString name;
0035     QString category;
0036     QIcon icon;
0037     qint32  priority {0};
0038 };
0039 
0040 struct PaintOpInfoToQStringConverter {
0041     QString operator() (const KisPaintOpInfo &info) {
0042         return info.name;
0043     }
0044 };
0045 
0046 typedef KisCategorizedListModel<KisPaintOpInfo, PaintOpInfoToQStringConverter> BasePaintOpCategorizedListModel;
0047 
0048 class KRITAUI_EXPORT KisPaintOpListModel : public BasePaintOpCategorizedListModel
0049 {
0050 public:
0051     KisPaintOpListModel(QObject *parent);
0052     QVariant data(const QModelIndex& idx, int role = Qt::DisplayRole) const override;
0053     void fill(const QList<KisPaintOpFactory*>& list);
0054 };
0055 
0056 class KRITAUI_EXPORT KisSortedPaintOpListModel : public KisSortedCategorizedListModel<KisPaintOpListModel>
0057 {
0058 public:
0059     KisSortedPaintOpListModel(QObject *parent)
0060         : KisSortedCategorizedListModel<KisPaintOpListModel>(parent),
0061           m_model(new KisPaintOpListModel(this))
0062     {
0063         initializeModel(m_model);
0064     }
0065 
0066     void fill(const QList<KisPaintOpFactory*> &list) {
0067         m_model->fill(list);
0068     }
0069 
0070 protected:
0071     bool lessThan(const QModelIndex &left, const QModelIndex &right) const override {
0072         return lessThanPriority(left, right, KisPaintOpFactory::categoryStable());
0073     }
0074 
0075 private:
0076     KisPaintOpListModel *m_model;
0077 };
0078 
0079 #endif //_KIS_PAINTOP_LIST_MODEL_H_