Manages ImGui DockBuilder layouts for each editor type. More...
#include <layout_manager.h>

Public Member Functions | |
| LayoutManager ()=default | |
| ~LayoutManager ()=default | |
| void | SetPanelManager (PanelManager *manager) |
| Set the panel manager for window title lookups. | |
| PanelManager * | panel_manager () const |
| Get the panel manager. | |
| void | InitializeEditorLayout (EditorType type, ImGuiID dockspace_id) |
| Initialize the default layout for a specific editor type. | |
| void | RebuildLayout (EditorType type, ImGuiID dockspace_id) |
| Force rebuild of layout for a specific editor type. | |
| void | SaveCurrentLayout (const std::string &name, bool persist=true) |
| Save the current layout with a custom name. | |
| void | LoadLayout (const std::string &name) |
| Load a saved layout by name. | |
| void | CaptureTemporarySessionLayout (size_t session_id) |
| Capture the current workspace as a temporary session layout. | |
| bool | RestoreTemporarySessionLayout (size_t session_id, bool clear_after_restore=false) |
| Restore the temporary session layout if one has been captured. | |
| bool | HasTemporarySessionLayout () const |
| Whether a temporary session layout is available. | |
| void | ClearTemporarySessionLayout () |
| Clear temporary session layout snapshot state. | |
| bool | DeleteLayout (const std::string &name) |
| Delete a saved layout by name. | |
| bool | ApplyBuiltInProfile (const std::string &profile_id, size_t session_id, EditorType editor_type, LayoutProfile *out_profile=nullptr) |
| Apply a built-in layout profile by profile ID. | |
| std::vector< std::string > | GetSavedLayoutNames () const |
| Get list of all saved layout names. | |
| bool | HasLayout (const std::string &name) const |
| Check if a layout exists. | |
| void | LoadLayoutsFromDisk () |
| Load layouts for the active scope (global + optional project) | |
| void | SetProjectLayoutKey (const std::string &key) |
| Set the active project layout key (enables project scope) | |
| void | UseGlobalLayouts () |
| Clear project scope and return to global layouts only. | |
| LayoutScope | GetActiveScope () const |
| Get the active layout scope. | |
| void | ResetToDefaultLayout (EditorType type) |
| Reset the layout for an editor to its default. | |
| bool | IsLayoutInitialized (EditorType type) const |
| Check if a layout has been initialized for an editor. | |
| void | MarkLayoutInitialized (EditorType type) |
| Mark a layout as initialized. | |
| void | ClearInitializationFlags () |
| Clear all initialization flags (for testing) | |
| void | SetLayoutType (LayoutType type) |
| Set the current layout type for rebuild. | |
| LayoutType | GetLayoutType () const |
| Get the current layout type. | |
| void | RequestRebuild () |
| Request a layout rebuild on next frame. | |
| bool | IsRebuildRequested () const |
| Check if rebuild was requested. | |
| void | ClearRebuildRequest () |
| Clear rebuild request flag. | |
| std::string | GetWindowTitle (const std::string &card_id) const |
| Get window title for a card ID from registry. | |
Static Public Member Functions | |
| static std::vector< LayoutProfile > | GetBuiltInProfiles () |
| Get built-in layout profiles. | |
Private Member Functions | |
| void | BuildLayoutFromPreset (EditorType type, ImGuiID dockspace_id) |
| void | LoadLayoutsFromDiskInternal (LayoutScope scope, bool merge) |
| void | SaveLayoutsToDisk (LayoutScope scope) const |
| void | BuildOverworldLayout (ImGuiID dockspace_id) |
| void | BuildDungeonLayout (ImGuiID dockspace_id) |
| void | BuildGraphicsLayout (ImGuiID dockspace_id) |
| void | BuildPaletteLayout (ImGuiID dockspace_id) |
| void | BuildScreenLayout (ImGuiID dockspace_id) |
| void | BuildMusicLayout (ImGuiID dockspace_id) |
| void | BuildSpriteLayout (ImGuiID dockspace_id) |
| void | BuildMessageLayout (ImGuiID dockspace_id) |
| void | BuildAssemblyLayout (ImGuiID dockspace_id) |
| void | BuildSettingsLayout (ImGuiID dockspace_id) |
| void | BuildEmulatorLayout (ImGuiID dockspace_id) |
Private Attributes | |
| std::unordered_map< EditorType, bool > | layouts_initialized_ |
| PanelManager * | panel_manager_ = nullptr |
| LayoutType | current_layout_type_ = LayoutType::kDefault |
| bool | rebuild_requested_ = false |
| ImGuiID | last_dockspace_id_ = 0 |
| EditorType | current_editor_type_ = EditorType::kUnknown |
| std::unordered_map< std::string, std::unordered_map< std::string, bool > > | saved_layouts_ |
| bool | has_temp_session_layout_ = false |
| size_t | temp_session_id_ = 0 |
| std::unordered_map< std::string, bool > | temp_session_visibility_ |
| std::unordered_map< std::string, bool > | temp_session_pinned_ |
| std::string | temp_session_imgui_layout_ |
| std::unordered_map< std::string, std::string > | saved_imgui_layouts_ |
| std::unordered_map< std::string, std::unordered_map< std::string, bool > > | saved_pinned_layouts_ |
| std::unordered_map< std::string, LayoutScope > | layout_scopes_ |
| std::string | project_layout_key_ |
Manages ImGui DockBuilder layouts for each editor type.
Provides professional default layouts using ImGui's DockBuilder API, similar to VSCode's workspace layouts. Each editor type has a custom layout optimized for its workflow.
Features:
Definition at line 71 of file layout_manager.h.
|
default |
|
default |
|
inline |
Set the panel manager for window title lookups.
| registry | Pointer to the PanelManager |
Definition at line 80 of file layout_manager.h.
References panel_manager_.
Referenced by main().
|
inline |
Get the panel manager.
Definition at line 88 of file layout_manager.h.
References panel_manager_.
| void yaze::editor::LayoutManager::InitializeEditorLayout | ( | EditorType | type, |
| ImGuiID | dockspace_id ) |
Initialize the default layout for a specific editor type.
| type | The editor type to initialize |
| dockspace_id | The ImGui dockspace ID to build the layout in |
Definition at line 143 of file layout_manager.cc.
References BuildLayoutFromPreset(), current_editor_type_, yaze::gui::DockSpaceRenderer::GetLastDockspaceSize(), IsLayoutInitialized(), last_dockspace_id_, LOG_INFO, MarkLayoutInitialized(), and panel_manager_.
Referenced by yaze::editor::EditorActivator::HandleNonEditorClassSwitch(), and yaze::editor::EditorActivator::InitializeEditorLayout().

