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 <vector>
6#include <functional>
7
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "absl/strings/str_format.h"
16
17namespace yaze {
18
23namespace editor {
24
31
32 // Session identification for multi-session support
33 // Used by child panels to create unique ImGui IDs
34 size_t session_id = 0;
35
36 // Cross-session shared clipboard for editor data transfers
38 // Overworld tile16 selection payload
40 std::vector<int> overworld_tile16_ids;
41 int overworld_width = 0; // in tile16 units
42 int overworld_height = 0; // in tile16 units
43
44 void Clear() {
49 }
51};
52
53enum class EditorType {
59 kMusic,
62 kScreen,
63 kSprite,
65 kHex,
66 kAgent,
68};
69
70constexpr std::array<const char*, 14> kEditorNames = {
71 "Unknown",
72 "Assembly", "Dungeon", "Emulator", "Graphics", "Music", "Overworld",
73 "Palette", "Screen", "Sprite", "Message", "Hex", "Agent", "Settings",
74};
75
82class Editor {
83 public:
84 Editor() = default;
85 virtual ~Editor() = default;
86
87 // Initialization of the editor, no ROM assets.
88 virtual void Initialize() = 0;
89
90 // Initialization of ROM assets.
91 virtual absl::Status Load() = 0;
92
93 // Save the editor state.
94 virtual absl::Status Save() = 0;
95
96 // Update the editor state, ran every frame.
97 virtual absl::Status Update() = 0;
98
99 virtual absl::Status Cut() = 0;
100 virtual absl::Status Copy() = 0;
101 virtual absl::Status Paste() = 0;
102
103 virtual absl::Status Undo() = 0;
104 virtual absl::Status Redo() = 0;
105
106 virtual absl::Status Find() = 0;
107
108 virtual absl::Status Clear() { return absl::OkStatus(); }
109
110 EditorType type() const { return type_; }
111
112 void set_context(EditorContext* context) { context_ = context; }
113
114 bool* active() { return &active_; }
115 void set_active(bool active) { active_ = active; }
116
117 // ROM loading state helpers (default implementations)
118 virtual bool IsRomLoaded() const { return false; }
119 virtual std::string GetRomStatus() const { return "ROM state not implemented"; }
120
121 protected:
122 bool active_ = false;
125
126 // Helper method to create session-aware card titles for multi-session support
127 std::string MakeCardTitle(const std::string& base_title) const {
128 if (context_ && context_->session_id > 0) {
129 return absl::StrFormat("%s [S%zu]", base_title, context_->session_id);
130 }
131 return base_title;
132 }
133
134 // Helper method for ROM access with safety check
135 template<typename T>
136 absl::StatusOr<T> SafeRomAccess(std::function<T()> accessor, const std::string& operation = "") const {
137 if (!IsRomLoaded()) {
138 return absl::FailedPreconditionError(
139 operation.empty() ? "ROM not loaded" :
140 absl::StrFormat("%s: ROM not loaded", operation));
141 }
142 try {
143 return accessor();
144 } catch (const std::exception& e) {
145 return absl::InternalError(absl::StrFormat(
146 "%s: %s", operation.empty() ? "ROM access failed" : operation, e.what()));
147 }
148 }
149};
150
151} // namespace editor
152} // namespace yaze
153
154#endif // YAZE_APP_CORE_EDITOR_H
Interface for editor classes.
Definition editor.h:82
void set_context(EditorContext *context)
Definition editor.h:112
virtual absl::Status Cut()=0
virtual absl::Status Copy()=0
virtual absl::Status Redo()=0
virtual void Initialize()=0
virtual absl::Status Clear()
Definition editor.h:108
EditorType type() const
Definition editor.h:110
void set_active(bool active)
Definition editor.h:115
virtual ~Editor()=default
virtual std::string GetRomStatus() const
Definition editor.h:119
EditorType type_
Definition editor.h:123
virtual absl::Status Save()=0
std::string MakeCardTitle(const std::string &base_title) const
Definition editor.h:127
virtual bool IsRomLoaded() const
Definition editor.h:118
absl::StatusOr< T > SafeRomAccess(std::function< T()> accessor, const std::string &operation="") const
Definition editor.h:136
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
EditorContext * context_
Definition editor.h:124
constexpr std::array< const char *, 14 > kEditorNames
Definition editor.h:70
Main namespace for the application.
ShortcutManager shortcut_manager
Definition editor.h:30
CommandManager command_manager
Definition editor.h:26
PopupManager * popup_manager
Definition editor.h:29
ExtensionManager extension_manager
Definition editor.h:27
HistoryManager history_manager
Definition editor.h:28
struct yaze::editor::EditorContext::SharedClipboard shared_clipboard