yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
layout_orchestrator.cc
Go to the documentation of this file.
2
3#include "absl/strings/str_format.h"
4
5namespace yaze {
6namespace editor {
7
9 PanelManager* panel_manager)
10 : layout_manager_(layout_manager), panel_manager_(panel_manager) {}
11
17
18void LayoutOrchestrator::ApplyPreset(EditorType type, size_t session_id) {
19 if (!IsInitialized()) {
20 return;
21 }
22
23 // Get the default preset for this editor type
24 auto preset = LayoutPresets::GetDefaultPreset(type);
25
26 // Show default panels
27 ShowPresetPanels(preset, session_id, type);
28
29 // Hide optional panels
30 HideOptionalPanels(type, session_id);
31
32 // Apply DockBuilder layout
33 ApplyDockLayout(type);
34}
35
36void LayoutOrchestrator::ApplyNamedPreset(const std::string& preset_name,
37 size_t session_id) {
38 if (!IsInitialized()) {
39 return;
40 }
41
42 PanelLayoutPreset preset;
43 if (preset_name == "Minimal") {
45 } else if (preset_name == "Developer") {
47 } else if (preset_name == "Designer") {
49 } else if (preset_name == "Modder") {
51 } else {
52 // Unknown preset, use minimal
54 }
55
56 ShowPresetPanels(preset, session_id, EditorType::kUnknown);
58}
59
60void LayoutOrchestrator::ResetToDefault(EditorType type, size_t session_id) {
61 ApplyPreset(type, session_id);
63}
64
66 const std::string& card_id, size_t session_id) const {
67 if (!panel_manager_) {
68 return "";
69 }
70
71 auto* info = panel_manager_->GetPanelDescriptor(session_id, card_id);
72 if (info) {
73 return info->GetWindowTitle();
74 }
75
76 return "";
77}
78
79std::vector<std::string> LayoutOrchestrator::GetVisiblePanels(
80 size_t session_id) const {
81 // Return empty since this requires more complex session handling
82 // This can be implemented later when session-aware panel visibility is needed
83 return {};
84}
85
87 size_t session_id,
88 EditorType editor_type) {
89 if (!panel_manager_) {
90 return;
91 }
92
93 for (const auto& panel_id : preset.default_visible_panels) {
94 panel_manager_->ShowPanel(session_id, panel_id);
95 }
96}
97
99 size_t session_id) {
100 if (!panel_manager_) {
101 return;
102 }
103
104 auto preset = LayoutPresets::GetDefaultPreset(type);
105 for (const auto& panel_id : preset.optional_panels) {
106 panel_manager_->HidePanel(session_id, panel_id);
107 }
108}
109
116
118 if (!layout_manager_) {
119 return;
120 }
121
122 // Map EditorType to LayoutType
123 LayoutType layout_type = LayoutType::kDefault;
124 switch (type) {
126 layout_type = LayoutType::kOverworld;
127 break;
129 layout_type = LayoutType::kDungeon;
130 break;
132 layout_type = LayoutType::kGraphics;
133 break;
135 layout_type = LayoutType::kPalette;
136 break;
138 layout_type = LayoutType::kSprite;
139 break;
141 layout_type = LayoutType::kScreen;
142 break;
144 layout_type = LayoutType::kMusic;
145 break;
147 layout_type = LayoutType::kMessage;
148 break;
150 layout_type = LayoutType::kAssembly;
151 break;
153 layout_type = LayoutType::kSettings;
154 break;
156 layout_type = LayoutType::kEmulator;
157 break;
158 default:
159 layout_type = LayoutType::kDefault;
160 break;
161 }
162
163 layout_manager_->SetLayoutType(layout_type);
165}
166
168 const std::string& card_id, size_t session_id) const {
169 if (panel_manager_) {
170 return panel_manager_->MakePanelId(session_id, card_id);
171 }
172 if (session_id == 0) {
173 return card_id;
174 }
175 return absl::StrFormat("s%zu.%s", session_id, card_id);
176}
177
178} // namespace editor
179} // namespace yaze
Manages ImGui DockBuilder layouts for each editor type.
void SetLayoutType(LayoutType type)
Set the current layout type for rebuild.
void RequestRebuild()
Request a layout rebuild on next frame.
std::vector< std::string > GetVisiblePanels(size_t session_id) const
Get all visible panels for a session.
void ResetToDefault(EditorType type, size_t session_id=0)
Reset to default layout for an editor type.
bool IsInitialized() const
Check if orchestrator is properly initialized.
PanelManager * panel_manager()
Get the card registry.
void ApplyDockLayout(EditorType type)
Apply DockBuilder layout for an editor type.
void RequestLayoutRebuild()
Request layout rebuild on next frame.
std::string GetPrefixedPanelId(const std::string &card_id, size_t session_id) const
Get prefixed card ID for a session.
void ApplyPreset(EditorType type, size_t session_id=0)
Apply the default layout preset for an editor type.
void HideOptionalPanels(EditorType type, size_t session_id=0)
Hide all optional panels for an editor type.
void ApplyNamedPreset(const std::string &preset_name, size_t session_id=0)
Apply a named workspace preset (Developer, Designer, Modder)
LayoutManager * layout_manager()
Get the layout manager.
void Initialize(LayoutManager *layout_manager, PanelManager *panel_manager)
Initialize with dependencies.
std::string GetWindowTitle(const std::string &card_id, size_t session_id=0) const
Get window title for a card from the registry.
void ShowPresetPanels(const PanelLayoutPreset &preset, size_t session_id, EditorType editor_type)
Show panels specified in a preset.
static PanelLayoutPreset GetDesignerPreset()
Get the "designer" workspace preset (visual-focused)
static PanelLayoutPreset GetDefaultPreset(EditorType type)
Get the default layout preset for an editor type.
static PanelLayoutPreset GetModderPreset()
Get the "modder" workspace preset (full-featured)
static PanelLayoutPreset GetMinimalPreset()
Get the "minimal" workspace preset (minimal cards)
static PanelLayoutPreset GetDeveloperPreset()
Get the "developer" workspace preset (debug-focused)
Central registry for all editor cards with session awareness and dependency injection.
const PanelDescriptor * GetPanelDescriptor(size_t session_id, const std::string &base_card_id) const
bool ShowPanel(size_t session_id, const std::string &base_card_id)
std::string MakePanelId(size_t session_id, const std::string &base_id) const
bool HidePanel(size_t session_id, const std::string &base_card_id)
LayoutType
Predefined layout types for different editor workflows.
std::string GetWindowTitle() const
Get the effective window title for DockBuilder.
Defines default panel visibility for an editor type.
std::vector< std::string > default_visible_panels