81 lines
3.1 KiB
C++
81 lines
3.1 KiB
C++
#pragma once
|
|
|
|
#include "Composition/EditorWindowWorkspaceStore.h"
|
|
#include "Windowing/Frame/EditorWindowTransferRequests.h"
|
|
#include "Windowing/System/EditorWindowSynchronizationPlan.h"
|
|
|
|
#include <XCEditor/Workspace/UIEditorWorkspaceController.h>
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
namespace XCEngine::UI::Editor::App {
|
|
|
|
class EditorWindowSystem final {
|
|
public:
|
|
explicit EditorWindowSystem(UIEditorPanelRegistry panelRegistry);
|
|
|
|
const UIEditorPanelRegistry& GetPanelRegistry() const;
|
|
|
|
bool BootstrapPrimaryWindow(
|
|
std::string_view primaryWindowId,
|
|
const UIEditorWorkspaceController& workspaceController,
|
|
std::string& outError);
|
|
|
|
bool ValidateWindowSet(
|
|
const UIEditorWindowWorkspaceSet& windowSet,
|
|
std::string& outError) const;
|
|
bool IsPrimaryWindowId(std::string_view windowId) const;
|
|
|
|
const UIEditorWindowWorkspaceSet& GetWindowSet() const;
|
|
UIEditorWindowWorkspaceController BuildWorkspaceMutationController() const;
|
|
bool CommitLiveWindowMutation(
|
|
std::string_view windowId,
|
|
const UIEditorWorkspaceController& workspaceController,
|
|
std::string& outError);
|
|
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 BuildPlanForLiveWindowMutation(
|
|
std::string_view windowId,
|
|
const UIEditorWorkspaceController& workspaceController,
|
|
const std::vector<EditorWindowHostSnapshot>& hostWindows,
|
|
std::wstring_view primaryWindowTitle,
|
|
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);
|
|
|
|
EditorWindowWorkspaceStore m_workspaceStore;
|
|
};
|
|
|
|
} // namespace XCEngine::UI::Editor::App
|