yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
editor_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_EDITOR_MANAGER_H
2#define YAZE_APP_EDITOR_EDITOR_MANAGER_H
3
4#define IMGUI_DEFINE_MATH_OPERATORS
5
6#include <atomic>
7#include <cstddef>
8#include <functional>
9#include <memory>
10#include <string>
11#include <vector>
12
13#include "absl/status/status.h"
19#include "app/editor/editor.h"
51#include "app/emu/emulator.h"
52#include "app/startup_flags.h"
53#include "core/project.h"
55#include "imgui/imgui.h"
56#include "rom/rom.h"
57#include "util/log.h"
58#include "yaze_config.h"
60
61// Forward declarations for gRPC-dependent types
62namespace yaze {
63class CanvasAutomationServiceImpl;
64}
65
66namespace yaze::editor {
67class AgentEditor;
68namespace workflow {
70} // namespace workflow
71} // namespace yaze::editor
72
73namespace yaze {
74
75// Forward declaration for AppConfig
76struct AppConfig;
77
78namespace editor {
79
95 public:
96 struct UiSyncState {
97 uint64_t frame_id = 0;
101 };
102
108
109 // Constructor and destructor must be defined in .cc file for std::unique_ptr
110 // with forward-declared types
113
114 void Initialize(gfx::IRenderer* renderer, const std::string& filename = "");
115
116 // Processes startup flags to open a specific editor and panels.
117 void OpenEditorAndPanelsFromFlags(const std::string& editor_name,
118 const std::string& panels_str);
119
120 // Apply startup actions based on AppConfig
121 void ProcessStartupActions(const AppConfig& config);
122 void ApplyStartupVisibility(const AppConfig& config);
123 void SetStartupLoadHints(const AppConfig& config);
124
127
128 absl::Status Update();
129 void DrawMainMenuBar();
130
131 // Host visibility/focus lifecycle hook (e.g., OS space switching).
132 void HandleHostVisibilityChanged(bool visible);
133
134 auto emulator() -> emu::Emulator& { return emulator_; }
135 auto quit() const { return quit_; }
136 auto version() const { return version_; }
137
144 return right_drawer_manager_.get();
145 }
151 return window_manager_;
152 }
153 [[deprecated("Use window_host() instead.")]] PanelHost* panel_host() {
154 return window_host_.get();
155 }
156 [[deprecated("Use window_host() instead.")]]
157 const PanelHost* panel_host() const {
158 return window_host_.get();
159 }
161 const WindowHost* window_host() const { return window_host_.get(); }
162
163 // Layout offset calculation for dockspace adjustment
164 // Delegates to LayoutCoordinator for cleaner separation of concerns
174
175 absl::Status SetCurrentRom(Rom* rom);
176 Rom* GetCurrentRom() const override {
177 return session_coordinator_ ? session_coordinator_->GetCurrentRom()
178 : nullptr;
179 }
180 auto GetCurrentGameData() const -> zelda3::GameData* {
181 return session_coordinator_ ? session_coordinator_->GetCurrentGameData()
182 : nullptr;
183 }
185 return session_coordinator_ ? session_coordinator_->GetCurrentEditorSet()
186 : nullptr;
187 }
188 auto GetCurrentEditor() const -> Editor* { return current_editor_; }
189 std::string GetCurrentRomHash() const {
191 }
202 std::vector<editor::RomFileManager::BackupEntry> GetRomBackups() const;
203 absl::Status RestoreRomBackup(const std::string& backup_path);
204 absl::Status PruneRomBackups();
210
211 // Write conflict warning (ASM-owned address protection)
212 const std::vector<core::WriteConflict>& pending_write_conflicts() const {
214 }
219 void SetCurrentEditor(Editor* editor) override {
220 current_editor_ = editor;
221 // Update ContentRegistry context for panel access
223 // Update help panel's editor context for context-aware help
224 if (right_drawer_manager_ && editor) {
225 right_drawer_manager_->SetActiveEditor(editor->type());
226 }
227 }
228 size_t GetCurrentSessionId() const {
229 return session_coordinator_ ? session_coordinator_->GetActiveSessionIndex()
230 : 0;
231 }
234
235 // Session management helpers
236 size_t GetCurrentSessionIndex() const;
237
238 // Get current session's feature flags (falls back to global if no session)
240 size_t current_index = GetCurrentSessionIndex();
242 current_index < session_coordinator_->GetTotalSessionCount()) {
243 auto* session = static_cast<RomSession*>(
244 session_coordinator_->GetSession(current_index));
245 if (session) {
246 return &session->feature_flags;
247 }
248 }
249 return &core::FeatureFlags::get(); // Fallback to global
250 }
251
252 void SetFontGlobalScale(float scale) {
254 ImGui::GetIO().FontGlobalScale = scale;
255 auto status = user_settings_.Save();
256 if (!status.ok()) {
257 LOG_WARN("EditorManager", "Failed to save user settings: %s",
258 status.ToString().c_str());
259 }
260 }
261
263 const UserSettings& user_settings() const { return user_settings_; }
264
265 // Workspace management (delegates to WorkspaceManager)
267 void SaveWorkspacePreset(const std::string& name) {
269 }
270 void LoadWorkspacePreset(const std::string& name) {
272 }
273
274 // Jump-to functionality for cross-editor navigation
275 void SwitchToEditor(EditorType editor_type, bool force_visible = false,
276 bool from_dialog = false) override;
277 void DismissEditorSelection() override;
278
279 // Panel-based editor registry
280 static bool IsPanelBasedEditor(EditorType type);
281 bool IsSidebarVisible() const {
282 return ui_coordinator_ ? ui_coordinator_->IsPanelSidebarVisible() : false;
283 }
284 void SetSidebarVisible(bool visible) {
285 if (ui_coordinator_) {
286 ui_coordinator_->SetPanelSidebarVisible(visible);
287 }
288 }
289
290 // Lazy asset loading helpers
291 absl::Status EnsureEditorAssetsLoaded(EditorType type);
292 absl::Status EnsureGameDataLoaded();
293
294 // Session management
295 void CreateNewSession();
297 void CloseCurrentSession();
298 void RemoveSession(size_t index);
299 void SwitchToSession(size_t index);
300 size_t GetActiveSessionCount() const;
301
302 // Workspace layout management
303 // Window management - inline delegation (reduces EditorManager bloat)
308 if (ui_coordinator_)
309 ui_coordinator_->ShowAllWindows();
310 }
312 if (ui_coordinator_)
313 ui_coordinator_->HideAllWindows();
314 }
315
316 // Layout presets (inline delegation)
320
321 // Panel layout presets (command palette accessible)
322 void ApplyLayoutPreset(const std::string& preset_name);
323 bool ApplyLayoutProfile(const std::string& profile_id);
325 void RestoreTemporaryLayoutSnapshot(bool clear_after_restore = false);
327
328 // Named, session-scoped layout snapshots (in-memory, multi-slot).
329 bool SaveLayoutSnapshotAs(const std::string& name);
330 bool RestoreLayoutSnapshot(const std::string& name,
331 bool remove_after_restore = false);
332 bool DeleteLayoutSnapshot(const std::string& name);
333 std::vector<std::string> ListLayoutSnapshots() const;
334
336
337 // Helper methods
338 std::string GenerateUniqueEditorTitle(EditorType type,
339 size_t session_index) const;
340 bool HasDuplicateSession(const std::string& filepath);
341 void RenameSession(size_t index, const std::string& new_name);
342 void Quit() { quit_ = true; }
343
344 // Deferred action queue - actions executed safely on next frame
345 // Use this to avoid modifying ImGui state during menu/popup rendering
346 void QueueDeferredAction(std::function<void()> action) {
347 deferred_actions_.push_back(std::move(action));
348 pending_editor_deferred_actions_.fetch_add(1, std::memory_order_relaxed);
349 }
350
351 UiSyncState GetUiSyncStateSnapshot() const;
352
353 // Public for SessionCoordinator to configure new sessions
354 void ConfigureSession(RomSession* session) override;
355
356#ifdef YAZE_WITH_GRPC
357 void SetCanvasAutomationService(CanvasAutomationServiceImpl* service) {
358 canvas_automation_service_ = service;
359 }
360#endif
361
362 // UI visibility controls (public for MenuOrchestrator)
363 // UI visibility controls - inline for performance (single-line wrappers
364 // delegating to UICoordinator)
366 if (ui_coordinator_)
367 ui_coordinator_->SetImGuiDemoVisible(true);
368 }
370 if (ui_coordinator_)
371 ui_coordinator_->SetImGuiMetricsVisible(true);
372 }
373
374#ifdef YAZE_ENABLE_TESTING
375 void ShowTestDashboard() { show_test_dashboard_ = true; }
376#endif
377
378#ifdef YAZE_BUILD_AGENT_UI
379 void ShowAIAgent();
380 void ShowChatHistory();
381 AgentEditor* GetAgentEditor() { return agent_ui_.GetAgentEditor(); }
382 AgentUiController* GetAgentUiController() { return &agent_ui_; }
383#else
384 AgentEditor* GetAgentEditor() { return nullptr; }
386#endif
387#ifdef YAZE_BUILD_AGENT_UI
388 void ShowProposalDrawer() { proposal_drawer_.Show(); }
389#endif
390
391 // ROM and Project operations (public for MenuOrchestrator)
392 absl::Status LoadRom();
393 absl::Status SaveRom();
394 absl::Status SaveRomAs(const std::string& filename);
395 absl::Status OpenRomOrProject(const std::string& filename);
396 absl::Status CreateNewProject(
397 const std::string& template_name = "Basic ROM Hack");
398 absl::Status OpenProject();
399 absl::Status SaveProject();
400 absl::Status SaveProjectAs();
401 absl::Status BuildCurrentProject();
404 absl::Status RunCurrentProject();
405
416 absl::Status ImportProject(const std::string& project_path);
417 absl::Status RepairCurrentProject();
418
419 // Project management
420 absl::Status LoadProjectWithRom();
423 return &current_project_;
424 }
426
427 // Show project management panel in right sidebar
429
430 // Show project file editor
432
433 private:
434 absl::Status DrawRomSelector() = delete; // Moved to UICoordinator
435 // DrawContextSensitivePanelControl removed - card control moved to sidebar
436
437 // Optional loading_handle for WASM progress tracking (0 = create new)
438 absl::Status LoadAssets(uint64_t loading_handle = 0);
439 absl::Status LoadAssetsForMode(uint64_t loading_handle = 0);
440 absl::Status LoadAssetsLazy(uint64_t loading_handle = 0);
441 absl::Status InitializeEditorForType(EditorType type, EditorSet* editor_set,
442 Rom* rom);
443 void ResetAssetState(RomSession* session);
444 void MarkEditorInitialized(RomSession* session, EditorType type);
445 void MarkEditorLoaded(RomSession* session, EditorType type);
446 Editor* GetEditorByType(EditorType type, EditorSet* editor_set) const;
447 Editor* ResolveEditorForCategory(const std::string& category);
448 void SyncEditorContextForCategory(const std::string& category);
449 bool EditorRequiresGameData(EditorType type) const;
450 bool EditorInitRequiresGameData(EditorType type) const;
451 std::vector<EditorType> CollectEditorsToPreload(EditorSet* editor_set) const;
452
453 // Testing system
457 // Returns a preferred startup category, skipping "Emulator" to prevent
458 // the emulator panel from auto-opening on project load.
459 std::string GetPreferredStartupCategory(
460 const std::string& saved_category,
461 const std::vector<std::string>& available_categories) const;
462
463 // Session event handlers (EventBus subscribers)
464 void HandleSessionSwitched(size_t new_index, RomSession* session);
465 void HandleSessionCreated(size_t index, RomSession* session);
466 void HandleSessionClosed(size_t index);
467 // Initialization helpers (extracted from constructor for readability)
468 void SubscribeToEvents();
470 void RegisterEditors();
472 void InitializeServices();
478 void ProcessInput();
479 void UpdateEditorState();
481 void DrawInterface();
483 void UpdateSystemUIs();
484 void RunEmulator();
486
487 void HandleSessionRomLoaded(size_t index, Rom* rom);
489
490 // UI action event handler (EventBus subscriber for UIActionRequestEvent)
492
493 bool quit_ = false;
494
495 // Note: All show_* flags are being moved to UICoordinator
496 // Access via ui_coordinator_->IsXxxVisible() or SetXxxVisible()
497
498 // Workspace dialog flags (managed by EditorManager, not UI)
502
503 // Note: Most UI visibility flags have been moved to UICoordinator
504 // Access via ui_coordinator_->IsXxxVisible() or SetXxxVisible()
505
506 // Agent proposal drawer
509
510 // Agent UI (chat + editor), no-op when agent UI is disabled
512
513 // Project file editor
515
516 // Note: Editor selection dialog and welcome screen are now managed by
517 // UICoordinator Kept here for backward compatibility during transition
518 std::unique_ptr<DashboardPanel> dashboard_panel_;
527 std::vector<std::string> startup_panel_hints_;
528
529 // Properties panel for selection editing
531
532 // Project management panel for version control and ROM management
533 std::unique_ptr<ProjectManagementPanel> project_management_panel_;
534
535 std::string version_ = "";
536 absl::Status status_;
538
539 public:
540 private:
542 // Tracks which session is currently active so delegators (menus, popups,
543 // shortcuts) stay in sync without relying on per-editor context.
544
546
548 std::unique_ptr<core::VersionManager> version_manager_;
550 std::unique_ptr<PopupManager> popup_manager_;
555
556 // New delegated components (dependency injection architecture)
558 window_manager_; // Window management with session awareness
559 std::unique_ptr<WindowHost> window_host_;
561 std::unique_ptr<MenuOrchestrator> menu_orchestrator_;
564 std::unique_ptr<UICoordinator> ui_coordinator_;
567 std::unique_ptr<SessionCoordinator> session_coordinator_;
568 std::unique_ptr<LayoutManager>
569 layout_manager_; // DockBuilder layout management
570 LayoutCoordinator layout_coordinator_; // Facade for layout operations
571 std::unique_ptr<RightDrawerManager>
572 right_drawer_manager_; // Right-side drawer system
573 StatusBar status_bar_; // Bottom status bar
574 std::unique_ptr<ActivityBar> activity_bar_;
576
581 ProjectWorkflowStatus MakeBuildStatus(const std::string& summary,
582 const std::string& detail,
584 const std::string& output_tail = "",
585 bool can_cancel = false) const;
586 ProjectWorkflowStatus MakeRunStatus(const std::string& summary,
587 const std::string& detail,
588 ProjectWorkflowState state) const;
589 absl::StatusOr<std::string> RunProjectBuildCommand();
590 absl::StatusOr<std::string> ResolveProjectBuildCommand() const;
591 absl::StatusOr<std::string> ResolveProjectRunTarget() const;
592 absl::Status CheckRomWritePolicy();
593 absl::Status CheckOracleRomSafetyPreSave(Rom* rom);
594
595 float autosave_timer_ = 0.0f;
596 bool settings_dirty_ = false;
599
600 // ROM lifecycle state (hash, write policy, confirmation dialogs, backups)
601 // Mutable because some const accessors delegate to it.
603
604 // Deferred action queue - executed at the start of each frame
605 std::vector<std::function<void()>> deferred_actions_;
607 std::atomic<uint64_t> ui_sync_frame_id_{0};
608 std::unique_ptr<BackgroundCommandTask> active_project_build_;
610
611 // Core Event Bus and Context
613 std::unique_ptr<GlobalEditorContext> editor_context_;
614 std::unique_ptr<workflow::HackWorkflowBackend> hack_workflow_backend_;
615
616#ifdef YAZE_WITH_GRPC
617 CanvasAutomationServiceImpl* canvas_automation_service_ = nullptr;
618#endif
619
620 // RAII helper for clean session context switching
622 public:
623 SessionScope(EditorManager* manager, size_t session_id);
625
626 private:
631 };
632
633 void ConfigureEditorDependencies(EditorSet* editor_set, Rom* rom,
634 size_t session_id);
636};
637
638} // namespace editor
639} // namespace yaze
640
641#endif // YAZE_APP_EDITOR_EDITOR_MANAGER_H
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
static Flags & get()
Definition features.h:118
Manages project versioning (Git) and ROM artifact snapshots.
Comprehensive AI Agent Platform & Bot Creator.
Central coordinator for all agent UI components.
Handles editor switching, layout initialization, and jump-to navigation.
SessionScope(EditorManager *manager, size_t session_id)
The EditorManager controls the main editor window and manages the various editor classes.
std::unique_ptr< SessionCoordinator > session_coordinator_
RomLifecycleManager rom_lifecycle_
void SaveWorkspacePreset(const std::string &name)
StartupVisibility welcome_mode_override_
std::vector< EditorType > CollectEditorsToPreload(EditorSet *editor_set) const
void SwitchToEditor(EditorType editor_type, bool force_visible=false, bool from_dialog=false) override
std::unique_ptr< GlobalEditorContext > editor_context_
auto GetCurrentGameData() const -> zelda3::GameData *
absl::Status SaveRomAs(const std::string &filename)
project::YazeProject current_project_
std::unique_ptr< RightDrawerManager > right_drawer_manager_
void SetCurrentEditor(Editor *editor) override
bool SaveLayoutSnapshotAs(const std::string &name)
absl::Status LoadAssetsForMode(uint64_t loading_handle=0)
std::string GetPreferredStartupCategory(const std::string &saved_category, const std::vector< std::string > &available_categories) const
const WorkspaceWindowManager & window_manager() const
absl::StatusOr< std::string > RunProjectBuildCommand()
void SwitchToSession(size_t index)
absl::Status RestoreRomBackup(const std::string &backup_path)
bool HasPendingPotItemSaveConfirmation() const
Rom * GetCurrentRom() const override
bool HasDuplicateSession(const std::string &filepath)
WorkspaceManager * workspace_manager()
std::unique_ptr< LayoutManager > layout_manager_
std::unique_ptr< DashboardPanel > dashboard_panel_
void HandleSessionClosed(size_t index)
void ResetAssetState(RomSession *session)
void ProcessStartupActions(const AppConfig &config)
void LoadWorkspacePreset(const std::string &name)
std::string GenerateUniqueEditorTitle(EditorType type, size_t session_index) const
void RenameSession(size_t index, const std::string &new_name)
std::vector< editor::RomFileManager::BackupEntry > GetRomBackups() const
absl::Status CheckRomWritePolicy()
Save the current ROM file.
const UserSettings & user_settings() const
std::vector< std::string > ListLayoutSnapshots() const
SharedClipboard shared_clipboard_
bool EditorInitRequiresGameData(EditorType type) const
void SyncEditorContextForCategory(const std::string &category)
const RightDrawerManager * right_drawer_manager() const
UICoordinator * ui_coordinator()
void ShowProjectManagement()
Injects dependencies into all editors within an EditorSet.
Editor * ResolveEditorForCategory(const std::string &category)
void Initialize(gfx::IRenderer *renderer, const std::string &filename="")
project::RomWritePolicy GetProjectRomWritePolicy() const
void MarkEditorLoaded(RomSession *session, EditorType type)
absl::Status CreateNewProject(const std::string &template_name="Basic ROM Hack")
RightDrawerManager * right_drawer_manager()
absl::Status InitializeEditorForType(EditorType type, EditorSet *editor_set, Rom *rom)
LayoutCoordinator layout_coordinator_
absl::Status LoadAssets(uint64_t loading_handle=0)
std::string GetCurrentRomHash() const
auto GetCurrentEditorSet() const -> EditorSet *
void SetFontGlobalScale(float scale)
std::unique_ptr< MenuOrchestrator > menu_orchestrator_
void HandleUIActionRequest(UIActionRequestEvent::Action action)
void ResolvePotItemSaveConfirmation(PotItemSaveDecision decision)
void HandleSessionRomLoaded(size_t index, Rom *rom)
WorkspaceWindowManager & window_manager()
ProjectFileEditor project_file_editor_
void SetSidebarVisible(bool visible)
void HandleHostVisibilityChanged(bool visible)
void ApplyLayoutPreset(const std::string &preset_name)
void RestoreTemporaryLayoutSnapshot(bool clear_after_restore=false)
void ApplyStartupVisibility(const AppConfig &config)
WorkspaceWindowManager window_manager_
auto GetCurrentEditor() const -> Editor *
std::string GetProjectExpectedRomHash() const
const WindowHost * window_host() const
void PersistInputConfig(const emu::input::InputConfig &config)
void SetStartupLoadHints(const AppConfig &config)
absl::Status LoadAssetsLazy(uint64_t loading_handle=0)
absl::StatusOr< std::string > ResolveProjectBuildCommand() const
absl::Status DrawRomSelector()=delete
void SetAssetLoadMode(AssetLoadMode mode)
void DismissEditorSelection() override
const std::vector< core::WriteConflict > & pending_write_conflicts() const
std::atomic< uint64_t > ui_sync_frame_id_
const project::YazeProject * GetCurrentProject() const
bool ApplyLayoutProfile(const std::string &profile_id)
std::unique_ptr< core::VersionManager > version_manager_
Editor * GetEditorByType(EditorType type, EditorSet *editor_set) const
StartupVisibility sidebar_mode_override_
RomLoadOptionsDialog rom_load_options_dialog_
absl::Status LoadRom()
Load a ROM file into a new or existing session.
std::vector< std::string > startup_panel_hints_
std::vector< std::function< void()> > deferred_actions_
void OpenEditorAndPanelsFromFlags(const std::string &editor_name, const std::string &panels_str)
project::RomRole GetProjectRomRole() const
StartupVisibility dashboard_mode_override_
static bool IsPanelBasedEditor(EditorType type)
absl::Status Update()
Main update loop for the editor application.
absl::StatusOr< std::string > ResolveProjectRunTarget() const
absl::Status ImportProject(const std::string &project_path)
AgentUiController * GetAgentUiController()
core::VersionManager * GetVersionManager()
WorkspaceWindowManager * GetWindowManager()
AssetLoadMode asset_load_mode() const
ProjectWorkflowStatus MakeRunStatus(const std::string &summary, const std::string &detail, ProjectWorkflowState state) const
project::YazeProject * GetCurrentProject()
void QueueDeferredAction(std::function< void()> action)
SelectionPropertiesPanel selection_properties_panel_
bool DeleteLayoutSnapshot(const std::string &name)
void ConfigureSession(RomSession *session) override
std::unique_ptr< ActivityBar > activity_bar_
ShortcutManager shortcut_manager_
auto emulator() -> emu::Emulator &
const PanelHost * panel_host() const
emu::input::InputConfig BuildInputConfigFromSettings() const
bool RestoreLayoutSnapshot(const std::string &name, bool remove_after_restore=false)
void MarkEditorInitialized(RomSession *session, EditorType type)
std::unique_ptr< BackgroundCommandTask > active_project_build_
core::FeatureFlags::Flags * GetCurrentFeatureFlags()
WorkspaceManager workspace_manager_
yaze::zelda3::Overworld * overworld() const
void ConfigureEditorDependencies(EditorSet *editor_set, Rom *rom, size_t session_id)
int pending_pot_item_unloaded_rooms() const
std::unique_ptr< ProjectManagementPanel > project_management_panel_
std::unique_ptr< workflow::HackWorkflowBackend > hack_workflow_backend_
absl::Status OpenRomOrProject(const std::string &filename)
void RemoveSession(size_t index)
absl::Status CheckOracleRomSafetyPreSave(Rom *rom)
UiSyncState GetUiSyncStateSnapshot() const
ProjectWorkflowStatus MakeBuildStatus(const std::string &summary, const std::string &detail, ProjectWorkflowState state, const std::string &output_tail="", bool can_cancel=false) const
void HandleSessionSwitched(size_t new_index, RomSession *session)
absl::Status EnsureEditorAssetsLoaded(EditorType type)
std::unique_ptr< PopupManager > popup_manager_
std::atomic< int > pending_editor_deferred_actions_
std::unique_ptr< UICoordinator > ui_coordinator_
EditorActivator editor_activator_
absl::Status SetCurrentRom(Rom *rom)
std::unique_ptr< WindowHost > window_host_
void HandleSessionCreated(size_t index, RomSession *session)
bool EditorRequiresGameData(EditorType type) const
Manages editor types, categories, and lifecycle.
Contains a complete set of editors for a single ROM instance.
Interface for editor classes.
Definition editor.h:240
EditorType type() const
Definition editor.h:293
Interface for editor selection and navigation.
Interface for session configuration.
Facade class that coordinates all layout-related operations.
float GetBottomLayoutOffset() const
Get the bottom margin needed for status bar.
float GetRightLayoutOffset() const
Get the right margin needed for drawers.
float GetLeftLayoutOffset() const
Get the left margin needed for sidebar (Activity Bar + Side Panel)
Fluent interface for building ImGui menus with icons.
Editor for .yaze project files with syntax highlighting and validation.
Handles all project file operations with ROM-first workflow.
ImGui drawer for displaying and managing agent proposals.
Manages right-side sliding drawers for agent chat, proposals, settings.
Handles all ROM file I/O operations.
Manages ROM and project persistence state.
bool IsRomHashMismatch() const
Check whether the ROM hash mismatches the project's expected hash.
const std::string & current_rom_hash() const
Get the cached ROM hash string.
const std::vector< core::WriteConflict > & pending_write_conflicts() const
ROM load options and ZSCustomOverworld upgrade dialog.
Full-editing properties panel for selected entities.
A session-aware status bar displayed at the bottom of the application.
Definition status_bar.h:54
Handles all UI drawing operations and state management.
Manages user preferences and settings persistence.
Modern welcome screen with project grid and quick actions.
Low-level window operations with minimal dependencies.
Thin host API over WorkspaceWindowManager for declarative window workflows.
Definition panel_host.h:43
Manages workspace layouts, sessions, and presets.
void SaveWorkspacePreset(const std::string &name)
void LoadWorkspacePreset(const std::string &name)
absl::Status SaveWorkspaceLayout(const std::string &name="")
absl::Status LoadWorkspaceLayout(const std::string &name="")
Central registry for all editor cards with session awareness and dependency injection.
A class for emulating and debugging SNES games.
Definition emulator.h:41
Defines an abstract interface for all rendering operations.
Definition irenderer.h:60
Represents the full Overworld data, light and dark world.
Definition overworld.h:261
#define LOG_WARN(category, format,...)
Definition log.h:107
void SetCurrentEditor(Editor *editor)
Set the currently active editor.
Editors are the view controllers for the application.
StartupVisibility
Tri-state toggle used for startup UI visibility controls.
AssetLoadMode
Asset loading mode for editor resources.
Configuration options for the application startup.
Definition application.h:26
Represents a single session, containing a ROM and its associated editors.
core::FeatureFlags::Flags feature_flags
Input configuration (platform-agnostic key codes)
std::string expected_hash
Definition project.h:109
RomWritePolicy write_policy
Definition project.h:110
Modern project structure with comprehensive settings consolidation.
Definition project.h:164