载入中...
搜索中...
未找到
EditCommand.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <memory>
8#include <string>
9#include <vector>
10
11namespace eve::editor {
12
15public:
17 virtual ~IEditCommand() = default;
19 virtual const std::string &name() const = 0;
21 virtual bool apply() = 0;
23 virtual void revert() = 0;
32 [[nodiscard]] virtual std::unique_ptr<IEditCommand> clone() const { return nullptr; }
34 virtual bool mergeWith(const IEditCommand &later) {
35 (void)later;
36 return false;
37 }
39 virtual EditRegion dirtyRegion() const = 0;
40};
41
43struct IntFieldChange { int x = 0, y = 0, before = 0, after = 0; };
44
47public:
51 const std::string &name() const override { return name_; }
53 bool record(int x, int y, int after);
55 int changeCount() const { return static_cast<int>(changes_.size()); }
57 bool apply() override;
59 void revert() override;
61 [[nodiscard]] std::unique_ptr<IEditCommand> clone() const override;
63 bool mergeWith(const IEditCommand &later) override;
65 EditRegion dirtyRegion() const override { return dirty_; }
66private:
67 std::string name_;
68 IEditableTarget *target_ = nullptr;
69 std::vector<IntFieldChange> changes_;
70 EditRegion dirty_;
71};
72
74struct ScalarFieldChange { int x = 0, y = 0; float before = 0.f, after = 0.f; };
75
78public:
82 const std::string &name() const override { return name_; }
84 bool record(int x, int y, float after);
86 int changeCount() const { return static_cast<int>(changes_.size()); }
88 bool apply() override;
90 void revert() override;
92 [[nodiscard]] std::unique_ptr<IEditCommand> clone() const override;
94 bool mergeWith(const IEditCommand &later) override;
96 EditRegion dirtyRegion() const override { return dirty_; }
97private:
98 std::string name_;
99 IEditableTarget *target_ = nullptr;
100 std::vector<ScalarFieldChange> changes_;
101 EditRegion dirty_;
102};
103
104} // namespace eve::editor
LogicalId target
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
#define EVENGINE_API_ORCHESTRATION
Definition Export.h:111
std::string name
IEditableTarget public API.
Reversible unit accepted by the editor transaction manager.
Definition EditCommand.h:14
virtual ~IEditCommand()=default
Releases IEditCommand resources.
virtual void revert()=0
Revert.
virtual EditRegion dirtyRegion() const =0
Dirty region.
virtual bool apply()=0
Applies .
virtual std::unique_ptr< IEditCommand > clone() const
Creates an owning staged copy for merge evaluation.
Definition EditCommand.h:32
virtual bool mergeWith(const IEditCommand &later)
Optionally absorb a later command from the same stroke.
Definition EditCommand.h:34
virtual const std::string & name() const =0
Name.
Reversible edits to any target exposing IIntFieldTarget.
Definition EditCommand.h:46
int changeCount() const
Change count.
Definition EditCommand.h:55
EditRegion dirtyRegion() const override
Dirty region.
Definition EditCommand.h:65
const std::string & name() const override
Name.
Definition EditCommand.h:51
Reversible edits to any target exposing IScalarFieldTarget.
Definition EditCommand.h:77
int changeCount() const
Change count.
Definition EditCommand.h:86
EditRegion dirtyRegion() const override
Dirty region.
Definition EditCommand.h:96
const std::string & name() const override
Name.
Definition EditCommand.h:82
EditRegion public API.
IntFieldChange public API.
Definition EditCommand.h:43
ScalarFieldChange public API.
Definition EditCommand.h:74