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