Add zeml layout to OverworldEditor
This commit is contained in:
19
assets/layouts/overworld.zeml
Normal file
19
assets/layouts/overworld.zeml
Normal file
@@ -0,0 +1,19 @@
|
||||
BeginTabBar title="##OwEditorTabBar" {
|
||||
BeginTabItem title="Map Editor" {
|
||||
Function id="owToolset",
|
||||
|
||||
Table id="##owEditTable" count="2" flags="Resizable|Reorderable|Hideable|BordersOuter|BordersV" {
|
||||
TableSetupColumn title="Canvas" flags="WidthStretch",
|
||||
TableSetupColumn title="Tile Selector" flags="WidthFixed" width="256",
|
||||
TableHeadersRow
|
||||
TableNextRow,
|
||||
TableNextColumn,
|
||||
Function id="OverworldCanvas",
|
||||
TableNextColumn,
|
||||
Function id="OverworldTileSelector",
|
||||
}
|
||||
}
|
||||
BeginTabItem title="Usage Statistics" {
|
||||
Function id="OwUsageStats"
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,25 @@ using ImGui::TableNextRow;
|
||||
using ImGui::TableSetupColumn;
|
||||
using ImGui::Text;
|
||||
|
||||
void OverworldEditor::InitializeZeml() {
|
||||
// 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]() { status_ = DrawToolset(); });
|
||||
}
|
||||
|
||||
absl::Status OverworldEditor::Update() {
|
||||
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
||||
tile16_editor_.InitBlockset(tile16_blockset_bmp_, current_gfx_bmp_,
|
||||
@@ -57,38 +76,12 @@ absl::Status OverworldEditor::Update() {
|
||||
|
||||
RETURN_IF_ERROR(UpdateFullscreenCanvas());
|
||||
|
||||
TAB_BAR("##OWEditorTabBar")
|
||||
TAB_ITEM("Map Editor")
|
||||
status_ = UpdateOverworldEdit();
|
||||
END_TAB_ITEM()
|
||||
TAB_ITEM("Usage Statistics")
|
||||
if (rom()->is_loaded()) {
|
||||
status_ = UpdateUsageStats();
|
||||
}
|
||||
END_TAB_ITEM()
|
||||
END_TAB_BAR()
|
||||
gui::zeml::Render(layout_node_);
|
||||
|
||||
CLEAR_AND_RETURN_STATUS(status_);
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status OverworldEditor::UpdateOverworldEdit() {
|
||||
RETURN_IF_ERROR(DrawToolset())
|
||||
if (BeginTable(kOWEditTable.data(), 2, kOWEditFlags, ImVec2(0, 0))) {
|
||||
TableSetupColumn("Canvas", ImGuiTableColumnFlags_WidthStretch,
|
||||
ImGui::GetContentRegionAvail().x);
|
||||
TableSetupColumn("Tile Selector", ImGuiTableColumnFlags_WidthFixed, 256);
|
||||
TableHeadersRow();
|
||||
TableNextRow();
|
||||
TableNextColumn();
|
||||
DrawOverworldCanvas();
|
||||
TableNextColumn();
|
||||
RETURN_IF_ERROR(DrawTileSelector());
|
||||
ImGui::EndTable();
|
||||
}
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status OverworldEditor::UpdateFullscreenCanvas() {
|
||||
if (overworld_canvas_fullscreen_) {
|
||||
static bool use_work_area = true;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "app/gui/canvas.h"
|
||||
#include "app/gui/icons.h"
|
||||
#include "app/gui/pipeline.h"
|
||||
#include "app/gui/zeml.h"
|
||||
#include "app/rom.h"
|
||||
#include "app/zelda3/overworld/overworld.h"
|
||||
|
||||
@@ -84,6 +85,8 @@ class OverworldEditor : public Editor,
|
||||
public context::EntranceContext,
|
||||
public core::ExperimentFlags {
|
||||
public:
|
||||
void InitializeZeml();
|
||||
|
||||
absl::Status Update() final;
|
||||
absl::Status Undo() { return absl::UnimplementedError("Undo"); }
|
||||
absl::Status Redo() { return absl::UnimplementedError("Redo"); }
|
||||
@@ -128,7 +131,6 @@ class OverworldEditor : public Editor,
|
||||
absl::Status LoadGraphics();
|
||||
|
||||
private:
|
||||
absl::Status UpdateOverworldEdit();
|
||||
absl::Status UpdateFullscreenCanvas();
|
||||
|
||||
absl::Status DrawToolset();
|
||||
@@ -283,6 +285,7 @@ class OverworldEditor : public Editor,
|
||||
|
||||
gfx::BitmapTable animated_maps_;
|
||||
|
||||
gui::zeml::Node layout_node_;
|
||||
absl::Status status_;
|
||||
};
|
||||
} // namespace editor
|
||||
|
||||
Reference in New Issue
Block a user