File indexing completed on 2024-05-12 15:58:14

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_DO_SOMETHING_COMMAND_H
0008 #define __KIS_DO_SOMETHING_COMMAND_H
0009 
0010 #include <kundo2command.h>
0011 
0012 template <template <class T> class DoSomethingOp, class LayerType>
0013 class KisDoSomethingCommand : public KUndo2Command
0014 {
0015 public:
0016     KisDoSomethingCommand(LayerType layer, bool finalUpdate, KUndo2Command *parentCommand = 0)
0017         : KUndo2Command(parentCommand),
0018           m_layer(layer),
0019           m_finalUpdate(finalUpdate) {}
0020 
0021     void undo() override {
0022         DoSomethingOp<LayerType> op;
0023         if (!m_finalUpdate) {
0024             op(m_layer);
0025         }
0026     }
0027 
0028     void redo() override {
0029         DoSomethingOp<LayerType> op;
0030         if (m_finalUpdate) {
0031             op(m_layer);
0032         }
0033     }
0034 
0035 private:
0036     LayerType m_layer;
0037     bool m_finalUpdate;
0038 };
0039 
0040 namespace KisDoSomethingCommandOps {
0041 
0042 template <class LayerType>
0043 struct ResetOp
0044 {
0045     void operator() (LayerType layer) {
0046         layer->resetCache();
0047     }
0048 };
0049 
0050 template <class LayerType>
0051 struct UpdateOp
0052 {
0053     void operator() (LayerType layer) {
0054         layer->update();
0055     }
0056 };
0057 
0058 template <class LayerType>
0059 struct NotifyColorSpaceChangedOp
0060 {
0061     void operator() (LayerType layer) {
0062         layer->notifyColorSpaceChanged();
0063     }
0064 };
0065 
0066 
0067 }
0068 #endif /* __KIS_DO_SOMETHING_COMMAND_H */