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"
55#include "imgui/imgui.h"
58#include "yaze_config.h"
63class CanvasAutomationServiceImpl;
118 const std::string& panels_str);
156 [[deprecated(
"Use window_host() instead.")]]
202 std::vector<editor::RomFileManager::BackupEntry>
GetRomBackups()
const;
242 current_index < session_coordinator_->GetTotalSessionCount()) {
254 ImGui::GetIO().FontGlobalScale = scale;
257 LOG_WARN(
"EditorManager",
"Failed to save user settings: %s",
258 status.ToString().c_str());
276 bool from_dialog =
false)
override;
331 bool remove_after_restore =
false);
339 size_t session_index)
const;
357 void SetCanvasAutomationService(CanvasAutomationServiceImpl* service) {
358 canvas_automation_service_ = service;
374#ifdef YAZE_ENABLE_TESTING
375 void ShowTestDashboard() { show_test_dashboard_ =
true; }
378#ifdef YAZE_BUILD_AGENT_UI
380 void ShowChatHistory();
387#ifdef YAZE_BUILD_AGENT_UI
394 absl::Status
SaveRomAs(
const std::string& filename);
397 const std::string& template_name =
"Basic ROM Hack");
438 absl::Status
LoadAssets(uint64_t loading_handle = 0);
460 const std::string& saved_category,
461 const std::vector<std::string>& available_categories)
const;
568 std::unique_ptr<LayoutManager>
571 std::unique_ptr<RightDrawerManager>
582 const std::string& detail,
584 const std::string& output_tail =
"",
585 bool can_cancel =
false)
const;
587 const std::string& detail,
617 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_
RomLifecycleManager rom_lifecycle_
void SaveWorkspacePreset(const std::string &name)
StartupVisibility welcome_mode_override_
void InitializeTestSuites()
void ApplyDefaultBackupPolicy()
float GetRightLayoutOffset() const
bool show_proposal_drawer_
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_
void QueueBuildCurrentProject()
std::unique_ptr< RightDrawerManager > right_drawer_manager_
AgentUiController agent_ui_
void SetCurrentEditor(Editor *editor) override
bool SaveLayoutSnapshotAs(const std::string &name)
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
const WorkspaceWindowManager & window_manager() const
absl::StatusOr< std::string > RunProjectBuildCommand()
void InitializeServices()
void ApplyLayoutDefaultsMigrationIfNeeded()
void SwitchToSession(size_t index)
bool active_project_build_reported_
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.
const UserSettings & user_settings() const
std::vector< std::string > ListLayoutSnapshots() const
bool show_workspace_layout
SharedClipboard shared_clipboard_
MenuBuilder & menu_builder()
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.
void SetupWelcomeScreenCallbacks()
absl::Status RunCurrentProject()
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")
RightDrawerManager * right_drawer_manager()
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_
std::string startup_editor_hint_
auto GetCurrentEditorSet() const -> EditorSet *
void CancelRomWriteConfirm()
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)
WorkspaceWindowManager & window_manager()
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)
WorkspaceWindowManager window_manager_
auto GetCurrentEditor() const -> Editor *
bool show_rom_load_options_
std::string GetProjectExpectedRomHash() const
const WindowHost * window_host() const
void PersistInputConfig(const emu::input::InputConfig &config)
UserSettings & user_settings()
absl::Status SaveProject()
void SetStartupLoadHints(const AppConfig &config)
absl::Status LoadAssetsLazy(uint64_t loading_handle=0)
void LoadDesignerLayout()
absl::StatusOr< std::string > ResolveProjectBuildCommand() const
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()
absl::Status BuildCurrentProject()
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_
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()
void ShowProjectFileEditor()
void RefreshHackWorkflowBackend()
static bool IsPanelBasedEditor(EditorType type)
void ClearPendingWriteConflicts()
absl::Status Update()
Main update loop for the editor application.
void SetupSidebarCallbacks()
size_t GetCurrentSessionIndex() const
absl::StatusOr< std::string > ResolveProjectRunTarget() const
absl::Status ImportProject(const std::string &project_path)
AgentUiController * GetAgentUiController()
core::VersionManager * GetVersionManager()
WorkspaceWindowManager * GetWindowManager()
size_t GetCurrentSessionId() const
void ClearTemporaryLayoutSnapshot()
AssetLoadMode asset_load_mode() const
ProjectWorkflowStatus MakeRunStatus(const std::string &summary, const std::string &detail, ProjectWorkflowState state) const
project::YazeProject * GetCurrentProject()
void LoadDeveloperLayout()
AgentEditor * GetAgentEditor()
void QueueDeferredAction(std::function< void()> action)
SelectionPropertiesPanel selection_properties_panel_
WindowDelegate window_delegate_
bool DeleteLayoutSnapshot(const std::string &name)
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
bool RestoreLayoutSnapshot(const std::string &name, bool remove_after_restore=false)
void RefreshResourceLabelProvider()
void MarkEditorInitialized(RomSession *session, EditorType type)
void SyncLayoutScopeFromCurrentProject()
WindowHost * window_host()
std::unique_ptr< BackgroundCommandTask > active_project_build_
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
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
void PollProjectWorkflowTasks()
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)
void CancelQueuedProjectBuild()
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()
std::unique_ptr< WindowHost > window_host_
void CaptureTemporaryLayoutSnapshot()
float GetLeftLayoutOffset() const
void HandleSessionCreated(size_t index, RomSession *session)
bool EditorRequiresGameData(EditorType type) const
ToastManager * toast_manager()
RomFileManager rom_file_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 drawers.
float GetLeftLayoutOffset() const
Get the left margin needed for sidebar (Activity Bar + Side Panel)
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.
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()
Thin host API over WorkspaceWindowManager for declarative window workflows.
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.
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.