Files
XCEngine/editor/app/Windowing/System/EditorWindowSynchronizationPlan.h

85 lines
2.3 KiB
C++

#pragma once
#include <XCEditor/Workspace/UIEditorWindowWorkspaceModel.h>
#include <cstdint>
#include <string>
#include <string_view>
#include <vector>
namespace XCEngine::UI::Editor::App {
struct EditorWindowHostSnapshot {
std::string windowId = {};
bool workspaceWindow = false;
bool utilityWindow = false;
bool primary = false;
bool running = false;
bool destroyed = false;
bool hasNativeWindow = false;
bool hasWorkspaceProjection = false;
UIEditorWindowWorkspaceState workspaceState = {};
std::wstring title = {};
};
struct EditorWindowSynchronizationPlacement {
bool enabled = false;
int initialX = 0;
int initialY = 0;
int initialWidth = 0;
int initialHeight = 0;
};
struct EditorWindowSynchronizationUpdate {
UIEditorWindowWorkspaceState windowState = {};
bool primary = false;
std::wstring title = {};
};
struct EditorWindowSynchronizationCreate {
UIEditorWindowWorkspaceState windowState = {};
bool primary = false;
std::wstring title = {};
EditorWindowSynchronizationPlacement placement = {};
};
struct EditorWindowSynchronizationClose {
std::string windowId = {};
};
enum class EditorWindowSynchronizationActionKind : std::uint8_t {
CreateWorkspaceWindow = 0,
UpdateWorkspaceWindow,
CloseWorkspaceWindow,
};
struct EditorWindowSynchronizationAction {
EditorWindowSynchronizationActionKind kind =
EditorWindowSynchronizationActionKind::UpdateWorkspaceWindow;
EditorWindowSynchronizationCreate create = {};
EditorWindowSynchronizationUpdate update = {};
EditorWindowSynchronizationClose close = {};
};
struct EditorWindowSynchronizationPlan {
bool valid = false;
std::string errorMessage = {};
UIEditorWindowWorkspaceSet targetWindowSet = {};
std::vector<EditorWindowSynchronizationAction> actions = {};
[[nodiscard]] bool HasActions() const {
return !actions.empty();
}
};
struct EditorWindowSynchronizationPlannerInput {
const UIEditorPanelRegistry* panelRegistry = nullptr;
const UIEditorWindowWorkspaceSet* targetWindowSet = nullptr;
std::wstring_view primaryWindowTitle = {};
std::string_view preferredNewWindowId = {};
EditorWindowSynchronizationPlacement preferredPlacement = {};
std::vector<EditorWindowHostSnapshot> hostWindows = {};
};
} // namespace XCEngine::UI::Editor::App