feat(editor): introduce LayoutManager for enhanced editor layouts

- Added LayoutManager to manage ImGui DockBuilder layouts for various editor types, providing professional default layouts similar to VSCode.
- Integrated layout initialization and persistence features, allowing users to save and load custom layouts.
- Updated EditorManager to initialize LayoutManager and set default layouts upon editor activation.

Benefits:
- Improves user experience by offering tailored layouts for different editing tasks.
- Enhances maintainability by centralizing layout management and initialization logic within the new LayoutManager class.
This commit is contained in:
scawful
2025-10-15 16:35:32 -04:00
parent 551b1e5d5a
commit 4de8f711f3
9 changed files with 694 additions and 4 deletions

View File

@@ -182,6 +182,9 @@ EditorManager::EditorManager()
*session_coordinator_, window_delegate_, toast_manager_, *popup_manager_,
shortcut_manager_);
// STEP 4.5: Initialize LayoutManager (DockBuilder layouts for editors)
layout_manager_ = std::make_unique<LayoutManager>();
// STEP 5: ShortcutConfigurator created later in Initialize() method
// It depends on all above coordinators being available
}
@@ -1954,6 +1957,12 @@ void EditorManager::SwitchToEditor(EditorType editor_type) {
// Editor activated - set its category
card_registry_.SetActiveCategory(
EditorRegistry::GetEditorCategory(editor_type));
// Initialize default layout on first activation
if (layout_manager_ && !layout_manager_->IsLayoutInitialized(editor_type)) {
ImGuiID dockspace_id = ImGui::GetID("MainDockSpace");
layout_manager_->InitializeEditorLayout(editor_type, dockspace_id);
}
} else {
// Editor deactivated - switch to another active card-based editor
for (auto* other : current_editor_set_->active_editors_) {