| void yaze::editor::LayoutManager::RebuildLayout | ( | EditorType | type, |
| ImGuiID | dockspace_id ) |
Force rebuild of layout for a specific editor type.
| type | The editor type to rebuild |
| dockspace_id | The ImGui dockspace ID to build the layout in |
This method rebuilds the layout even if it was already initialized. Useful for resetting layouts to their default state.
Definition at line 188 of file layout_manager.cc.
References BuildLayoutFromPreset(), current_editor_type_, yaze::gui::DockSpaceRenderer::GetLastDockspaceSize(), last_dockspace_id_, layouts_initialized_, LOG_ERROR, LOG_INFO, MarkLayoutInitialized(), and panel_manager_.
Referenced by yaze::editor::LayoutCoordinator::ProcessLayoutRebuild(), and yaze::editor::LayoutCoordinator::ResetWorkspaceLayout().

| void yaze::editor::LayoutManager::SaveCurrentLayout | ( | const std::string & | name, |
| bool | persist = true ) |
Save the current layout with a custom name.
| name | The name to save the layout under |
| persist | Whether to write the layout to disk |
Definition at line 532 of file layout_manager.cc.
References GetActiveScope(), yaze::editor::PanelManager::GetActiveSessionId(), layout_scopes_, LOG_INFO, LOG_WARN, panel_manager_, saved_imgui_layouts_, saved_layouts_, saved_pinned_layouts_, SaveLayoutsToDisk(), yaze::editor::PanelManager::SerializePinnedState(), and yaze::editor::PanelManager::SerializeVisibilityState().
Referenced by yaze::editor::WorkspaceManager::SaveWorkspaceLayout(), and yaze::editor::WorkspaceManager::SaveWorkspacePreset().
| void yaze::editor::LayoutManager::LoadLayout | ( | const std::string & | name | ) |
Load a saved layout by name.
| name | The name of the layout to load |
Definition at line 567 of file layout_manager.cc.
References yaze::editor::PanelManager::GetActiveSessionId(), LOG_INFO, LOG_WARN, panel_manager_, yaze::editor::PanelManager::RestorePinnedState(), yaze::editor::PanelManager::RestoreVisibilityState(), saved_imgui_layouts_, saved_layouts_, and saved_pinned_layouts_.
Referenced by yaze::editor::WorkspaceManager::LoadWorkspaceLayout(), and yaze::editor::WorkspaceManager::LoadWorkspacePreset().

