Add Load method to editor classes and update corresponding headers

This commit is contained in:
scawful
2025-03-08 10:07:18 -05:00
parent 9919677e43
commit 412e617ce7
22 changed files with 95 additions and 45 deletions

View File

@@ -101,6 +101,10 @@ void AssemblyEditor::Initialize() {
// Set the language definition
}
absl::Status AssemblyEditor::Load() {
return absl::OkStatus();
}
void AssemblyEditor::OpenFolder(const std::string& folder_path) {
current_folder_ = LoadFolder(folder_path);
}

View File

@@ -34,6 +34,7 @@ class AssemblyEditor : public Editor {
}
void Initialize() override;
absl::Status Load() override;
void Update(bool &is_loaded);
void InlineUpdate();

View File

@@ -41,6 +41,10 @@ constexpr ImGuiTableFlags kDungeonObjectTableFlags =
ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter |
ImGuiTableFlags_BordersV;
absl::Status DungeonEditor::Load() {
return absl::OkStatus();
}
absl::Status DungeonEditor::Update() {
if (!is_loaded_ && rom()->is_loaded()) {
Initialize();

View File

@@ -43,6 +43,7 @@ class DungeonEditor : public Editor, public SharedRom {
DungeonEditor() { type_ = EditorType::kDungeon; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }

View File

@@ -53,8 +53,15 @@ class Editor {
Editor() = default;
virtual ~Editor() = default;
// Initialization of the editor, no ROM assets.
virtual void Initialize() = 0;
// Initialization of ROM assets.
virtual absl::Status Load() = 0;
// Update the editor state, ran every frame.
virtual absl::Status Update() = 0;
virtual absl::Status Cut() = 0;
virtual absl::Status Copy() = 0;
virtual absl::Status Paste() = 0;
@@ -62,8 +69,6 @@ class Editor {
virtual absl::Status Undo() = 0;
virtual absl::Status Redo() = 0;
virtual absl::Status Update() = 0;
virtual absl::Status Find() = 0;
EditorType type() const { return type_; }

View File

@@ -450,7 +450,8 @@ void EditorManager::DrawHomepage() {
}
Separator();
settings_editor_.Update();
auto settings = settings_editor_.Update();
if (!settings.ok()) status_ = settings;
}
void EditorManager::DrawMenuBar() {

View File

@@ -42,6 +42,11 @@ constexpr ImGuiTableFlags kGfxEditTableFlags =
void GraphicsEditor::Initialize() {}
absl::Status GraphicsEditor::Load() {
return absl::OkStatus();
}
absl::Status GraphicsEditor::Update() {
if (ImGui::BeginTabBar("##TabBar")) {
status_ = UpdateGfxEdit();

View File

@@ -59,6 +59,7 @@ class GraphicsEditor : public SharedRom, public Editor {
GraphicsEditor() { type_ = EditorType::kGraphics; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }

View File

@@ -172,7 +172,7 @@ absl::Status DisplayPalette(gfx::SnesPalette& palette, bool loaded) {
void PaletteEditor::Initialize() {}
absl::Status PaletteEditor::Update() {
absl::Status PaletteEditor::Load() {
if (rom()->is_loaded()) {
// Initialize the labels
for (int i = 0; i < kNumPalettes; i++) {
@@ -183,7 +183,10 @@ absl::Status PaletteEditor::Update() {
} else {
return absl::NotFoundError("ROM not open, no palettes to display");
}
return absl::OkStatus();
}
absl::Status PaletteEditor::Update() {
if (BeginTable("paletteEditorTable", 2, kPaletteTableFlags, ImVec2(0, 0))) {
TableSetupColumn("Palette Groups", ImGuiTableColumnFlags_WidthStretch,
GetContentRegionAvail().x);

View File

@@ -85,9 +85,8 @@ class PaletteEditor : public SharedRom, public Editor {
}
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Cut() override { return absl::OkStatus(); }
absl::Status Copy() override { return absl::OkStatus(); }
absl::Status Paste() override { return absl::OkStatus(); }

View File

@@ -28,6 +28,8 @@ constexpr uint32_t kRedPen = 0xFF0000FF;
void ScreenEditor::Initialize() {}
absl::Status ScreenEditor::Load() { return absl::OkStatus(); }
absl::Status ScreenEditor::Update() {
if (ImGui::BeginTabBar("##ScreenEditorTabBar")) {
if (ImGui::BeginTabItem("Dungeon Maps")) {

View File

@@ -39,9 +39,8 @@ class ScreenEditor : public SharedRom, public Editor {
}
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }
absl::Status Cut() override { return absl::UnimplementedError("Cut"); }

View File

@@ -85,6 +85,10 @@ void MessageEditor::Initialize() {
DrawMessagePreview();
}
absl::Status MessageEditor::Load() {
return absl::OkStatus();
}
absl::Status MessageEditor::Update() {
if (rom()->is_loaded() && !data_loaded_) {
Initialize();

View File

@@ -38,6 +38,7 @@ class MessageEditor : public Editor, public SharedRom {
MessageEditor() { type_ = EditorType::kMessage; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
void DrawMessageList();
void DrawCurrentMessage();

View File

@@ -11,6 +11,10 @@ namespace editor {
void MusicEditor::Initialize() {}
absl::Status MusicEditor::Load() {
return absl::OkStatus();
}
absl::Status MusicEditor::Update() {
if (ImGui::BeginTable("MusicEditorColumns", 2, music_editor_flags_,
ImVec2(0, 0))) {

View File

@@ -48,8 +48,8 @@ static constexpr absl::string_view kSongNotes[] = {
const ImGuiTableFlags toolset_table_flags_ = ImGuiTableFlags_SizingFixedFit;
const ImGuiTableFlags music_editor_flags_ = ImGuiTableFlags_SizingFixedFit |
ImGuiTableFlags_Resizable |
ImGuiTableFlags_Reorderable;
ImGuiTableFlags_Resizable |
ImGuiTableFlags_Reorderable;
/**
* @class MusicEditor
* @brief A class for editing music data in a Rom.
@@ -59,6 +59,7 @@ class MusicEditor : public SharedRom, public Editor {
MusicEditor() { type_ = EditorType::kMusic; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }

View File

@@ -59,14 +59,48 @@ using ImGui::Text;
constexpr int kTile16Size = 0x10;
void OverworldEditor::Initialize() {
// Load zeml string from layouts/overworld.zeml
std::string layout = gui::zeml::LoadFile("overworld.zeml");
// Parse the zeml string into a Node object
layout_node_ = gui::zeml::Parse(layout);
gui::zeml::Bind(&*layout_node_.GetNode("OverworldCanvas"),
[this]() { DrawOverworldCanvas(); });
gui::zeml::Bind(&*layout_node_.GetNode("OverworldTileSelector"),
[this]() { status_ = DrawTileSelector(); });
gui::zeml::Bind(&*layout_node_.GetNode("OwUsageStats"), [this]() {
if (rom_.is_loaded()) {
status_ = UpdateUsageStats();
}
});
gui::zeml::Bind(&*layout_node_.GetNode("owToolset"),
[this]() { DrawToolset(); });
gui::zeml::Bind(&*layout_node_.GetNode("OwTile16Editor"), [this]() {
if (rom_.is_loaded()) {
status_ = tile16_editor_.Update();
}
});
gui::zeml::Bind(&*layout_node_.GetNode("OwGfxGroupEditor"), [this]() {
if (rom_.is_loaded()) {
status_ = gfx_group_editor_.Update();
}
});
}
absl::Status OverworldEditor::Load() {
RETURN_IF_ERROR(
tile16_editor_.Initialize(tile16_blockset_bmp_, current_gfx_bmp_,
*overworld_.mutable_all_tiles_types()));
ASSIGN_OR_RETURN(entrance_tiletypes_, zelda3::LoadEntranceTileTypes(rom_));
all_gfx_loaded_ = true;
return absl::OkStatus();
}
absl::Status OverworldEditor::Update() {
status_ = absl::OkStatus();
if (rom_.is_loaded() && !all_gfx_loaded_) {
RETURN_IF_ERROR(
tile16_editor_.Initialize(tile16_blockset_bmp_, current_gfx_bmp_,
*overworld_.mutable_all_tiles_types()));
ASSIGN_OR_RETURN(entrance_tiletypes_, zelda3::LoadEntranceTileTypes(rom_));
all_gfx_loaded_ = true;
RETURN_IF_ERROR(Load());
}
if (overworld_canvas_fullscreen_) {
@@ -1484,34 +1518,5 @@ void OverworldEditor::DrawDebugWindow() {
}
}
void OverworldEditor::Initialize() {
// Load zeml string from layouts/overworld.zeml
std::string layout = gui::zeml::LoadFile("overworld.zeml");
// Parse the zeml string into a Node object
layout_node_ = gui::zeml::Parse(layout);
gui::zeml::Bind(&*layout_node_.GetNode("OverworldCanvas"),
[this]() { DrawOverworldCanvas(); });
gui::zeml::Bind(&*layout_node_.GetNode("OverworldTileSelector"),
[this]() { status_ = DrawTileSelector(); });
gui::zeml::Bind(&*layout_node_.GetNode("OwUsageStats"), [this]() {
if (rom_.is_loaded()) {
status_ = UpdateUsageStats();
}
});
gui::zeml::Bind(&*layout_node_.GetNode("owToolset"),
[this]() { DrawToolset(); });
gui::zeml::Bind(&*layout_node_.GetNode("OwTile16Editor"), [this]() {
if (rom_.is_loaded()) {
status_ = tile16_editor_.Update();
}
});
gui::zeml::Bind(&*layout_node_.GetNode("OwGfxGroupEditor"), [this]() {
if (rom_.is_loaded()) {
status_ = gfx_group_editor_.Update();
}
});
}
} // namespace editor
} // namespace yaze

View File

@@ -77,7 +77,7 @@ class OverworldEditor : public Editor, public gfx::GfxContext {
OverworldEditor(Rom& rom) : rom_(rom) { type_ = EditorType::kOverworld; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() final;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }

View File

@@ -23,6 +23,10 @@ using ImGui::Text;
void SpriteEditor::Initialize() {}
absl::Status SpriteEditor::Load() {
return absl::OkStatus();
}
absl::Status SpriteEditor::Update() {
if (rom()->is_loaded() && !sheets_loaded_) {
// Load the values for current_sheets_ array

View File

@@ -38,6 +38,7 @@ class SpriteEditor : public SharedRom, public Editor {
SpriteEditor() { type_ = EditorType::kSprite; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }

View File

@@ -23,6 +23,10 @@ using ImGui::TableSetupColumn;
void SettingsEditor::Initialize() {}
absl::Status SettingsEditor::Load() {
return absl::OkStatus();
}
absl::Status SettingsEditor::Update() {
if (BeginTabBar("Settings", ImGuiTabBarFlags_None)) {
if (BeginTabItem("General")) {

View File

@@ -209,6 +209,7 @@ class SettingsEditor : public Editor {
public:
SettingsEditor() : Editor() { type_ = EditorType::kSettings; }
void Initialize() override;
absl::Status Load() override;
absl::Status Update() override;
absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
absl::Status Redo() override { return absl::UnimplementedError("Redo"); }