1#ifndef YAZE_APP_EDITOR_EDITOR_MANAGER_H
2#define YAZE_APP_EDITOR_EDITOR_MANAGER_H
4#define IMGUI_DEFINE_MATH_OPERATORS
13#include "absl/status/status.h"
53#include "imgui/imgui.h"
56#include "yaze_config.h"
61class CanvasAutomationServiceImpl;
113 const std::string& panels_str);
190 std::vector<editor::RomFileManager::BackupEntry>
GetRomBackups()
const;
230 current_index < session_coordinator_->GetTotalSessionCount()) {
242 ImGui::GetIO().FontGlobalScale = scale;
245 LOG_WARN(
"EditorManager",
"Failed to save user settings: %s",
246 status.ToString().c_str());
261 bool from_dialog =
false)
override;
316 size_t session_index)
const;
334 void SetCanvasAutomationService(CanvasAutomationServiceImpl* service) {
335 canvas_automation_service_ = service;
351#ifdef YAZE_ENABLE_TESTING
352 void ShowTestDashboard() { show_test_dashboard_ =
true; }
355#ifdef YAZE_BUILD_AGENT_UI
357 void ShowChatHistory();
364#ifdef YAZE_BUILD_AGENT_UI
371 absl::Status
SaveRomAs(
const std::string& filename);
374 const std::string& template_name =
"Basic ROM Hack");
411 absl::Status
LoadAssets(uint64_t loading_handle = 0);
432 const std::string& saved_category,
433 const std::vector<std::string>& available_categories)
const;
535 std::unique_ptr<LayoutManager>
538 std::unique_ptr<RightPanelManager>
570 CanvasAutomationServiceImpl* canvas_automation_service_ =
nullptr;
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Manages project versioning (Git) and ROM artifact snapshots.
Comprehensive AI Agent Platform & Bot Creator.
Central coordinator for all agent UI components.
AgentEditor * GetAgentEditor()
Handles editor switching, layout initialization, and jump-to navigation.
SessionScope(EditorManager *manager, size_t session_id)
EditorSet * prev_editor_set_
The EditorManager controls the main editor window and manages the various editor classes.
absl::Status SaveProjectAs()
std::unique_ptr< SessionCoordinator > session_coordinator_
std::unique_ptr< PanelHost > panel_host_
RomLifecycleManager rom_lifecycle_
void SaveWorkspacePreset(const std::string &name)
StartupVisibility welcome_mode_override_
void InitializeTestSuites()
void ApplyDefaultBackupPolicy()
float GetRightLayoutOffset() const
PanelManager * GetPanelManager()
bool show_proposal_drawer_
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 *
const PanelManager & card_registry() const
absl::Status SaveRomAs(const std::string &filename)
project::YazeProject current_project_
AgentUiController agent_ui_
void SetCurrentEditor(Editor *editor) override
absl::Status LoadProjectWithRom()
absl::Status LoadAssetsForMode(uint64_t loading_handle=0)
MenuBuilder menu_builder_
float settings_dirty_timestamp_
std::string GetPreferredStartupCategory(const std::string &saved_category, const std::vector< std::string > &available_categories) const
void InitializeServices()
void ApplyLayoutDefaultsMigrationIfNeeded()
void SwitchToSession(size_t index)
absl::Status RestoreRomBackup(const std::string &backup_path)
absl::Status EnsureGameDataLoaded()
size_t GetActiveSessionCount() const
absl::Status OpenProject()
ProjectManager project_manager_
bool HasPendingPotItemSaveConfirmation() const
void CloseCurrentSession()
gfx::IRenderer * renderer_
Rom * GetCurrentRom() const override
bool IsRomWriteConfirmPending() const
bool HasDuplicateSession(const std::string &filepath)
absl::Status RepairCurrentProject()
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 DrawSecondaryWindows()
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
void LoadWorkspaceLayout()
absl::Status CheckRomWritePolicy()
Save the current ROM file.
bool show_workspace_layout
SharedClipboard shared_clipboard_
MenuBuilder & menu_builder()
bool EditorInitRequiresGameData(EditorType type) const
void SyncEditorContextForCategory(const std::string &category)
UICoordinator * ui_coordinator()
void ShowProjectManagement()
Injects dependencies into all editors within an EditorSet.
void SetupWelcomeScreenCallbacks()
Editor * ResolveEditorForCategory(const std::string &category)
void DuplicateCurrentSession()
void Initialize(gfx::IRenderer *renderer, const std::string &filename="")
EditorRegistry editor_registry_
void SetupDialogCallbacks()
project::RomWritePolicy GetProjectRomWritePolicy() const
void MarkEditorLoaded(RomSession *session, EditorType type)
void ApplyStartupVisibilityOverrides()
void ResetWorkspaceLayout()
absl::Status CreateNewProject(const std::string &template_name="Basic ROM Hack")
absl::Status InitializeEditorForType(EditorType type, EditorSet *editor_set, Rom *rom)
ToastManager toast_manager_
LayoutCoordinator layout_coordinator_
absl::Status LoadAssets(uint64_t loading_handle=0)
std::string GetCurrentRomHash() const
void RefreshWorkspacePresets()
bool pending_layout_defaults_reset_
auto GetCurrentEditorSet() const -> EditorSet *
void CancelRomWriteConfirm()
const PanelManager & panel_manager() const
float GetBottomLayoutOffset() const
absl::Status PruneRomBackups()
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)
ProjectFileEditor project_file_editor_
void SetSidebarVisible(bool visible)
void HandleHostVisibilityChanged(bool visible)
void ApplyLayoutPreset(const std::string &preset_name)
size_t session_to_rename_
void RestoreTemporaryLayoutSnapshot(bool clear_after_restore=false)
bool IsSidebarVisible() const
void ApplyStartupVisibility(const AppConfig &config)
auto GetCurrentEditor() const -> Editor *
PanelManager & card_registry()
bool show_rom_load_options_
std::string GetProjectExpectedRomHash() const
void PersistInputConfig(const emu::input::InputConfig &config)
absl::Status SaveProject()
std::unique_ptr< RightPanelManager > right_panel_manager_
absl::Status LoadAssetsLazy(uint64_t loading_handle=0)
void LoadDesignerLayout()
absl::Status DrawRomSelector()=delete
void SetAssetLoadMode(AssetLoadMode mode)
void DismissEditorSelection() override
void SaveWorkspaceLayout()
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
void UpdateCurrentRomHash()
StartupVisibility sidebar_mode_override_
RomLoadOptionsDialog rom_load_options_dialog_
absl::Status LoadRom()
Load a ROM file into a new or existing session.
void SetupComponentCallbacks()
std::vector< std::function< void()> > deferred_actions_
void RegisterEmulatorPanels()
void OpenEditorAndPanelsFromFlags(const std::string &editor_name, const std::string &panels_str)
project::RomRole GetProjectRomRole() const
StartupVisibility dashboard_mode_override_
void BypassWriteConflictOnce()
void InitializeSubsystems()
PanelManager & panel_manager()
void ShowProjectFileEditor()
static bool IsPanelBasedEditor(EditorType type)
void ClearPendingWriteConflicts()
absl::Status Update()
Main update loop for the editor application.
void SetupSidebarCallbacks()
size_t GetCurrentSessionIndex() const
absl::Status ImportProject(const std::string &project_path)
AgentUiController * GetAgentUiController()
core::VersionManager * GetVersionManager()
size_t GetCurrentSessionId() const
void ClearTemporaryLayoutSnapshot()
AssetLoadMode asset_load_mode() const
project::YazeProject * GetCurrentProject()
void LoadDeveloperLayout()
AgentEditor * GetAgentEditor()
void QueueDeferredAction(std::function< void()> action)
SelectionPropertiesPanel selection_properties_panel_
WindowDelegate window_delegate_
void ConfigureSession(RomSession *session) override
std::unique_ptr< ActivityBar > activity_bar_
ShortcutManager shortcut_manager_
bool IsRomHashMismatch() const
auto emulator() -> emu::Emulator &
const PanelHost * panel_host() const
emu::input::InputConfig BuildInputConfigFromSettings() const
void RefreshResourceLabelProvider()
void MarkEditorInitialized(RomSession *session, EditorType type)
void SyncLayoutScopeFromCurrentProject()
UserSettings user_settings_
core::FeatureFlags::Flags * GetCurrentFeatureFlags()
WorkspaceManager workspace_manager_
yaze::zelda3::Overworld * overworld() const
ProposalDrawer proposal_drawer_
void ConfigureEditorDependencies(EditorSet *editor_set, Rom *rom, size_t session_id)
int pending_pot_item_unloaded_rooms() const
WelcomeScreen welcome_screen_
std::unique_ptr< ProjectManagementPanel > project_management_panel_
int pending_pot_item_total_rooms() const
absl::Status OpenRomOrProject(const std::string &filename)
void RemoveSession(size_t index)
absl::Status CheckOracleRomSafetyPreSave(Rom *rom)
UiSyncState GetUiSyncStateSnapshot() const
PanelManager panel_manager_
void HandleSessionSwitched(size_t new_index, RomSession *session)
AssetLoadMode asset_load_mode_
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)
void InitializeShortcutSystem()
void CaptureTemporaryLayoutSnapshot()
float GetLeftLayoutOffset() const
void HandleSessionCreated(size_t index, RomSession *session)
bool EditorRequiresGameData(EditorType type) const
ToastManager * toast_manager()
RomFileManager rom_file_manager_
RightPanelManager * right_panel_manager()
void ResetCurrentEditorLayout()
char session_rename_buffer_[256]
Manages editor types, categories, and lifecycle.
Contains a complete set of editors for a single ROM instance.
Interface for editor classes.
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 panels.
float GetLeftLayoutOffset() const
Get the left margin needed for sidebar (Activity Bar + Side Panel)
Thin host API over PanelManager for declarative panel workflows.
Central registry for all editor cards with session awareness and dependency injection.
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 panels for agent chat, proposals, settings.
Handles all ROM file I/O operations.
Manages ROM and project persistence state.
void BypassWriteConflictOnce()
bool IsRomHashMismatch() const
Check whether the ROM hash mismatches the project's expected hash.
bool HasPendingPotItemSaveConfirmation() const
void CancelRomWriteConfirm()
int pending_pot_item_unloaded_rooms() const
const std::string & current_rom_hash() const
Get the cached ROM hash string.
void ClearPendingWriteConflicts()
const std::vector< core::WriteConflict > & pending_write_conflicts() const
int pending_pot_item_total_rooms() const
bool IsRomWriteConfirmPending() 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.
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.
void LoadDesignerLayout()
void LoadDeveloperLayout()
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="")
A class for emulating and debugging SNES games.
Defines an abstract interface for all rendering operations.
Represents the full Overworld data, light and dark world.
#define LOG_WARN(category, format,...)
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.
bool layout_rebuild_pending
int pending_layout_actions
int pending_editor_actions
Represents a single session, containing a ROM and its associated editors.
core::FeatureFlags::Flags feature_flags
Modern project structure with comprehensive settings consolidation.