yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
ui_coordinator.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_UI_UI_COORDINATOR_H_
2#define YAZE_APP_EDITOR_UI_UI_COORDINATOR_H_
3
4#include <memory>
5#include <string>
6
7#include "absl/status/status.h"
8#include "app/editor/editor.h"
11#include "app/gui/core/icons.h"
12#include "app/startup_flags.h"
13
14namespace yaze {
15namespace editor {
16
25enum class StartupSurface {
26 kWelcome, // No ROM, showing onboarding
27 kDashboard, // ROM loaded, no active editor
28 kEditor, // Active editor/category
29};
30
31// Forward declarations to avoid circular dependencies
32class EditorManager;
33class RomFileManager;
34class ProjectManager;
35class EditorRegistry;
36class SessionCoordinator;
37class ToastManager;
38class WindowDelegate;
39class ShortcutManager;
40
57 public:
58 // Constructor takes references to the managers it coordinates with
59 UICoordinator(EditorManager* editor_manager, RomFileManager& rom_manager,
60 ProjectManager& project_manager,
61 EditorRegistry& editor_registry,
62 PanelManager& card_registry,
63 SessionCoordinator& session_coordinator,
64 WindowDelegate& window_delegate, ToastManager& toast_manager,
65 PopupManager& popup_manager, ShortcutManager& shortcut_manager);
66 ~UICoordinator() = default;
67
68 // Non-copyable due to reference members
69 UICoordinator(const UICoordinator&) = delete;
71
72 // Main UI drawing interface
73 void DrawBackground();
74 void DrawAllUI();
75 void DrawMenuBarExtras();
76 void DrawNotificationBell(bool show_dirty, bool has_dirty_rom,
77 bool show_session, bool has_multiple_sessions);
78 void DrawSessionButton();
79
80 // Core UI components (actual ImGui rendering moved from EditorManager)
81 void DrawCommandPalette();
82 void DrawGlobalSearch();
84
85 // Session UI components
89 void DrawLayoutPresets();
90
91 // Welcome screen and project UI
92 void DrawWelcomeScreen();
93 void DrawProjectHelp();
94
95 // Window management UI
97
98 // Popup and dialog management
99 void DrawAllPopups();
100 void ShowPopup(const std::string& popup_name);
101 void HidePopup(const std::string& popup_name);
102
103 // UI state management
105 void ShowDisplaySettings();
108 // Session switcher is now managed by SessionCoordinator
109 void ShowSessionSwitcher();
111 // Sidebar visibility delegates to PanelManager (single source of truth)
112 void TogglePanelSidebar();
116
117 // Menu bar visibility (for WASM/web app mode)
118 bool IsMenuBarVisible() const { return show_menu_bar_; }
119 void SetMenuBarVisible(bool visible) { show_menu_bar_ = visible; }
121
122 // Draw floating menu bar restore button (when menu bar is hidden)
124
125 // Window visibility management
126 void ShowAllWindows();
127 void HideAllWindows();
128
129 // UI state queries (EditorManager can check these)
132 // Session switcher visibility managed by SessionCoordinator
133 bool IsSessionSwitcherVisible() const;
144 // Sidebar visibility delegates to PanelManager (single source of truth)
145 bool IsPanelSidebarVisible() const;
146 bool IsImGuiDemoVisible() const { return show_imgui_demo_; }
148 // Emulator visibility delegates to PanelManager (single source of truth)
149 bool IsEmulatorVisible() const;
151 bool IsAsmEditorVisible() const { return show_asm_editor_; }
156 bool IsAIAgentVisible() const { return show_ai_agent_; }
159
160 // UI state setters (for programmatic control)
161 void SetEditorSelectionVisible(bool visible) {
162 show_editor_selection_ = visible;
163 }
164 void SetDisplaySettingsVisible(bool visible) {
165 show_display_settings_ = visible;
166 }
167 // Session switcher state managed by SessionCoordinator
168 void SetSessionSwitcherVisible(bool visible);
169 void SetWelcomeScreenVisible(bool visible) { show_welcome_screen_ = visible; }
174 void SetGlobalSearchVisible(bool visible) { show_global_search_ = visible; }
177 }
178 void SetPanelBrowserVisible(bool visible) { show_panel_browser_ = visible; }
179 void SetCommandPaletteVisible(bool visible) {
180 show_command_palette_ = visible;
181 }
182 // Sidebar visibility delegates to PanelManager (single source of truth)
183 void SetPanelSidebarVisible(bool visible);
184 void SetImGuiDemoVisible(bool visible) { show_imgui_demo_ = visible; }
185 void SetImGuiMetricsVisible(bool visible) { show_imgui_metrics_ = visible; }
186 // Emulator visibility delegates to PanelManager (single source of truth)
187 void SetEmulatorVisible(bool visible);
188 void SetMemoryEditorVisible(bool visible) { show_memory_editor_ = visible; }
189 void SetAsmEditorVisible(bool visible) { show_asm_editor_ = visible; }
190 void SetPaletteEditorVisible(bool visible) { show_palette_editor_ = visible; }
193 }
195 void SetAIAgentVisible(bool visible) { show_ai_agent_ = visible; }
196
197 // Startup surface management (single source of truth)
199 void SetStartupSurface(StartupSurface surface);
200 bool ShouldShowWelcome() const;
201 bool ShouldShowDashboard() const;
202 bool ShouldShowActivityBar() const;
203 void SetChatHistoryVisible(bool visible) { show_chat_history_ = visible; }
204 void SetProposalDrawerVisible(bool visible) { show_proposal_drawer_ = visible; }
205
206 // Note: Theme styling is handled by ThemeManager, not UICoordinator
207
208 private:
209 // References to coordinated managers
220
221 // UI state flags (UICoordinator owns all UI visibility state)
224 // show_session_switcher_ removed - managed by SessionCoordinator
229 bool show_imgui_demo_ = false;
234 // show_emulator_ removed - now managed by PanelManager
235 // show_panel_sidebar_ removed - now managed by PanelManager
237 bool show_asm_editor_ = false;
240 bool show_ai_agent_ = false;
241 bool show_chat_history_ = false;
245 bool show_menu_bar_ = true; // Menu bar visible by default
248
249 // Single source of truth for startup surface state
251
252 // Command Palette state
255
256 // Global Search state
257 char global_search_query_[256] = {};
258
259 // Welcome screen component
260 std::unique_ptr<WelcomeScreen> welcome_screen_;
261
262
263 // Menu bar icon button helper - provides consistent styling for all menubar buttons
264 // Returns true if button was clicked
265 bool DrawMenuBarIconButton(const char* icon, const char* tooltip,
266 bool is_active = false);
267
268 // Calculate width of a menubar icon button (icon + frame padding)
269 static float GetMenuBarIconButtonWidth();
270
271 // Material Design component helpers
272 void DrawMaterialButton(const std::string& text, const std::string& icon,
273 const ImVec4& color, std::function<void()> callback,
274 bool enabled = true);
275
276 // Layout and positioning helpers
277 void CenterWindow(const std::string& window_name);
278 void PositionWindow(const std::string& window_name, float x, float y);
279 void SetWindowSize(const std::string& window_name, float width, float height);
280
281};
282
283} // namespace editor
284} // namespace yaze
285
286#endif // YAZE_APP_EDITOR_UI_UI_COORDINATOR_H_
The EditorManager controls the main editor window and manages the various editor classes.
Manages editor types, categories, and lifecycle.
Central registry for all editor cards with session awareness and dependency injection.
Handles all project file operations with ROM-first workflow.
Handles all ROM file I/O operations.
High-level orchestrator for multi-session UI.
Handles all UI drawing operations and state management.
ShortcutManager & shortcut_manager_
void DrawMaterialButton(const std::string &text, const std::string &icon, const ImVec4 &color, std::function< void()> callback, bool enabled=true)
void SetPanelSidebarVisible(bool visible)
void SetPerformanceDashboardVisible(bool visible)
void SetSessionSwitcherVisible(bool visible)
void SetGlobalSearchVisible(bool visible)
void HidePopup(const std::string &popup_name)
void SetStartupSurface(StartupSurface surface)
bool IsPerformanceDashboardVisible() const
SessionCoordinator & session_coordinator_
UICoordinator(EditorManager *editor_manager, RomFileManager &rom_manager, ProjectManager &project_manager, EditorRegistry &editor_registry, PanelManager &card_registry, SessionCoordinator &session_coordinator, WindowDelegate &window_delegate, ToastManager &toast_manager, PopupManager &popup_manager, ShortcutManager &shortcut_manager)
void SetWelcomeScreenManuallyClosed(bool closed)
void SetMemoryEditorVisible(bool visible)
void SetResourceLabelManagerVisible(bool visible)
void SetEmulatorVisible(bool visible)
void SetPanelBrowserVisible(bool visible)
void DrawNotificationBell(bool show_dirty, bool has_dirty_rom, bool show_session, bool has_multiple_sessions)
void SetAsmEditorVisible(bool visible)
void SetWelcomeScreenVisible(bool visible)
WindowDelegate & window_delegate_
bool DrawMenuBarIconButton(const char *icon, const char *tooltip, bool is_active=false)
void ShowPopup(const std::string &popup_name)
ProjectManager & project_manager_
StartupVisibility welcome_behavior_override_
UICoordinator & operator=(const UICoordinator &)=delete
bool IsResourceLabelManagerVisible() const
bool IsWelcomeScreenManuallyClosed() const
StartupVisibility dashboard_behavior_override_
StartupSurface current_startup_surface_
void PositionWindow(const std::string &window_name, float x, float y)
void SetWindowSize(const std::string &window_name, float width, float height)
UICoordinator(const UICoordinator &)=delete
void SetWelcomeScreenBehavior(StartupVisibility mode)
void SetImGuiDemoVisible(bool visible)
void SetChatHistoryVisible(bool visible)
void SetPaletteEditorVisible(bool visible)
void SetDisplaySettingsVisible(bool visible)
void SetDashboardBehavior(StartupVisibility mode)
void SetCommandPaletteVisible(bool visible)
void SetMenuBarVisible(bool visible)
void SetAIAgentVisible(bool visible)
std::unique_ptr< WelcomeScreen > welcome_screen_
void SetImGuiMetricsVisible(bool visible)
static float GetMenuBarIconButtonWidth()
void SetEditorSelectionVisible(bool visible)
void SetProposalDrawerVisible(bool visible)
StartupSurface GetCurrentStartupSurface() const
EditorRegistry & editor_registry_
void CenterWindow(const std::string &window_name)
Low-level window operations with minimal dependencies.
StartupSurface
Represents the current startup surface state.
StartupVisibility
Tri-state toggle used for startup UI visibility controls.