yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
menu_orchestrator.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_MENU_MENU_ORCHESTRATOR_H_
2#define YAZE_APP_EDITOR_MENU_MENU_ORCHESTRATOR_H_
3
4#include <functional>
5#include <string>
6
7#include "absl/status/status.h"
8#include "app/editor/editor.h"
13
14namespace yaze {
15namespace editor {
16
17// Forward declarations to avoid circular dependencies
18class EditorManager;
19class RomFileManager;
20class ProjectManager;
21class EditorRegistry;
22class WorkspaceWindowManager;
23class SessionCoordinator;
24class ToastManager;
25class PopupManager;
26class ShortcutManager;
27
44 public:
45 // Constructor takes references to the managers it coordinates with
46 MenuOrchestrator(EditorManager* editor_manager, MenuBuilder& menu_builder,
47 RomFileManager& rom_manager, ProjectManager& project_manager,
48 EditorRegistry& editor_registry,
49 SessionCoordinator& session_coordinator,
50 ToastManager& toast_manager, PopupManager& popup_manager);
51 ~MenuOrchestrator() = default;
52
53 // Set optional dependencies for advanced features
55 window_manager_ = manager;
56 }
57 void SetStatusBar(StatusBar* bar) { status_bar_ = bar; }
58 void SetUserSettings(UserSettings* settings) { user_settings_ = settings; }
59 // Source of truth for menu shortcut labels (see GetShortcutForAction).
60 void SetShortcutManager(const ShortcutManager* manager) {
61 shortcut_manager_ = manager;
62 }
63
64 // Non-copyable due to reference members
67
68 // Main menu building interface
69 void BuildMainMenu();
70 void BuildFileMenu();
71 void BuildEditMenu();
72 void BuildViewMenu();
73 void BuildEditorMenu();
74 // Top-level "Windows" menu — panel toggles, sessions, and layout
75 // management. The legacy top-level "Window" menu has been folded in here as
76 // Sessions ▸ and Layout ▸ submenus.
77 void BuildPanelsMenu();
78 void BuildToolsMenu(); // Also contains former Debug menu items
79 void BuildHelpMenu();
80
81 // Menu state management
82 void ClearMenu();
83 void RefreshMenu();
84
85 // Menu item callbacks (delegated to appropriate managers)
86 void OnOpenRom();
87 void OnSaveRom();
88 void OnSaveRomAs();
89 void OnCreateProject();
90 void OnOpenProject();
92 void OnOpenLyraTerrain();
93 void OnSaveProject();
94 void OnSaveProjectAs();
97 void OnOpenRecentFile(const std::string& path);
98 void OnClearRecentFiles();
99 void OnCloseRom();
100 void OnRevertRom();
101
102 // Edit menu actions (delegate to current editor)
103 void OnUndo();
104 void OnRedo();
105 void OnCut();
106 void OnCopy();
107 void OnPaste();
108 void OnFind();
109
110 // Editor-specific menu actions
111 void OnSwitchToEditor(EditorType editor_type);
113 void OnShowDisplaySettings(); // Display settings popup
114 void OnShowHexEditor();
115 void OnShowPanelBrowser();
116 void OnShowPanelFinder();
117 void OnShowWelcomeScreen();
118 void OnZoomIn();
119 void OnZoomOut();
120 void OnZoomReset();
121 void OnToggleFullscreen();
122
123#ifdef YAZE_BUILD_AGENT_UI
124 void OnShowAIAgent();
125 void OnShowProposalDrawer();
126#endif
127
128 // Session management menu actions
129 void OnCreateNewSession();
134
135 // Window management menu actions
136 void OnShowAllWindows();
137 void OnHideAllWindows();
141 void OnShowLayoutPresets();
145 void OnLoadModderLayout();
146
147 // Tool menu actions
148 void OnShowGlobalSearch();
151 void OnShowImGuiDemo();
152 void OnShowImGuiMetrics();
153 void OnShowMemoryEditor();
155
156 // ROM Analysis menu actions
157 void OnShowRomInfo();
158 void OnCreateBackup();
159 void OnValidateRom();
160
161 // ZSCustomOverworld menu actions
162 void OnCheckRomVersion();
165
166 // Asar Integration menu actions
167 void OnToggleAsarPatch();
168
169 // BPS Patch menu actions
170 void OnExportBpsPatch();
171 void OnApplyBpsPatch();
172
173 // Editor launch actions
175
176#ifdef YAZE_ENABLE_TESTING
177 void OnShowTestDashboard();
178#endif
179
180 // Help menu actions
181 void OnShowAbout();
185 void OnShowCLIUsage();
187 void OnShowContributing();
188 void OnShowWhatsNew();
190
191 // Additional File menu actions
192 void OnShowSettings();
193 void OnQuit();
194
195 private:
196 // References to coordinated managers
205
206 // Optional dependencies for advanced features
211
212 // Menu state
214
215 // "Save Snapshot As..." modal state (lives here because the menu owns the
216 // modal open/close flow; implementation stays in menu_orchestrator.cc).
219
220 // Helper methods for menu construction
221 void AddFileMenuItems();
222 void AddEditMenuItems();
223 void AddViewMenuItems();
225 void AddDrawersMenuItems();
226 void AddPanelsMenuItems(); // Top-level panels menu items
227 void AddToolsMenuItems(); // Also contains former Debug menu items
228 void AddSearchMenuItems();
233 void AddTestingMenuItems();
235 void AddThemeSubmenu();
236 // Submenus that live inside the top-level Windows menu.
237 void AddSessionsSubmenu();
238 void AddLayoutSubmenu();
239 void AddSidebarSubmenu();
240 void AddHelpMenuItems();
241
242 // Menu item validation helpers
243 bool CanSaveRom() const;
244 bool CanSaveProject() const;
245 bool HasActiveRom() const;
246 bool HasActiveProject() const;
247 bool HasProjectFile() const;
248 bool HasCurrentEditor() const;
249 bool HasMultipleSessions() const;
250 // Edit-menu gates: true when a current editor exists and reports it can
251 // perform the action (Editor::CanUndo etc.).
252 bool CurrentEditorCanUndo() const;
253 bool CurrentEditorCanRedo() const;
254 bool CurrentEditorCanCut() const;
255 bool CurrentEditorCanCopy() const;
256 bool CurrentEditorCanPaste() const;
257 bool CurrentEditorCanFind() const;
258
259 // Menu item text generation
260 std::string GetRomFilename() const;
261 std::string GetProjectName() const;
262 std::string GetCurrentEditorName() const;
263
264 // Menu shortcut labels. Returns the display string of the live binding
265 // registered in ShortcutManager under `action` ("Redo", "Save As", ...),
266 // or "" when the action is unbound, so a menu never shows a key that does
267 // not fire.
268 std::string GetShortcutForAction(const std::string& action) const;
269};
270
271} // namespace editor
272} // namespace yaze
273
274#endif // YAZE_APP_EDITOR_MENU_MENU_ORCHESTRATOR_H_
The EditorManager controls the main editor window and manages the various editor classes.
Manages editor types, categories, and lifecycle.
Fluent interface for building ImGui menus with icons.
Handles all menu building and UI coordination logic.
void SetShortcutManager(const ShortcutManager *manager)
void SetUserSettings(UserSettings *settings)
void OnSwitchToEditor(EditorType editor_type)
SessionCoordinator & session_coordinator_
WorkspaceWindowManager * window_manager_
void SetStatusBar(StatusBar *bar)
MenuOrchestrator & operator=(const MenuOrchestrator &)=delete
MenuOrchestrator(EditorManager *editor_manager, MenuBuilder &menu_builder, RomFileManager &rom_manager, ProjectManager &project_manager, EditorRegistry &editor_registry, SessionCoordinator &session_coordinator, ToastManager &toast_manager, PopupManager &popup_manager)
void SetWindowManager(WorkspaceWindowManager *manager)
const ShortcutManager * shortcut_manager_
std::string GetShortcutForAction(const std::string &action) const
void OnOpenRecentFile(const std::string &path)
MenuOrchestrator(const MenuOrchestrator &)=delete
Handles all project file operations with ROM-first workflow.
Handles all ROM file I/O operations.
High-level orchestrator for multi-session UI.
A session-aware status bar displayed at the bottom of the application.
Definition status_bar.h:57
Manages user preferences and settings persistence.
Central registry for all editor cards with session awareness and dependency injection.