yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
assembly_editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_ASSEMBLY_EDITOR_H
2#define YAZE_APP_EDITOR_ASSEMBLY_EDITOR_H
3
4#include <map>
5#include <string>
6#include <vector>
7
8#include "absl/container/flat_hash_map.h"
9#include "absl/container/flat_hash_set.h"
10#include "app/editor/editor.h"
12#include "app/gui/core/style.h"
14#include "rom/rom.h"
15#include "core/asar_wrapper.h"
16
17namespace yaze {
18namespace editor {
19
20struct FolderItem {
21 std::string name;
22 std::vector<FolderItem> subfolders;
23 std::vector<std::string> files;
24};
25
27 std::string file;
28 int line = 0; // 0-based
29 int column = 0; // 0-based
30};
31
36class AssemblyEditor : public Editor {
37 public:
43 void ChangeActiveFile(const std::string_view& filename);
44 absl::Status JumpToSymbolDefinition(const std::string& symbol);
45 // Jump to a best-effort assembly reference.
46 //
47 // Supported formats:
48 // - "MyLabel" (symbol)
49 // - "path/to/file.asm:123" (file + 1-based line)
50 // - "path/to/file.asm:123:10" (file + 1-based line + 1-based column)
51 // - "path/to/file.asm#L123" (file + 1-based line)
52 //
53 // This keeps story graph navigation resilient even when a planning JSON
54 // still contains file:line references; stable symbols are still preferred.
55 absl::Status JumpToReference(const std::string& reference);
56
57 [[nodiscard]] std::string active_file_path() const;
59
60 void Initialize() override;
61 absl::Status Load() override;
62 void InlineUpdate();
63
64 void UpdateCodeView();
65
66 absl::Status Cut() override;
67 absl::Status Copy() override;
68 absl::Status Paste() override;
69
70 absl::Status Undo() override;
71 absl::Status Redo() override;
72 absl::Status Find() override { return absl::UnimplementedError("Find"); }
73
74 absl::Status Update() override;
75
76 absl::Status Save() override;
77
78 void OpenFolder(const std::string& folder_path);
79
80 // Asar integration methods
81 absl::Status ValidateCurrentFile();
82 absl::Status ApplyPatchToRom();
83 void UpdateErrorMarkers(const core::AsarPatchResult& result);
84 void ClearErrorMarkers();
85
86 void SetRom(Rom* rom) { rom_ = rom; }
87 Rom* rom() const { return rom_; }
88
89 // Accessors for Asar state
90 bool is_asar_initialized() const { return asar_initialized_; }
91 const std::map<std::string, core::AsarSymbol>& symbols() const {
92 return symbols_;
93 }
95
96 private:
98 const TextEditor* GetActiveEditor() const;
99 bool HasActiveFile() const {
100 return active_file_id_ != -1 &&
101 active_file_id_ < static_cast<int>(open_files_.size());
102 }
103
104 // Panel content drawing (called by EditorPanel instances)
105 void DrawCodeEditor();
106 void DrawFileBrowser();
107 void DrawSymbolsContent();
108 void DrawBuildOutput();
109 void DrawToolbarContent();
110
111 // Menu drawing
112 void DrawFileMenu();
113 void DrawEditMenu();
114 void DrawAssembleMenu();
115
116 // Helper drawing
117 void DrawCurrentFolder();
118 void DrawFileTabView();
119 void DrawToolset();
120 void DrawSymbolPanel();
121
123
124 bool file_is_loaded_ = false;
127
128 std::vector<std::string> files_;
129 std::vector<TextEditor> open_files_;
130 ImVector<int> active_files_;
131
132 std::string current_file_;
135
137
138 // Asar integration state
140 bool asar_initialized_ = false;
141 bool show_symbol_panel_ = false;
142 std::map<std::string, core::AsarSymbol> symbols_;
143 std::vector<std::string> last_errors_;
144 std::vector<std::string> last_warnings_;
145
146 // Symbol jump cache (used by story graph navigation; avoids scanning the
147 // entire code folder on repeated lookups).
148 std::string symbol_jump_root_;
149 absl::flat_hash_map<std::string, AsmSymbolLocation> symbol_jump_cache_;
150 absl::flat_hash_set<std::string> symbol_jump_negative_cache_;
151};
152
153} // namespace editor
154} // namespace yaze
155
156#endif
static const Palette & GetDarkPalette()
void SetShowWhitespaces(bool aValue)
void SetPalette(const Palette &aValue)
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
Modern C++ wrapper for Asar 65816 assembler integration.
Text editor for modifying assembly code.
TextEditor::Coordinates active_cursor_position() const
absl::Status Find() override
core::AsarWrapper * asar_wrapper()
std::vector< std::string > last_warnings_
std::map< std::string, core::AsarSymbol > symbols_
absl::Status Save() override
std::vector< TextEditor > open_files_
absl::Status Load() override
void ChangeActiveFile(const std::string_view &filename)
absl::Status JumpToReference(const std::string &reference)
absl::Status Copy() override
absl::flat_hash_map< std::string, AsmSymbolLocation > symbol_jump_cache_
void UpdateErrorMarkers(const core::AsarPatchResult &result)
void OpenFolder(const std::string &folder_path)
absl::flat_hash_set< std::string > symbol_jump_negative_cache_
std::string active_file_path() const
absl::Status Paste() override
absl::Status Update() override
std::vector< std::string > files_
const std::map< std::string, core::AsarSymbol > & symbols() const
AssemblyEditor(Rom *rom=nullptr)
absl::Status Redo() override
absl::Status Undo() override
absl::Status Cut() override
std::vector< std::string > last_errors_
absl::Status JumpToSymbolDefinition(const std::string &symbol)
Interface for editor classes.
Definition editor.h:236
EditorType type_
Definition editor.h:305
Asar patch result information.
std::vector< FolderItem > subfolders
std::vector< std::string > files