yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_EDITOR_H
2#define YAZE_APP_CORE_EDITOR_H
3
4#include <array>
5#include <cstddef>
6#include <vector>
7#include <functional>
8
9#include "absl/status/status.h"
10#include "absl/status/statusor.h"
11#include "absl/strings/str_format.h"
14
15namespace yaze {
16
17// Forward declarations
18class Rom;
19namespace gfx {
20class IRenderer;
21}
22
27namespace editor {
28
29// Forward declarations
30class EditorCardRegistry;
31class ToastManager;
32class UserSettings;
33
67 std::vector<int> overworld_tile16_ids;
70
71 void Clear() {
76 }
77 };
78
79 Rom* rom = nullptr;
86 size_t session_id = 0;
87
89
90 void* custom_data = nullptr;
91};
92
93enum class EditorType {
99 kMusic,
101 kPalette,
102 kScreen,
103 kSprite,
104 kMessage,
105 kHex,
106 kAgent,
107 kSettings,
108};
109
110constexpr std::array<const char*, 14> kEditorNames = {
111 "Unknown",
112 "Assembly", "Dungeon", "Emulator", "Graphics", "Music", "Overworld",
113 "Palette", "Screen", "Sprite", "Message", "Hex", "Agent", "Settings",
114};
115
122class Editor {
123 public:
124 Editor() = default;
125 virtual ~Editor() = default;
126
128
129 // Initialization of the editor, no ROM assets.
130 virtual void Initialize() = 0;
131
132 // Initialization of ROM assets.
133 virtual absl::Status Load() = 0;
134
135 // Save the editor state.
136 virtual absl::Status Save() = 0;
137
138 // Update the editor state, ran every frame.
139 virtual absl::Status Update() = 0;
140
141 virtual absl::Status Cut() = 0;
142 virtual absl::Status Copy() = 0;
143 virtual absl::Status Paste() = 0;
144
145 virtual absl::Status Undo() = 0;
146 virtual absl::Status Redo() = 0;
147
148 virtual absl::Status Find() = 0;
149
150 virtual absl::Status Clear() { return absl::OkStatus(); }
151
152 EditorType type() const { return type_; }
153
154 bool* active() { return &active_; }
155 void set_active(bool active) { active_ = active; }
157
158 // ROM loading state helpers (default implementations)
159 virtual bool IsRomLoaded() const { return false; }
160 virtual std::string GetRomStatus() const { return "ROM state not implemented"; }
161
162 protected:
163 bool active_ = false;
166
167 // Helper method to create session-aware card titles for multi-session support
168 std::string MakeCardTitle(const std::string& base_title) const {
169 if (dependencies_.session_id > 0) {
170 return absl::StrFormat("%s [S%zu]", base_title, dependencies_.session_id);
171 }
172 return base_title;
173 }
174
175 // Helper method to create session-aware card IDs for multi-session support
176 std::string MakeCardId(const std::string& base_id) const {
177 if (dependencies_.session_id > 0) {
178 return absl::StrFormat("s%zu.%s", dependencies_.session_id, base_id);
179 }
180 return base_id;
181 }
182
183 // Helper method for ROM access with safety check
184 template<typename T>
185 absl::StatusOr<T> SafeRomAccess(std::function<T()> accessor, const std::string& operation = "") const {
186 if (!IsRomLoaded()) {
187 return absl::FailedPreconditionError(
188 operation.empty() ? "ROM not loaded" :
189 absl::StrFormat("%s: ROM not loaded", operation));
190 }
191 try {
192 return accessor();
193 } catch (const std::exception& e) {
194 return absl::InternalError(absl::StrFormat(
195 "%s: %s", operation.empty() ? "ROM access failed" : operation, e.what()));
196 }
197 }
198};
199
200} // namespace editor
201} // namespace yaze
202
203#endif // YAZE_APP_CORE_EDITOR_H
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
Central registry for all editor cards with session awareness and dependency injection.
Interface for editor classes.
Definition editor.h:122
virtual absl::Status Cut()=0
virtual absl::Status Copy()=0
virtual absl::Status Redo()=0
virtual void Initialize()=0
EditorDependencies dependencies_
Definition editor.h:165
virtual absl::Status Clear()
Definition editor.h:150
EditorType type() const
Definition editor.h:152
void set_active(bool active)
Definition editor.h:155
virtual ~Editor()=default
virtual std::string GetRomStatus() const
Definition editor.h:160
EditorType type_
Definition editor.h:164
virtual absl::Status Save()=0
std::string MakeCardTitle(const std::string &base_title) const
Definition editor.h:168
virtual bool IsRomLoaded() const
Definition editor.h:159
std::string MakeCardId(const std::string &base_id) const
Definition editor.h:176
void SetDependencies(const EditorDependencies &deps)
Definition editor.h:127
absl::StatusOr< T > SafeRomAccess(std::function< T()> accessor, const std::string &operation="") const
Definition editor.h:185
virtual absl::Status Find()=0
virtual absl::Status Paste()=0
virtual absl::Status Load()=0
virtual absl::Status Update()=0
virtual absl::Status Undo()=0
Manages user preferences and settings persistence.
Defines an abstract interface for all rendering operations.
Definition irenderer.h:35
constexpr std::array< const char *, 14 > kEditorNames
Definition editor.h:110
Main namespace for the application.
Definition controller.cc:20
Unified dependency container for all editor types.
Definition editor.h:64
ToastManager * toast_manager
Definition editor.h:81
SharedClipboard * shared_clipboard
Definition editor.h:84
gfx::IRenderer * renderer
Definition editor.h:88
ShortcutManager * shortcut_manager
Definition editor.h:83
UserSettings * user_settings
Definition editor.h:85
PopupManager * popup_manager
Definition editor.h:82
EditorCardRegistry * card_registry
Definition editor.h:80