File indexing completed on 2024-05-19 04:29:00
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "./kis_node_commands_adapter.h" 0008 0009 #include <KoCompositeOp.h> 0010 #include "kis_undo_adapter.h" 0011 #include "kis_image.h" 0012 #include "commands/kis_image_layer_add_command.h" 0013 #include "commands/kis_image_layer_move_command.h" 0014 #include "commands/kis_image_layer_remove_command.h" 0015 #include "commands/KisNodeRenameCommand.h" 0016 #include "commands/kis_node_commands.h" 0017 #include "KisViewManager.h" 0018 #include "kis_processing_applicator.h" 0019 0020 KisNodeCommandsAdapter::KisNodeCommandsAdapter(KisViewManager * view) 0021 : QObject(view) 0022 , m_view(view) 0023 { 0024 0025 } 0026 0027 KisNodeCommandsAdapter::~KisNodeCommandsAdapter() 0028 { 0029 } 0030 0031 void KisNodeCommandsAdapter::applyOneCommandAsync(KUndo2Command *cmd, KisProcessingApplicator *applicator) 0032 { 0033 if (applicator) { 0034 applicator->applyCommand(cmd, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); 0035 } else { 0036 QScopedPointer<KisProcessingApplicator> localApplicator( 0037 new KisProcessingApplicator(m_view->image(), 0, KisProcessingApplicator::NONE, 0038 KisImageSignalVector(), 0039 cmd->text(), 0040 0, cmd->id())); 0041 localApplicator->applyCommand(cmd); 0042 localApplicator->end(); 0043 } 0044 } 0045 0046 void KisNodeCommandsAdapter::addNodeAsync(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, bool doRedoUpdates, bool doUndoUpdates, KisProcessingApplicator *applicator) 0047 { 0048 KUndo2Command *cmd = new KisImageLayerAddCommand(m_view->image(), node, parent, aboveThis, doRedoUpdates, doUndoUpdates); 0049 applyOneCommandAsync(cmd, applicator); 0050 } 0051 0052 void KisNodeCommandsAdapter::addNodeAsync(KisNodeSP node, KisNodeSP parent, quint32 index, bool doRedoUpdates, bool doUndoUpdates, KisProcessingApplicator *applicator) 0053 { 0054 KUndo2Command *cmd = new KisImageLayerAddCommand(m_view->image(), node, parent, index, doRedoUpdates, doUndoUpdates); 0055 applyOneCommandAsync(cmd, applicator); 0056 } 0057 0058 void KisNodeCommandsAdapter::beginMacro(const KUndo2MagicString& macroName) 0059 { 0060 Q_ASSERT(m_view->image()->undoAdapter()); 0061 m_view->image()->undoAdapter()->beginMacro(macroName); 0062 } 0063 0064 void KisNodeCommandsAdapter::addExtraCommand(KUndo2Command *command) 0065 { 0066 Q_ASSERT(m_view->image()->undoAdapter()); 0067 m_view->image()->undoAdapter()->addCommand(command); 0068 } 0069 0070 void KisNodeCommandsAdapter::endMacro() 0071 { 0072 Q_ASSERT(m_view->image()->undoAdapter()); 0073 m_view->image()->undoAdapter()->endMacro(); 0074 } 0075 0076 void KisNodeCommandsAdapter::addNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, bool doRedoUpdates, bool doUndoUpdates) 0077 { 0078 Q_ASSERT(m_view->image()->undoAdapter()); 0079 m_view->image()->undoAdapter()->addCommand(new KisImageLayerAddCommand(m_view->image(), node, parent, aboveThis, doRedoUpdates, doUndoUpdates)); 0080 } 0081 0082 void KisNodeCommandsAdapter::addNode(KisNodeSP node, KisNodeSP parent, quint32 index, bool doRedoUpdates, bool doUndoUpdates) 0083 { 0084 Q_ASSERT(m_view->image()->undoAdapter()); 0085 m_view->image()->undoAdapter()->addCommand(new KisImageLayerAddCommand(m_view->image(), node, parent, index, doRedoUpdates, doUndoUpdates)); 0086 } 0087 0088 void KisNodeCommandsAdapter::moveNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis) 0089 { 0090 Q_ASSERT(m_view->image()->undoAdapter()); 0091 m_view->image()->undoAdapter()->addCommand(new KisImageLayerMoveCommand(m_view->image(), node, parent, aboveThis)); 0092 } 0093 0094 void KisNodeCommandsAdapter::moveNode(KisNodeSP node, KisNodeSP parent, quint32 indexaboveThis) 0095 { 0096 Q_ASSERT(m_view->image()->undoAdapter()); 0097 m_view->image()->undoAdapter()->addCommand(new KisImageLayerMoveCommand(m_view->image(), node, parent, indexaboveThis)); 0098 } 0099 0100 void KisNodeCommandsAdapter::removeNode(KisNodeSP node) 0101 { 0102 Q_ASSERT(m_view->image()->undoAdapter()); 0103 m_view->image()->undoAdapter()->addCommand(new KisImageLayerRemoveCommand(m_view->image(), node)); 0104 } 0105 0106 void KisNodeCommandsAdapter::setOpacity(KisNodeSP node, qint32 opacity) 0107 { 0108 KUndo2Command *cmd = new KisNodeOpacityCommand(node, opacity); 0109 applyOneCommandAsync(cmd); 0110 } 0111 0112 void KisNodeCommandsAdapter::setCompositeOp(KisNodeSP node, 0113 const KoCompositeOp* compositeOp) 0114 { 0115 KUndo2Command *cmd = new KisNodeCompositeOpCommand(node, 0116 compositeOp->id()); 0117 applyOneCommandAsync(cmd); 0118 } 0119 0120 void KisNodeCommandsAdapter::setNodeName(KisNodeSP node, const QString &name) 0121 { 0122 KUndo2Command *cmd = new KisNodeRenameCommand(node, node->name(), name); 0123 applyOneCommandAsync(cmd); 0124 } 0125 0126 void KisNodeCommandsAdapter::undoLastCommand() 0127 { 0128 Q_ASSERT(m_view->image()->undoAdapter()); 0129 m_view->image()->undoAdapter()->undoLastCommand(); 0130 }