1// Aseprite
2// Copyright (C) 2001-2018 David Capello
3//
4// This program is distributed under the terms of
5// the End-User License Agreement for Aseprite.
6
7#ifndef APP_CMD_H_INCLUDED
8#define APP_CMD_H_INCLUDED
9#pragma once
10
11#include "base/disable_copying.h"
12#include "undo/undo_command.h"
13
14#include <string>
15
16namespace app {
17
18 class Context;
19
20 class Cmd : public undo::UndoCommand {
21 public:
22 Cmd();
23 virtual ~Cmd();
24
25 void execute(Context* ctx);
26
27 // undo::UndoCommand impl
28 void undo() override;
29 void redo() override;
30 void dispose() override;
31
32 std::string label() const;
33 size_t memSize() const;
34
35 Context* context() const { return m_ctx; }
36
37 protected:
38 virtual void onExecute();
39 virtual void onUndo();
40 virtual void onRedo();
41 virtual void onFireNotifications();
42 virtual std::string onLabel() const;
43 virtual size_t onMemSize() const;
44
45 private:
46 Context* m_ctx;
47#if _DEBUG
48 enum class State { NotExecuted, Executed, Undone, Redone };
49 State m_state;
50#endif
51
52 DISABLE_COPYING(Cmd);
53 };
54
55} // namespace app
56
57#endif
58