| void yaze::editor::LayoutManager::CaptureTemporarySessionLayout | ( | size_t | session_id | ) |
Capture the current workspace as a temporary session layout.
Temporary layouts are held in memory only and are never persisted to disk.
Definition at line 602 of file layout_manager.cc.
References has_temp_session_layout_, LOG_INFO, panel_manager_, yaze::editor::PanelManager::SerializePinnedState(), yaze::editor::PanelManager::SerializeVisibilityState(), temp_session_id_, temp_session_imgui_layout_, temp_session_pinned_, and temp_session_visibility_.

| bool yaze::editor::LayoutManager::RestoreTemporarySessionLayout | ( | size_t | session_id, |
| bool | clear_after_restore = false ) |
Restore the temporary session layout if one has been captured.
Definition at line 625 of file layout_manager.cc.
References ClearTemporarySessionLayout(), has_temp_session_layout_, LOG_INFO, LOG_WARN, panel_manager_, yaze::editor::PanelManager::RestorePinnedState(), yaze::editor::PanelManager::RestoreVisibilityState(), temp_session_id_, temp_session_imgui_layout_, temp_session_pinned_, and temp_session_visibility_.

|
inline |
Whether a temporary session layout is available.
Definition at line 137 of file layout_manager.h.
References has_temp_session_layout_.
| void yaze::editor::LayoutManager::ClearTemporarySessionLayout | ( | ) |
Clear temporary session layout snapshot state.
Definition at line 656 of file layout_manager.cc.
References has_temp_session_layout_, temp_session_id_, temp_session_imgui_layout_, temp_session_pinned_, and temp_session_visibility_.
Referenced by RestoreTemporarySessionLayout().
| bool yaze::editor::LayoutManager::DeleteLayout | ( | const std::string & | name | ) |
Delete a saved layout by name.
| name | The name of the layout to delete |
Definition at line 664 of file layout_manager.cc.
References GetActiveScope(), layout_scopes_, LOG_INFO, LOG_WARN, saved_imgui_layouts_, saved_layouts_, saved_pinned_layouts_, and SaveLayoutsToDisk().

|
static |
Get built-in layout profiles.
Definition at line 689 of file layout_manager.cc.
Referenced by ApplyBuiltInProfile().
| bool yaze::editor::LayoutManager::ApplyBuiltInProfile | ( | const std::string & | profile_id, |
| size_t | session_id, | ||
| EditorType | editor_type, | ||
| LayoutProfile * | out_profile = nullptr ) |
Apply a built-in layout profile by profile ID.
| profile_id | Stable profile id from GetBuiltInProfiles() |
| session_id | Active session id |
| editor_type | Current editor type (for context-sensitive profiles) |
| out_profile | Optional resolved profile metadata |
Definition at line 714 of file layout_manager.cc.
References yaze::editor::PanelLayoutPreset::default_visible_panels, GetBuiltInProfiles(), yaze::editor::PanelManager::HideAllPanelsInSession(), LOG_INFO, LOG_WARN, panel_manager_, yaze::editor::LayoutProfile::preset_name, RequestRebuild(), and yaze::editor::PanelManager::ShowPanel().

