1#ifndef YAZE_APP_EDITOR_DUNGEON_WORKSPACE_DUNGEON_WORKBENCH_CONTENT_H
2#define YAZE_APP_EDITOR_DUNGEON_WORKSPACE_DUNGEON_WORKBENCH_CONTENT_H
10#include <unordered_map>
28class DungeonCanvasViewer;
30class DungeonEntrancesPanel;
31class DungeonRoomSelector;
32class RoomMatrixContent;
33class CustomCollisionPanel;
34class MinecartTrackEditorPanel;
35class RoomTagEditorPanel;
74 float total_width,
float min_canvas_width,
float min_sidebar_width,
75 float splitter_width,
bool want_left,
bool want_right);
78 float total_width,
float min_canvas_width,
float min_sidebar_width,
79 float splitter_width,
float stored_left_width,
float stored_right_width,
80 bool want_left,
bool want_right);
86 bool standalone_window_open);
93 std::function<
void(
int)> on_room_selected,
95 on_room_selected_with_intent,
96 std::function<
void(
int)> on_save_room,
97 std::function<
void()> on_save_all_rooms,
100 std::function<
const std::deque<int>&()> get_recent_rooms,
101 std::function<
void(
int)> forget_recent_room,
102 std::function<
void(
bool)> set_workflow_mode,
Rom* rom =
nullptr);
105 std::string
GetId()
const override;
107 std::string
GetIcon()
const override;
135 std::function<
bool(
const std::string&)> is_window_open,
136 std::function<
bool(
const std::string&)> open_and_focus_window) {
212 std::function<
bool()> can_redo,
213 std::function<
void()> on_undo,
214 std::function<
void()> on_redo,
215 std::function<std::string()> undo_desc,
216 std::function<std::string()> redo_desc,
217 std::function<
int()> undo_depth) {
227 void Draw(
bool* p_open)
override;
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
WindowContent for displaying and editing dungeon entrances.
WindowContent for displaying multiple rooms in a spatial dungeon layout.
Handles room and entrance selection UI.
void DrawInspector(DungeonCanvasViewer &viewer, bool compact)
bool room_dungeon_cache_built_
void DrawInspectorShelfSelection(DungeonCanvasViewer &viewer)
std::function< void(int)> on_room_selected_
void SetAllSaveFlags(bool value)
const char * GetActiveToolIdForTesting() const
bool IsStandaloneToolOpen(WorkbenchTool tool) const
void SetOpenKeyboardShortcutsCallback(std::function< void()> callback)
DungeonWorkbenchContent(DungeonRoomSelector *room_selector, int *current_room_id, std::function< void(int)> on_room_selected, std::function< void(int, RoomSelectionIntent)> on_room_selected_with_intent, std::function< void(int)> on_save_room, std::function< void()> on_save_all_rooms, std::function< DungeonCanvasViewer *()> get_viewer, std::function< DungeonCanvasViewer *(int)> get_compare_viewer, std::function< const std::deque< int > &()> get_recent_rooms, std::function< void(int)> forget_recent_room, std::function< void(bool)> set_workflow_mode, Rom *rom=nullptr)
DungeonEntrancesPanel * entrance_navigator_content_
bool pit_damage_status_error_
void FocusEntranceBrowser()
void DrawProposalPreviewWindow(DungeonCanvasViewer &viewer)
std::function< bool(const std::string &) is_standalone_tool_open_)
std::function< bool()> can_redo_
int GetPriority() const override
Get display priority for menu ordering.
CustomCollisionPanel * custom_collision_panel_
DungeonWorkbenchPitDamageControlRects pit_damage_control_rects_
void DrawSidebarModeTabs()
void RequestProposalPreview()
SidebarMode sidebar_mode_
uint16_t pit_damage_victim_room_id_
WorkbenchTool active_tool_
void DrawSelectedObjectActions(DungeonCanvasViewer &viewer, size_t index)
void OpenTool(WorkbenchTool tool)
bool IsWorkbenchToolAvailable(WorkbenchTool tool) const
WaterFillPanel * water_fill_panel_
void DrawInspectorHeader(float button_size, bool compact)
void FocusSelectionInspector()
std::function< void()> on_redo_
WindowContent * object_selector_content_
void OpenObjectCoverageTool()
void SetUndoRedoProvider(std::function< bool()> can_undo, std::function< bool()> can_redo, std::function< void()> on_undo, std::function< void()> on_redo, std::function< std::string()> undo_desc, std::function< std::string()> redo_desc, std::function< int()> undo_depth)
void SetPrimaryCanvasDrawnCallback(std::function< void(DungeonCanvasViewer &)> cb)
void DrawSidebarPane(float width, float height, float button_size, bool compact)
DungeonMapPanel * GetEmbeddedDungeonMap(DungeonCanvasViewer &viewer)
void DrawSidebarContent()
InspectorMode inspector_mode_
void DrawPitDamageControlsForTesting(int room_id)
void SetRoomRenderContextCallback(std::function< void(int)> callback)
void DrawInspectorPane(float width, float height, float button_size, bool compact, DungeonCanvasViewer *viewer)
int pit_damage_chooser_room_id_
void SetObjectCoverageContent(WindowContent *object_coverage)
std::string proposal_error_
std::vector< char > proposal_layer_visible_
void DrawInspectorShelfRoom(DungeonCanvasViewer &viewer)
void SetOnInspectorSideChanged(std::function< void(bool)> cb)
WindowContent * GetWorkbenchToolContent(WorkbenchTool tool) const
const char * GetInspectorModeIdForTesting() const
WindowContent * sprite_editor_content_
std::function< int()> undo_depth_
std::function< void()> open_keyboard_shortcuts_
std::string GetEditorCategory() const override
Editor category this panel belongs to.
const DungeonWorkbenchPitDamageControlRects & GetPitDamageControlRectsForTesting() const
std::optional< DungeonProposalOverlay > proposal_overlay_
void OpenRoomGraphicsTool()
std::function< std::string()> undo_desc_
void FocusRoomInspector()
std::function< bool()> can_undo_
RoomTagEditorPanel * room_tag_panel_
void DrawPitDamageControls(int room_id)
void DrawWorkbenchTool(DungeonCanvasViewer &viewer, WorkbenchTool tool)
DungeonRoomSelector * room_selector_
void DrawSidebarHeader(float button_size, bool compact)
std::function< void()> on_undo_
const char * GetWorkbenchToolShortLabel(WorkbenchTool tool) const
std::function< std::string()> redo_desc_
void DrawDungeonMapPopup(DungeonCanvasViewer &viewer)
std::unique_ptr< DungeonMapPanel > embedded_dungeon_map_
char compare_search_buf_[64]
char proposal_path_[1024]
bool IsInspectorOnLeft() const
void SetStandaloneToolCallbacks(std::function< bool(const std::string &)> is_window_open, std::function< bool(const std::string &)> open_and_focus_window)
void DrawInspectorToolPanel(DungeonCanvasViewer &viewer)
WindowContent * item_editor_content_
std::function< void(int, RoomSelectionIntent)> on_room_selected_with_intent_
void SetEmbeddedEditorPanels(WindowContent *object_selector, WindowContent *door_editor, WindowContent *sprite_editor, WindowContent *item_editor, WindowContent *room_graphics, WindowContent *palette_editor)
MinecartTrackEditorPanel * minecart_track_panel_
void SetEmbeddedToolPanels(RoomTagEditorPanel *room_tags, CustomCollisionPanel *custom_collision, WaterFillPanel *water_fill, MinecartTrackEditorPanel *minecart_tracks)
void DrawCanvasPane(float width, float height, DungeonCanvasViewer *primary_viewer)
std::function< void(DungeonCanvasViewer &) on_primary_canvas_drawn_)
const char * GetWorkbenchToolId(WorkbenchTool tool) const
const char * GetWorkbenchToolUnavailableMessage(WorkbenchTool tool) const
std::function< void(int)> on_save_room_
void NotifyRoomChanged(int previous_room_id)
Called by the editor when the current room changes.
std::string GetWorkflowGroup() const override
Optional workflow group for hack-centric actions.
bool DrawObjectPlacementInspector(DungeonCanvasViewer &viewer)
const char * GetSidebarModeIdForTesting() const
WindowContent * palette_editor_content_
WindowContent * room_graphics_content_
std::string pit_damage_status_message_
std::string GetId() const override
Unique identifier for this panel.
bool LoadProposalOverlay(const std::string &path)
void DrawSplitView(DungeonCanvasViewer &primary_viewer)
void OpenObjectSelectorTool()
RoomMatrixContent * room_matrix_content_
std::function< zelda3::PitDamageTable *()> get_pit_damage_table_
void CloseToolInspector()
std::function< void(int)> prepare_room_render_context_
std::function< void()> on_save_all_rooms_
WindowContent * object_coverage_content_
std::function< void(bool)> set_workflow_mode_
void ShowConnectedGraph()
std::string GetIcon() const override
Material Design icon for this panel.
const std::string & proposal_error() const
std::function< DungeonCanvasViewer *(int)> get_compare_viewer_
std::unordered_map< int, std::string > room_dungeon_cache_
void SetInspectorOnLeft(bool on_left)
std::string GetDisplayName() const override
Human-readable name shown in menus and title bars.
void SetAllSaveFlagsForTesting(bool value)
void RequestDungeonMapPopup()
std::function< void(bool)> on_inspector_side_changed_
~DungeonWorkbenchContent() override
void DrawApplyScopeControls(int room_id)
uint16_t pit_damage_replacement_room_id_
void Draw(bool *p_open) override
Draw the panel content.
void OpenCustomCollisionTool()
DungeonWorkbenchLayoutState layout_state_
bool open_dungeon_map_popup_
bool proposal_show_overlay_
bool show_proposal_preview_
void SetPitDamageTableProvider(std::function< zelda3::PitDamageTable *()> provider)
std::function< bool(const std::string &) open_and_focus_standalone_tool_)
bool IsToolInspectorActiveForTesting() const
std::function< void(int)> forget_recent_room_
std::function< const std::deque< int > &()> get_recent_rooms_
void DrawInspectorToolPicker()
const std::optional< DungeonProposalOverlay > & proposal_overlay() const
friend class DungeonWorkbenchContentTestPeer
float navigator_tools_fraction_
void SetNavigationPanels(RoomMatrixContent *room_matrix, DungeonEntrancesPanel *entrances)
void DrawInspectorShelf(DungeonCanvasViewer &viewer, bool compact)
void BuildRoomDungeonCache()
std::function< DungeonCanvasViewer *()> get_viewer_
WindowContent * door_editor_content_
WindowContent for displaying a visual 16x19 grid of all dungeon rooms.
WindowContent showing all room tag slots and their usage across rooms.
Base interface for all logical window content components.
Editors are the view controllers for the application.
DungeonWorkbenchPaneLayout ResolveDungeonWorkbenchPaneLayout(float total_width, float min_canvas_width, float min_sidebar_width, float splitter_width, float stored_left_width, float stored_right_width, bool want_left, bool want_right)
RoomSelectionIntent
Intent for room selection in the dungeon editor.
DungeonWorkbenchResponsiveLayout ResolveDungeonWorkbenchResponsiveLayout(float total_width, float min_canvas_width, float min_sidebar_width, float splitter_width, bool want_left, bool want_right)
DungeonWorkbenchToolRequestTarget
DungeonWorkbenchToolRequestTarget ResolveDungeonWorkbenchToolRequestTarget(bool standalone_window_open)
Zelda 3 specific classes and functions.
DungeonWorkbenchResponsiveLayout responsive
DungeonWorkbenchTestRect replace_current
DungeonWorkbenchTestRect add_current