78 lines
3.3 KiB
C++
78 lines
3.3 KiB
C++
#pragma once
|
|
|
|
#include <XCEditor/Docking/UIEditorDockHostInteraction.h>
|
|
|
|
namespace XCEngine::UI::Editor::Detail {
|
|
|
|
struct DockHostTabStripEventResult {
|
|
bool consumed = false;
|
|
bool commandRequested = false;
|
|
bool reorderRequested = false;
|
|
bool dragStarted = false;
|
|
bool dragEnded = false;
|
|
bool dragCanceled = false;
|
|
bool requestPointerCapture = false;
|
|
bool releasePointerCapture = false;
|
|
UIEditorWorkspaceCommandKind commandKind = UIEditorWorkspaceCommandKind::ActivatePanel;
|
|
std::size_t dropInsertionIndex = Widgets::UIEditorTabStripInvalidIndex;
|
|
std::string panelId = {};
|
|
std::string nodeId = {};
|
|
std::string draggedTabId = {};
|
|
Widgets::UIEditorDockHostHitTarget hitTarget = {};
|
|
int priority = 0;
|
|
};
|
|
|
|
bool ShouldUsePointerPosition(const ::XCEngine::UI::UIInputEvent& event);
|
|
bool ShouldDispatchTabStripEvent(
|
|
const ::XCEngine::UI::UIInputEvent& event,
|
|
bool splitterActive);
|
|
UIEditorWorkspaceLayoutOperationResult ApplySplitRatio(
|
|
UIEditorWorkspaceController& controller,
|
|
std::string_view nodeId,
|
|
float splitRatio);
|
|
UIEditorWorkspaceCommandResult DispatchPanelCommand(
|
|
UIEditorWorkspaceController& controller,
|
|
UIEditorWorkspaceCommandKind kind,
|
|
std::string panelId);
|
|
UIEditorDockHostTabStripInteractionEntry& FindOrCreateTabStripInteractionEntry(
|
|
UIEditorDockHostInteractionState& state,
|
|
std::string_view nodeId);
|
|
void PruneTabStripInteractionEntries(
|
|
UIEditorDockHostInteractionState& state,
|
|
const Widgets::UIEditorDockHostLayout& layout);
|
|
void SyncDockHostTabStripVisualStates(UIEditorDockHostInteractionState& state);
|
|
bool HasFocusedTabStrip(const UIEditorDockHostInteractionState& state);
|
|
const Widgets::UIEditorDockHostTabStackLayout* FindTabStackLayoutByNodeId(
|
|
const Widgets::UIEditorDockHostLayout& layout,
|
|
std::string_view nodeId);
|
|
bool IsPointInsideRect(
|
|
const ::XCEngine::UI::UIRect& rect,
|
|
const ::XCEngine::UI::UIPoint& point);
|
|
void ClearAllTabStripTransientInteractions(UIEditorDockHostInteractionState& state);
|
|
void ClearTabDockDragState(UIEditorDockHostInteractionState& state);
|
|
std::vector<Widgets::UIEditorTabStripItem> BuildTabStripItems(
|
|
const Widgets::UIEditorDockHostTabStackLayout& tabStack);
|
|
Widgets::UIEditorDockHostHitTarget MapTabStripHitTarget(
|
|
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
|
const UIEditorTabStripInteractionResult& result);
|
|
int ResolveTabStripPriority(const UIEditorTabStripInteractionResult& result);
|
|
DockHostTabStripEventResult ProcessTabStripEvent(
|
|
UIEditorDockHostInteractionState& state,
|
|
const Widgets::UIEditorDockHostLayout& layout,
|
|
const ::XCEngine::UI::UIInputEvent& event,
|
|
const Widgets::UIEditorDockHostMetrics& metrics);
|
|
std::size_t ResolveTabHeaderDropInsertionIndex(
|
|
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
|
const ::XCEngine::UI::UIPoint& point);
|
|
UIEditorWorkspaceDockPlacement ResolveDockPlacement(
|
|
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
|
const ::XCEngine::UI::UIPoint& point);
|
|
void SyncDockPreview(
|
|
UIEditorDockHostInteractionState& state,
|
|
const Widgets::UIEditorDockHostLayout& layout);
|
|
void SyncHoverTarget(
|
|
UIEditorDockHostInteractionState& state,
|
|
const Widgets::UIEditorDockHostLayout& layout);
|
|
|
|
} // namespace XCEngine::UI::Editor::Detail
|