1#ifndef YAZE_APP_EDITOR_SYSTEM_SESSION_COORDINATOR_H_
2#define YAZE_APP_EDITOR_SYSTEM_SESSION_COORDINATOR_H_
10#include "absl/status/status.h"
15#include "imgui/imgui.h"
22class ISessionConfigurator;
25class WorkspaceWindowManager;
95 const std::string& filepath,
96 std::optional<size_t> excluded_session_id = std::nullopt)
const;
101 const std::string& rhs);
114 void RenameSession(
size_t index,
const std::string& new_name);
116 size_t session_index)
const;
140 size_t session_index = SIZE_MAX);
142 absl::Status
SaveSessionAs(
size_t session_index,
const std::string& filename);
144 const std::string& filepath);
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Manages editor types, categories, and lifecycle.
Contains a complete set of editors for a single ROM instance.
Interface for session configuration.
High-level orchestrator for multi-session UI.
void ShowSessionManager()
void NotifySessionCreated(size_t index, RomSession *session)
void SwitchToSession(size_t index)
void * GetActiveSession() const
char session_rename_buffer_[256]
void * GetSession(size_t index) const
size_t GetEmptySessionCount() const
std::string GenerateUniqueEditorTitle(const std::string &editor_name, size_t session_index) const
void CleanupClosedSessions()
zelda3::GameData * GetCurrentGameData() const
bool IsSessionSwitcherVisible() const
EditorSet * GetCurrentEditorSet() const
size_t GetActiveSessionIndex() const
Compact zero-based UI position in sessions_.
void CloseCurrentSession()
void NotifySessionSwitched(size_t old_index, size_t new_index, RomSession *session, bool transient)
~SessionCoordinator()=default
EditorRegistry * editor_registry_
void ToggleSessionManager()
void NotifySessionClosed(size_t index)
RomSession * GetActiveRomSession() const
void ShowAllPanelsInActiveSession()
void CloseSession(size_t index)
size_t GetActiveSessionCount() const
void NotifySessionRomLoaded(size_t index, RomSession *session)
void FocusPreviousSession()
void UpdateSessionCount()
void DrawSessionManager()
absl::StatusOr< RomSession * > CreateSessionFromRom(Rom &&rom, const std::string &filepath)
SessionCoordinator(WorkspaceWindowManager *window_manager, ToastManager *toast_manager, UserSettings *user_settings)
UserSettings * user_settings_
void DuplicateCurrentSession()
void HideSessionSwitcher()
void DrawSessionContextMenu(size_t index)
absl::Status SaveSessionAs(size_t session_index, const std::string &filename)
void SetEditorManager(ISessionConfigurator *manager)
size_t GetSessionId(size_t index) const
Resolve a compact UI index to its stable workspace identity.
size_t active_session_index_
absl::Status SaveActiveSession(const std::string &filename="")
void SetEditorRegistry(EditorRegistry *registry)
void ActivateSession(size_t index)
ImVec4 GetSessionColor(size_t index) const
absl::Status LoadRomIntoSession(const std::string &filename, size_t session_index=SIZE_MAX)
absl::Status CheckBackingFileAvailable(const std::string &filepath, std::optional< size_t > excluded_session_id=std::nullopt) const
std::string GetSessionDisplayName(size_t index) const
void ShowSessionSwitcher()
void RenameSession(size_t index, const std::string &new_name)
bool IsSessionModified(size_t index) const
absl::Status DiscardProvisionalSession(size_t session_id)
void ActivateCreatedSession(size_t index)
size_t session_to_rename_
size_t GetTotalSessionCount() const
void UpdateActiveSession()
bool HasDuplicateSession(const std::string &filepath) const
static constexpr size_t kMinSessions
void ToggleSessionSwitcher()
void RequestCloseCurrentSession()
void ShowPanelsInCategory(const std::string &category)
void SetEventBus(EventBus *bus)
ToastManager * toast_manager_
void HidePanelsInCategory(const std::string &category)
void HideAllPanelsInActiveSession()
bool IsSessionClosed(size_t index) const
size_t GetActiveSessionId() const
Stable workspace identity that is never reused while this coordinator lives.
WorkspaceWindowManager * window_manager_
std::string GetSessionIcon(size_t index) const
bool show_session_manager_
void DrawSessionRenameDialog()
void ShowSessionLimitWarning()
void DrawSessionSwitcher()
std::string GetActiveSessionDisplayName() const
bool show_session_switcher_
Rom * GetCurrentRom() const
void ShowSessionOperationResult(const std::string &operation, bool success)
bool IsValidSessionIndex(size_t index) const
bool IsSessionEmpty(size_t index) const
void SwitchToSessionInternal(size_t index, bool transient)
bool HasMultipleSessions() const
void DrawSessionTab(size_t index, bool is_active)
void DrawSessionBadge(size_t index)
void RemoveSession(size_t index)
void SetActiveSessionIndex(size_t index)
bool IsSessionActive(size_t index) const
std::vector< std::unique_ptr< RomSession > > sessions_
void ValidateSessionIndex(size_t index) const
ISessionConfigurator * editor_manager_
void DrawSessionIndicator()
bool IsSessionManagerVisible() const
bool IsSessionLoaded(size_t index) const
size_t GetLoadedSessionCount() const
std::string GenerateUniqueSessionName(const std::string &base_name) const
static bool PathsReferToSameBackingFile(const std::string &lhs, const std::string &rhs)
bool show_session_rename_dialog_
static constexpr size_t kMaxSessions
void HideSessionManager()
Manages user preferences and settings persistence.
Central registry for all editor cards with session awareness and dependency injection.
Represents a single session, containing a ROM and its associated editors.