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

0001 /*
0002  *  SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
0003  *  SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef _KIS_COMPOSITE_OPS_MODEL_H_
0009 #define _KIS_COMPOSITE_OPS_MODEL_H_
0010 
0011 #include <KoID.h>
0012 #include "kis_categorized_list_model.h"
0013 
0014 class KoColorSpace;
0015 
0016 struct KoIDToQStringConverter {
0017     QString operator() (const KoID &id) {
0018         return id.name();
0019     }
0020 };
0021 
0022 typedef KisCategorizedListModel<KoID,KoIDToQStringConverter> BaseKoIDCategorizedListModel;
0023 
0024 class KRITAUI_EXPORT KisCompositeOpListModel: public BaseKoIDCategorizedListModel
0025 {
0026 public:
0027     static KisCompositeOpListModel* sharedInstance();
0028 
0029     virtual QString  categoryToString(const KoID& val) const { return val.name(); }
0030     virtual QString  entryToString   (const KoID& val) const { return val.name(); }
0031     bool     setData         (const QModelIndex& idx, const QVariant& value, int role=Qt::EditRole) override;
0032     QVariant data            (const QModelIndex& idx, int role=Qt::DisplayRole) const override;
0033 
0034     void validate(const KoColorSpace *cs);
0035     void readFavoriteCompositeOpsFromConfig();
0036     void writeFavoriteCompositeOpsToConfig() const;
0037 
0038     static KoID favoriteCategory();
0039 
0040     void initialize();
0041     void initializeForLayerStyles();
0042 
0043 private:
0044     void addFavoriteEntry(const KoID &entry);
0045     void removeFavoriteEntry(const KoID &entry);
0046 };
0047 
0048 /**
0049  * @brief The KisSortedCompositeOpListModel class provides a model for the composite op combobox.
0050  *
0051  * It intentionally does NOT use the shared instance of KisCompositeOpListModel because it is
0052  * perfect valid for two composite comboboboxes to show a different set of valid composite ops.
0053  */
0054 class KRITAUI_EXPORT KisSortedCompositeOpListModel : public KisSortedCategorizedListModel<KisCompositeOpListModel>
0055 {
0056 public:
0057     KisSortedCompositeOpListModel(bool limitToLayerStyles, QObject *parent)
0058         : KisSortedCategorizedListModel<KisCompositeOpListModel>(parent)
0059     {
0060         if (limitToLayerStyles) {
0061             m_model.initializeForLayerStyles();
0062         } else {
0063             m_model.initialize();
0064         }
0065 
0066         initializeModel(&m_model);
0067     }
0068 
0069     void validate(const KoColorSpace *cs) {
0070         m_model.validate(cs);
0071     }
0072 
0073 protected:
0074     bool lessThan(const QModelIndex &left, const QModelIndex &right) const override {
0075         return lessThanPriority(left, right, KisCompositeOpListModel::favoriteCategory().name());
0076     }
0077 private:
0078     KisCompositeOpListModel m_model;
0079 };
0080 
0081 #endif