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 // Top-level "Windows" menu — panel toggles, sessions, and layout
74 // management. The legacy top-level "Window" menu has been folded in here as
75 // Sessions ▸ and Layout ▸ submenus.
76 void BuildPanelsMenu();
77 void BuildToolsMenu(); // Also contains former Debug menu items
78 void BuildHelpMenu();
79
80 // Menu state management
81 void ClearMenu();
82 void RefreshMenu();
83
84 // Menu item callbacks (delegated to appropriate managers)
85 void OnOpenRom();
86 void OnSaveRom();
87 void OnSaveRomAs();
88 void OnCreateProject();
89 void OnOpenProject();
90 void OnSaveProject();
91 void OnSaveProjectAs();
94 void OnOpenRecentFile(const std::string& path);
95 void OnClearRecentFiles();
96 void OnCloseRom();
97 void OnRevertRom();
98
99 // Edit menu actions (delegate to current editor)
100 void OnUndo();
101 void OnRedo();
102 void OnCut();
103 void OnCopy();
104 void OnPaste();
105 void OnFind();
106
107 // Editor-specific menu actions
108 void OnSwitchToEditor(EditorType editor_type);
110 void OnShowDisplaySettings(); // Display settings popup
111 void OnShowHexEditor();
112 void OnShowPanelBrowser();
113 void OnShowPanelFinder();
114 void OnShowWelcomeScreen();
115 void OnZoomIn();
116 void OnZoomOut();
117 void OnZoomReset();
118 void OnToggleFullscreen();
119
120#ifdef YAZE_BUILD_AGENT_UI
121 void OnShowAIAgent();
122 void OnShowProposalDrawer();
123#endif
124
125 // Session management menu actions
126 void OnCreateNewSession();
131
132 // Window management menu actions
133 void OnShowAllWindows();
134 void OnHideAllWindows();
138 void OnShowLayoutPresets();
142 void OnLoadModderLayout();
143
144 // Tool menu actions
145 void OnShowGlobalSearch();
148 void OnShowImGuiDemo();
149 void OnShowImGuiMetrics();
150 void OnShowMemoryEditor();
152
153 // ROM Analysis menu actions
154 void OnShowRomInfo();
155 void OnCreateBackup();
156 void OnValidateRom();
157
158 // ZSCustomOverworld menu actions
159 void OnCheckRomVersion();
162
163 // Asar Integration menu actions
164 void OnToggleAsarPatch();
165
166 // BPS Patch menu actions
167 void OnExportBpsPatch();
168 void OnApplyBpsPatch();
169
170 // Editor launch actions
172
173#ifdef YAZE_ENABLE_TESTING
174 void OnShowTestDashboard();
175#endif
176
177 // Help menu actions
178 void OnShowAbout();
182 void OnShowCLIUsage();
184 void OnShowContributing();
185 void OnShowWhatsNew();
187
188 // Additional File menu actions
189 void OnShowSettings();
190 void OnQuit();
191
192 private:
193 // References to coordinated managers
202
203 // Optional dependencies for advanced features
208
209 // Menu state
211
212 // "Save Snapshot As..." modal state (lives here because the menu owns the
213 // modal open/close flow; implementation stays in menu_orchestrator.cc).
216
217 // Helper methods for menu construction
218 void AddFileMenuItems();
219 void AddEditMenuItems();
220 void AddViewMenuItems();
222 void AddDrawersMenuItems();
223 void AddPanelsMenuItems(); // Top-level panels menu items
224 void AddToolsMenuItems(); // Also contains former Debug menu items
225 void AddSearchMenuItems();
230 void AddTestingMenuItems();
232 void AddThemeSubmenu();
233 // Submenus that live inside the top-level Windows menu.
234 void AddSessionsSubmenu();
235 void AddLayoutSubmenu();
236 void AddSidebarSubmenu();
237 void AddHelpMenuItems();
238
239 // Menu item validation helpers
240 bool CanSaveRom() const;
241 bool CanSaveProject() const;
242 bool HasActiveRom() const;
243 bool HasActiveProject() const;
244 bool HasProjectFile() const;
245 bool HasCurrentEditor() const;
246 bool HasMultipleSessions() const;
247 // Edit-menu gates: true when a current editor exists and reports it can
248 // perform the action (Editor::CanUndo etc.).
249 bool CurrentEditorCanUndo() const;
250 bool CurrentEditorCanRedo() const;
251 bool CurrentEditorCanCut() const;
252 bool CurrentEditorCanCopy() const;
253 bool CurrentEditorCanPaste() const;
254 bool CurrentEditorCanFind() const;
255
256 // Menu item text generation
257 std::string GetRomFilename() const;
258 std::string GetProjectName() const;
259 std::string GetCurrentEditorName() const;
260
261 // Menu shortcut labels. Returns the display string of the live binding
262 // registered in ShortcutManager under `action` ("Redo", "Save As", ...),
263 // or "" when the action is unbound, so a menu never shows a key that does
264 // not fire.
265 std::string GetShortcutForAction(const std::string& action) const;
266};
267
268} // namespace editor
269} // namespace yaze
270
271#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.