| std::vector< std::string > yaze::editor::LayoutManager::GetSavedLayoutNames | ( | ) | const |
Get list of all saved layout names.
Definition at line 770 of file layout_manager.cc.
References saved_layouts_.
| bool yaze::editor::LayoutManager::HasLayout | ( | const std::string & | name | ) | const |
Check if a layout exists.
| name | The layout name to check |
Definition at line 779 of file layout_manager.cc.
References saved_layouts_.
Referenced by yaze::editor::WorkspaceManager::LoadWorkspaceLayout(), and yaze::editor::WorkspaceManager::LoadWorkspacePreset().
| void yaze::editor::LayoutManager::LoadLayoutsFromDisk | ( | ) |
Load layouts for the active scope (global + optional project)
Definition at line 783 of file layout_manager.cc.
References yaze::editor::kGlobal, yaze::editor::kProject, layout_scopes_, LoadLayoutsFromDiskInternal(), project_layout_key_, saved_imgui_layouts_, saved_layouts_, and saved_pinned_layouts_.
Referenced by SetProjectLayoutKey(), and UseGlobalLayouts().

| void yaze::editor::LayoutManager::SetProjectLayoutKey | ( | const std::string & | key | ) |
Set the active project layout key (enables project scope)
| key | Stable project storage key (sanitized) |
Definition at line 795 of file layout_manager.cc.
References LoadLayoutsFromDisk(), project_layout_key_, and UseGlobalLayouts().

| void yaze::editor::LayoutManager::UseGlobalLayouts | ( | ) |
Clear project scope and return to global layouts only.
Definition at line 804 of file layout_manager.cc.
References LoadLayoutsFromDisk(), and project_layout_key_.
Referenced by SetProjectLayoutKey().

