Refactor editor windowing system layout
This commit is contained in:
77
editor/app/Windowing/System/EditorWindowSystem.h
Normal file
77
editor/app/Windowing/System/EditorWindowSystem.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#pragma once
|
||||
|
||||
#include "Windowing/System/EditorWindowSynchronizationPlan.h"
|
||||
#include <XCEditor/Workspace/UIEditorWindowWorkspaceController.h>
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
namespace XCEngine::UI::Editor {
|
||||
|
||||
class EditorWindowWorkspaceStore;
|
||||
|
||||
class EditorWindowSystem final {
|
||||
public:
|
||||
explicit EditorWindowSystem(UIEditorPanelRegistry panelRegistry);
|
||||
~EditorWindowSystem();
|
||||
|
||||
EditorWindowSystem(const EditorWindowSystem&) = delete;
|
||||
EditorWindowSystem& operator=(const EditorWindowSystem&) = delete;
|
||||
EditorWindowSystem(EditorWindowSystem&&) = delete;
|
||||
EditorWindowSystem& operator=(EditorWindowSystem&&) = delete;
|
||||
|
||||
const UIEditorPanelRegistry& GetPanelRegistry() const;
|
||||
|
||||
bool BootstrapPrimaryWindow(
|
||||
std::string_view primaryWindowId,
|
||||
const UIEditorWindowWorkspaceState& primaryWindowState,
|
||||
std::string& outError);
|
||||
|
||||
bool ValidateWindowSet(
|
||||
const UIEditorWindowWorkspaceSet& windowSet,
|
||||
std::string& outError) const;
|
||||
bool IsPrimaryWindowId(std::string_view windowId) const;
|
||||
|
||||
const UIEditorWindowWorkspaceSet& GetWindowSet() const;
|
||||
const UIEditorWindowWorkspaceState* FindWindowState(std::string_view windowId) const;
|
||||
UIEditorWindowWorkspaceController BuildWorkspaceMutationController() const;
|
||||
EditorWindowSynchronizationPlan BuildPlanForWindowSet(
|
||||
const UIEditorWindowWorkspaceSet& targetWindowSet,
|
||||
const std::vector<EditorWindowHostSnapshot>& hostWindows,
|
||||
std::wstring_view primaryWindowTitle,
|
||||
std::string_view preferredNewWindowId,
|
||||
const EditorWindowSynchronizationPlacement& preferredPlacement,
|
||||
std::string& outError) const;
|
||||
EditorWindowSynchronizationPlan BuildPlanForWorkspaceMutationRequest(
|
||||
const EditorWindowWorkspaceMutationRequest& request,
|
||||
const std::vector<EditorWindowHostSnapshot>& hostWindows,
|
||||
std::wstring_view primaryWindowTitle,
|
||||
std::string& outError) const;
|
||||
EditorWindowSynchronizationPlan BuildPlanForDestroyedWindow(
|
||||
std::string_view windowId,
|
||||
const std::vector<EditorWindowHostSnapshot>& hostWindows,
|
||||
std::wstring_view primaryWindowTitle,
|
||||
std::string& outError) const;
|
||||
EditorWindowSynchronizationPlan BuildSynchronizationPlan(
|
||||
const EditorWindowSynchronizationPlannerInput& input,
|
||||
std::string& outError) const;
|
||||
bool CommitSynchronizationPlan(
|
||||
const EditorWindowSynchronizationPlan& plan,
|
||||
std::string& outError);
|
||||
|
||||
UIEditorWindowWorkspaceOperationResult EvaluateDetachPanelToNewWindow(
|
||||
std::string_view sourceWindowId,
|
||||
std::string_view sourceNodeId,
|
||||
std::string_view panelId,
|
||||
UIEditorWindowWorkspaceController& outController) const;
|
||||
|
||||
private:
|
||||
static bool RemoveWindowStateFromSet(
|
||||
UIEditorWindowWorkspaceSet& windowSet,
|
||||
std::string_view windowId);
|
||||
|
||||
std::unique_ptr<EditorWindowWorkspaceStore> m_workspaceStore = {};
|
||||
};
|
||||
|
||||
} // namespace XCEngine::UI::Editor
|
||||
Reference in New Issue
Block a user