File indexing completed on 2025-04-27 04:08:15
0001 /* 0002 SPDX-FileCopyrightText: 2012 Dan Leinir Turthra Jensen <admin@leinir.dk> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 0008 #ifndef COMPOSITEOPMODEL_H 0009 #define COMPOSITEOPMODEL_H 0010 0011 #include <QModelIndex> 0012 #include <kis_layer.h> 0013 #include <kis_types.h> 0014 0015 class KoCanvasController; 0016 0017 class CompositeOpModel : public QAbstractListModel 0018 { 0019 Q_OBJECT 0020 Q_PROPERTY(QObject* view READ view WRITE setView NOTIFY viewChanged); 0021 Q_PROPERTY(bool eraserMode READ eraserMode WRITE setEraserMode NOTIFY eraserModeChanged); 0022 0023 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged); 0024 Q_PROPERTY(bool opacityEnabled READ opacityEnabled WRITE setOpacityEnabled NOTIFY opacityEnabledChanged); 0025 Q_PROPERTY(qreal flow READ flow WRITE setFlow NOTIFY flowChanged); 0026 Q_PROPERTY(bool flowEnabled READ flowEnabled WRITE setFlowEnabled NOTIFY flowEnabledChanged); 0027 Q_PROPERTY(qreal size READ size WRITE setSize NOTIFY sizeChanged); 0028 Q_PROPERTY(bool sizeEnabled READ sizeEnabled WRITE setSizeEnabled NOTIFY sizeEnabledChanged); 0029 0030 Q_PROPERTY(bool mirrorHorizontally READ mirrorHorizontally WRITE setMirrorHorizontally NOTIFY mirrorHorizontallyChanged); 0031 Q_PROPERTY(bool mirrorVertically READ mirrorVertically WRITE setMirrorVertically NOTIFY mirrorVerticallyChanged); 0032 0033 Q_PROPERTY(QString currentCompositeOpID READ currentCompositeOpID NOTIFY currentCompositeOpIDChanged); 0034 public: 0035 enum CompositeOpModelRoles { 0036 TextRole = Qt::UserRole + 1, 0037 IsCategoryRole 0038 }; 0039 explicit CompositeOpModel(QObject *parent = nullptr); 0040 ~CompositeOpModel() override; 0041 QHash<int, QByteArray> roleNames() const override; 0042 QVariant data(const QModelIndex &index, 0043 int role = Qt::DisplayRole) const override; 0044 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0045 0046 Q_INVOKABLE void activateItem(int index); 0047 0048 QObject* view() const; 0049 void setView(QObject* newView); 0050 bool eraserMode() const; 0051 void setEraserMode(bool newEraserMode); 0052 0053 qreal opacity() const; 0054 void setOpacity(qreal newOpacity); 0055 bool opacityEnabled() const; 0056 void setOpacityEnabled(bool newOpacityEnabled); 0057 0058 qreal flow() const; 0059 void setFlow(qreal newFlow); 0060 bool flowEnabled() const; 0061 void setFlowEnabled(bool newFlowEnabled); 0062 0063 qreal size() const; 0064 void setSize(qreal newSize); 0065 bool sizeEnabled() const; 0066 void setSizeEnabled(bool newSizeEnabled); 0067 0068 bool mirrorHorizontally() const; 0069 void setMirrorHorizontally(bool newMirrorHorizontally); 0070 bool mirrorVertically() const; 0071 void setMirrorVertically(bool newMirrorVertically); 0072 0073 QString currentCompositeOpID() const; 0074 0075 Q_INVOKABLE void changePaintopValue(QString propertyName, QVariant value); 0076 Q_INVOKABLE int indexOf(QString compositeOpId); 0077 0078 Q_SIGNALS: 0079 void viewChanged(); 0080 void eraserModeChanged(); 0081 0082 void opacityChanged(); 0083 void opacityEnabledChanged(); 0084 void flowChanged(); 0085 void flowEnabledChanged(); 0086 void sizeChanged(); 0087 void sizeEnabledChanged(); 0088 0089 void mirrorHorizontallyChanged(); 0090 void mirrorVerticallyChanged(); 0091 0092 void currentCompositeOpIDChanged(); 0093 0094 private Q_SLOTS: 0095 void slotToolChanged(KoCanvasController* canvas); 0096 void resourceChanged(int key, const QVariant& v); 0097 void currentNodeChanged(KisLayerSP newNode); 0098 0099 private: 0100 class Private; 0101 Private* d; 0102 }; 0103 0104 #endif // COMPOSITEOPMODEL_H