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

0001 /*
0002  *  SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KIS_NODE_COMMANDS_ADAPTER_H
0008 #define KIS_NODE_COMMANDS_ADAPTER_H
0009 
0010 class KisViewManager;
0011 class KoCompositeOp;
0012 class KUndo2MagicString;
0013 class KisProcessingApplicator;
0014 
0015 
0016 #include <kis_types.h>
0017 #include <kritaui_export.h>
0018 
0019 #include <QObject>
0020 
0021 /**
0022  * This class allows the manipulation of nodes in a KisImage
0023  * and creates commands as needed.
0024  */
0025 class KRITAUI_EXPORT KisNodeCommandsAdapter : public QObject
0026 {
0027     Q_OBJECT
0028 
0029 public:
0030     KisNodeCommandsAdapter(KisViewManager * view);
0031     ~KisNodeCommandsAdapter() override;
0032 public:
0033     /**
0034      * Applies \p cmd on a provided \p applicator. If \p applicator is null, then a temporary
0035      * applicator is created locally.
0036      */
0037     void applyOneCommandAsync(KUndo2Command *cmd, KisProcessingApplicator *applicator = 0);
0038 
0039     /**
0040      * Same as addNode(), but adds a node using the provided \p applicator in an asynchronous way.
0041      * If \p applicator is null, then a temporary applicator (with a stroke) is created.
0042      */
0043     void addNodeAsync(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, bool doRedoUpdates = true, bool doUndoUpdates = true, KisProcessingApplicator *applicator = 0);
0044     void addNodeAsync(KisNodeSP node, KisNodeSP parent, quint32 index, bool doRedoUpdates = true, bool doUndoUpdates = true, KisProcessingApplicator *applicator = 0);
0045 
0046 
0047     void beginMacro(const KUndo2MagicString& macroName);
0048     void addExtraCommand(KUndo2Command *command);
0049     void endMacro();
0050     void addNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, bool doRedoUpdates = true, bool doUndoUpdates = true);
0051     void addNode(KisNodeSP node, KisNodeSP parent, quint32 index, bool doRedoUpdates = true, bool doUndoUpdates = true);
0052     void moveNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis);
0053     void moveNode(KisNodeSP node, KisNodeSP parent, quint32 indexaboveThis);
0054     void removeNode(KisNodeSP node);
0055     void setOpacity(KisNodeSP node, qint32 opacity);
0056     void setCompositeOp(KisNodeSP node, const KoCompositeOp* compositeOp);
0057     void setNodeName(KisNodeSP node, const QString &name);
0058 
0059     void undoLastCommand();
0060 private:
0061     KisViewManager* m_view;
0062 };
0063 
0064 #endif // KIS_NODE_COMMANDS_ADAPTER_H