| LayoutScope yaze::editor::LayoutManager::GetActiveScope | ( | ) | const |
Get the active layout scope.
Definition at line 809 of file layout_manager.cc.
References yaze::editor::kGlobal, yaze::editor::kProject, and project_layout_key_.
Referenced by DeleteLayout(), and SaveCurrentLayout().
| void yaze::editor::LayoutManager::ResetToDefaultLayout | ( | EditorType | type | ) |
Reset the layout for an editor to its default.
| type | The editor type to reset |
Definition at line 935 of file layout_manager.cc.
References layouts_initialized_, and LOG_INFO.
Referenced by yaze::editor::LayoutCoordinator::ResetCurrentEditorLayout(), and yaze::editor::WorkspaceManager::ResetWorkspaceLayout().
| bool yaze::editor::LayoutManager::IsLayoutInitialized | ( | EditorType | type | ) | const |
Check if a layout has been initialized for an editor.
| type | The editor type to check |
Definition at line 941 of file layout_manager.cc.
References layouts_initialized_.
Referenced by yaze::editor::EditorActivator::ActivatePanelBasedEditor(), yaze::editor::EditorActivator::HandleNonEditorClassSwitch(), yaze::editor::LayoutCoordinator::InitializeEditorLayout(), yaze::editor::EditorActivator::InitializeEditorLayout(), and InitializeEditorLayout().
| void yaze::editor::LayoutManager::MarkLayoutInitialized | ( | EditorType | type | ) |
Mark a layout as initialized.
| type | The editor type to mark |
Definition at line 946 of file layout_manager.cc.
References layouts_initialized_, and LOG_INFO.
Referenced by InitializeEditorLayout(), and RebuildLayout().
| void yaze::editor::LayoutManager::ClearInitializationFlags | ( | ) |
Clear all initialization flags (for testing)
Definition at line 952 of file layout_manager.cc.
References layouts_initialized_, and LOG_INFO.
Referenced by yaze::editor::LayoutCoordinator::ResetWorkspaceLayout(), and yaze::editor::WorkspaceManager::ResetWorkspaceLayout().
|
inline |
Set the current layout type for rebuild.
| type | The layout type to set |
Definition at line 230 of file layout_manager.h.
References current_layout_type_.
Referenced by yaze::editor::LayoutOrchestrator::ApplyDockLayout().
|
inline |
Get the current layout type.
Definition at line 235 of file layout_manager.h.
References current_layout_type_.
|
inline |
Request a layout rebuild on next frame.
Definition at line 240 of file layout_manager.h.
References rebuild_requested_.
Referenced by ApplyBuiltInProfile(), yaze::editor::LayoutOrchestrator::ApplyDockLayout(), yaze::editor::LayoutCoordinator::ApplyLayoutPreset(), yaze::editor::LayoutOrchestrator::RequestLayoutRebuild(), yaze::editor::LayoutCoordinator::ResetCurrentEditorLayout(), yaze::editor::LayoutCoordinator::ResetWorkspaceLayout(), and yaze::editor::WorkspaceManager::ResetWorkspaceLayout().
|
inline |
Check if rebuild was requested.
Definition at line 245 of file layout_manager.h.
References rebuild_requested_.
Referenced by yaze::editor::LayoutCoordinator::ProcessLayoutRebuild().
|
inline |
Clear rebuild request flag.
Definition at line 250 of file layout_manager.h.
References rebuild_requested_.
Referenced by yaze::editor::LayoutCoordinator::ProcessLayoutRebuild().
| std::string yaze::editor::LayoutManager::GetWindowTitle | ( | const std::string & | card_id | ) | const |
Get window title for a card ID from registry.
| card_id | The card ID to look up |
Definition at line 957 of file layout_manager.cc.
References yaze::editor::PanelManager::GetActiveSessionId(), yaze::editor::PanelManager::GetPanelWindowName(), and panel_manager_.

|
private |
Definition at line 414 of file layout_manager.cc.
References yaze::editor::Bottom, yaze::editor::Center, yaze::editor::PanelManager::GetActiveSessionId(), yaze::editor::LayoutPresets::GetDefaultPreset(), yaze::editor::PanelManager::GetPanelDescriptor(), yaze::editor::PanelManager::GetPanelWindowName(), yaze::editor::Left, yaze::editor::LeftBottom, yaze::editor::LeftTop, LOG_WARN, panel_manager_, yaze::editor::Right, yaze::editor::RightBottom, yaze::editor::RightTop, and yaze::editor::Top.
Referenced by BuildAssemblyLayout(), BuildDungeonLayout(), BuildEmulatorLayout(), BuildGraphicsLayout(), BuildMessageLayout(), BuildMusicLayout(), BuildOverworldLayout(), BuildPaletteLayout(), BuildScreenLayout(), BuildSettingsLayout(), BuildSpriteLayout(), InitializeEditorLayout(), and RebuildLayout().

|
private |
Definition at line 814 of file layout_manager.cc.
References yaze::Json::contains(), yaze::Json::is_object(), yaze::Json::items(), layout_scopes_, LOG_INFO, LOG_WARN, project_layout_key_, saved_imgui_layouts_, saved_layouts_, and saved_pinned_layouts_.
Referenced by LoadLayoutsFromDisk().

|
private |
Definition at line 879 of file layout_manager.cc.
References yaze::Json::dump(), yaze::util::PlatformPaths::EnsureDirectoryExists(), layout_scopes_, LOG_WARN, yaze::Json::object(), project_layout_key_, saved_imgui_layouts_, saved_layouts_, and saved_pinned_layouts_.
Referenced by DeleteLayout(), and SaveCurrentLayout().

|
private |
Definition at line 520 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kOverworld.

|
private |
Definition at line 521 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kDungeon.

|
private |
Definition at line 522 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kGraphics.

|
private |
Definition at line 523 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kPalette.

