1#ifndef YAZE_APP_EDITOR_DUNGEON_WORKSPACE_DUNGEON_WORKBENCH_CONTENT_H
2#define YAZE_APP_EDITOR_DUNGEON_WORKSPACE_DUNGEON_WORKBENCH_CONTENT_H
9#include <unordered_map>
25class DungeonCanvasViewer;
27class DungeonRoomSelector;
28class CustomCollisionPanel;
29class MinecartTrackEditorPanel;
30class RoomTagEditorPanel;
69 float total_width,
float min_canvas_width,
float min_sidebar_width,
70 float splitter_width,
bool want_left,
bool want_right);
73 float total_width,
float min_canvas_width,
float min_sidebar_width,
74 float splitter_width,
float stored_left_width,
float stored_right_width,
75 bool want_left,
bool want_right);
83 bool standalone_window_open);
90 std::function<
void(
int)> on_room_selected,
92 on_room_selected_with_intent,
93 std::function<
void(
int)> on_save_room,
94 std::function<
void()> on_save_all_rooms,
97 std::function<
const std::deque<int>&()> get_recent_rooms,
98 std::function<
void(
int)> forget_recent_room,
99 std::function<
void(
bool)> set_workflow_mode,
Rom* rom =
nullptr);
102 std::string
GetId()
const override;
104 std::string
GetIcon()
const override;
121 std::function<
bool(
const std::string&)> is_window_open,
122 std::function<
bool(
const std::string&)> open_and_focus_window) {
187 std::function<
bool()> can_redo,
188 std::function<
void()> on_undo,
189 std::function<
void()> on_redo,
190 std::function<std::string()> undo_desc,
191 std::function<std::string()> redo_desc,
192 std::function<
int()> undo_depth) {
202 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 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)
bool pit_damage_status_error_
void FocusEntranceBrowser()
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_
SidebarMode sidebar_mode_
uint16_t pit_damage_victim_room_id_
WorkbenchTool active_tool_
void OpenTool(WorkbenchTool tool)
bool IsWorkbenchToolAvailable(WorkbenchTool tool) const
WaterFillPanel * water_fill_panel_
void DrawInspectorHeader(float button_size, bool compact)
void FocusSelectionInspector()
void DrawInspectorCompactSummary(DungeonCanvasViewer &viewer)
void DrawSidebarModeTabs(bool stacked, float segment_height)
std::function< void()> on_redo_
void DrawInspectorPrimarySelector(float segment_height)
WindowContent * object_selector_content_
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 DrawInspectorPane(float width, float height, float button_size, bool compact, DungeonCanvasViewer *viewer)
void DrawInspectorShelfRoom(DungeonCanvasViewer &viewer)
void SetOnInspectorSideChanged(std::function< void(bool)> cb)
InspectorMode inspector_mode_before_tools_
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
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]
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
bool inspector_selection_was_active_
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.
WindowContent * palette_editor_content_
WindowContent * room_graphics_content_
std::string pit_damage_status_message_
std::string GetId() const override
Unique identifier for this panel.
void DrawSplitView(DungeonCanvasViewer &primary_viewer)
void OpenObjectSelectorTool()
std::function< zelda3::PitDamageTable *()> get_pit_damage_table_
void CloseToolInspector()
std::function< void()> on_save_all_rooms_
std::function< void(bool)> set_workflow_mode_
void ShowConnectedGraph()
std::string GetIcon() const override
Material Design icon for this panel.
std::function< DungeonCanvasViewer *(int)> get_compare_viewer_
std::unordered_map< int, std::string > room_dungeon_cache_
void SetInspectorOnLeft(bool on_left)
bool compact_inspector_detail_requested_
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_
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()
void DrawInspectorShelf(DungeonCanvasViewer &viewer, bool compact)
void BuildRoomDungeonCache()
void DrawLayerCompositingControls(DungeonCanvasViewer &viewer, int room_id)
std::function< DungeonCanvasViewer *()> get_viewer_
WindowContent * door_editor_content_
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)
bool ResolveCompactInspectorDetailRequest(bool compact, bool detail_requested)
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