|
private |
Definition at line 524 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kScreen.

|
private |
Definition at line 525 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kMusic.

|
private |
Definition at line 526 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kSprite.

|
private |
Definition at line 527 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kMessage.

|
private |
Definition at line 528 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kAssembly.

|
private |
Definition at line 529 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kSettings.

|
private |
Definition at line 530 of file layout_manager.cc.
References BuildLayoutFromPreset(), and yaze::editor::kEmulator.

|
private |
Definition at line 280 of file layout_manager.h.
Referenced by ClearInitializationFlags(), IsLayoutInitialized(), MarkLayoutInitialized(), RebuildLayout(), and ResetToDefaultLayout().
|
private |
Definition at line 283 of file layout_manager.h.
Referenced by ApplyBuiltInProfile(), BuildLayoutFromPreset(), CaptureTemporarySessionLayout(), GetWindowTitle(), InitializeEditorLayout(), LoadLayout(), panel_manager(), RebuildLayout(), RestoreTemporarySessionLayout(), SaveCurrentLayout(), and SetPanelManager().
|
private |
Definition at line 286 of file layout_manager.h.
Referenced by GetLayoutType(), and SetLayoutType().
|
private |
Definition at line 289 of file layout_manager.h.
Referenced by ClearRebuildRequest(), IsRebuildRequested(), and RequestRebuild().
|
private |
Definition at line 292 of file layout_manager.h.
Referenced by InitializeEditorLayout(), and RebuildLayout().
|
private |
Definition at line 295 of file layout_manager.h.
Referenced by InitializeEditorLayout(), and RebuildLayout().
|
private |
Definition at line 299 of file layout_manager.h.
Referenced by DeleteLayout(), GetSavedLayoutNames(), HasLayout(), LoadLayout(), LoadLayoutsFromDisk(), LoadLayoutsFromDiskInternal(), SaveCurrentLayout(), and SaveLayoutsToDisk().
|
private |
Definition at line 302 of file layout_manager.h.
Referenced by CaptureTemporarySessionLayout(), ClearTemporarySessionLayout(), HasTemporarySessionLayout(), and RestoreTemporarySessionLayout().
|
private |
Definition at line 303 of file layout_manager.h.
Referenced by CaptureTemporarySessionLayout(), ClearTemporarySessionLayout(), and RestoreTemporarySessionLayout().
|
private |
Definition at line 304 of file layout_manager.h.
Referenced by CaptureTemporarySessionLayout(), ClearTemporarySessionLayout(), and RestoreTemporarySessionLayout().
|
private |
Definition at line 305 of file layout_manager.h.
Referenced by CaptureTemporarySessionLayout(), ClearTemporarySessionLayout(), and RestoreTemporarySessionLayout().
|
private |
Definition at line 306 of file layout_manager.h.
Referenced by CaptureTemporarySessionLayout(), ClearTemporarySessionLayout(), and RestoreTemporarySessionLayout().
|
private |
Definition at line 309 of file layout_manager.h.
Referenced by DeleteLayout(), LoadLayout(), LoadLayoutsFromDisk(), LoadLayoutsFromDiskInternal(), SaveCurrentLayout(), and SaveLayoutsToDisk().
|
private |
Definition at line 313 of file layout_manager.h.
Referenced by DeleteLayout(), LoadLayout(), LoadLayoutsFromDisk(), LoadLayoutsFromDiskInternal(), SaveCurrentLayout(), and SaveLayoutsToDisk().
|
private |
Definition at line 316 of file layout_manager.h.
Referenced by DeleteLayout(), LoadLayoutsFromDisk(), LoadLayoutsFromDiskInternal(), SaveCurrentLayout(), and SaveLayoutsToDisk().
|
private |
Definition at line 319 of file layout_manager.h.
Referenced by GetActiveScope(), LoadLayoutsFromDisk(), LoadLayoutsFromDiskInternal(), SaveLayoutsToDisk(), SetProjectLayoutKey(), and UseGlobalLayouts().