new_editor: retire xcui editor lib and narrow project reconcile
This commit is contained in:
@@ -324,8 +324,7 @@ const std::vector<Widgets::UIEditorTreeViewItem>& ProjectPanel::GetWindowTreeIte
|
||||
void ProjectPanel::Initialize(const std::filesystem::path& repoRoot) {
|
||||
m_ownedProjectRuntime = std::make_unique<EditorProjectRuntime>();
|
||||
m_ownedProjectRuntime->Initialize(repoRoot);
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
}
|
||||
|
||||
void ProjectPanel::SetProjectRuntime(EditorProjectRuntime* projectRuntime) {
|
||||
@@ -334,8 +333,7 @@ void ProjectPanel::SetProjectRuntime(EditorProjectRuntime* projectRuntime) {
|
||||
}
|
||||
|
||||
m_projectRuntime = projectRuntime;
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
}
|
||||
|
||||
void ProjectPanel::SetCommandFocusService(
|
||||
@@ -386,7 +384,8 @@ ProjectPanel::CursorKind ProjectPanel::GetCursorKind() const {
|
||||
bool ProjectPanel::HasActivePointerCapture() const {
|
||||
return m_splitterDragging ||
|
||||
GridDrag::HasActivePointerCapture(m_assetDragState) ||
|
||||
TreeDrag::HasActivePointerCapture(m_treeDragState);
|
||||
TreeDrag::HasActivePointerCapture(m_treeDragState) ||
|
||||
HasActiveUIEditorTreeViewPointerCapture(m_treeInteractionState);
|
||||
}
|
||||
|
||||
const std::vector<ProjectPanel::Event>& ProjectPanel::GetFrameEvents() const {
|
||||
@@ -647,6 +646,11 @@ void ProjectPanel::SyncCurrentFolderSelection() {
|
||||
m_folderSelection.SetSelection(currentFolderId);
|
||||
}
|
||||
|
||||
void ProjectPanel::SyncSelectionsFromRuntime() {
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
}
|
||||
|
||||
void ProjectPanel::SyncAssetSelectionFromRuntime() {
|
||||
const EditorProjectRuntime* runtime = ResolveProjectRuntime();
|
||||
if (runtime == nullptr || !runtime->HasSelection()) {
|
||||
@@ -662,13 +666,24 @@ void ProjectPanel::SyncAssetSelectionFromRuntime() {
|
||||
m_assetSelection.ClearSelection();
|
||||
}
|
||||
|
||||
Widgets::UIEditorTreeViewMetrics ProjectPanel::RebuildPanelLayout(const UIRect& bounds) {
|
||||
const Widgets::UIEditorTreeViewMetrics treeMetrics = ResolveUIEditorTreeViewMetrics();
|
||||
m_layout = BuildLayout(bounds);
|
||||
m_treeFrame.layout = Widgets::BuildUIEditorTreeViewLayout(
|
||||
m_layout.treeRect,
|
||||
GetWindowTreeItems(),
|
||||
m_folderExpansion,
|
||||
treeMetrics,
|
||||
m_treeInteractionState.verticalOffset);
|
||||
return treeMetrics;
|
||||
}
|
||||
|
||||
bool ProjectPanel::NavigateToFolder(std::string_view itemId, EventSource source) {
|
||||
if (!ResolveProjectRuntime()->NavigateToFolder(itemId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
m_hoveredAssetItemId.clear();
|
||||
m_lastPrimaryClickedAssetId.clear();
|
||||
EmitEvent(
|
||||
@@ -687,9 +702,8 @@ bool ProjectPanel::OpenProjectItem(std::string_view itemId, EventSource source)
|
||||
if (asset->directory) {
|
||||
const bool navigated = ResolveProjectRuntime()->OpenItem(asset->itemId);
|
||||
if (navigated && HasValidBounds(m_layout.bounds)) {
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
m_layout = BuildLayout(m_layout.bounds);
|
||||
SyncSelectionsFromRuntime();
|
||||
RebuildPanelLayout(m_layout.bounds);
|
||||
m_hoveredAssetItemId.clear();
|
||||
EmitEvent(
|
||||
EventKind::FolderNavigated,
|
||||
@@ -1147,12 +1161,11 @@ UIEditorHostCommandDispatchResult ProjectPanel::DispatchAssetCommand(
|
||||
const auto finalizeCreatedAsset =
|
||||
[this](std::string_view createdItemId) {
|
||||
ClearRenameState();
|
||||
SyncCurrentFolderSelection();
|
||||
m_hoveredAssetItemId.clear();
|
||||
m_lastPrimaryClickedAssetId = std::string(createdItemId);
|
||||
m_lastPrimaryClickTime = {};
|
||||
ResolveProjectRuntime()->SetSelection(createdItemId);
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
|
||||
const AssetEntry* createdAsset = FindAssetEntry(createdItemId);
|
||||
if (createdAsset == nullptr) {
|
||||
@@ -1184,7 +1197,7 @@ UIEditorHostCommandDispatchResult ProjectPanel::DispatchAssetCommand(
|
||||
if (target.containerFolder->itemId != GetBrowserModel().GetCurrentFolderId()) {
|
||||
NavigateToFolder(target.containerFolder->itemId, EventSource::GridSecondary);
|
||||
if (HasValidBounds(m_layout.bounds)) {
|
||||
m_layout = BuildLayout(m_layout.bounds);
|
||||
RebuildPanelLayout(m_layout.bounds);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1216,7 +1229,7 @@ UIEditorHostCommandDispatchResult ProjectPanel::DispatchAssetCommand(
|
||||
if (target.containerFolder->itemId != GetBrowserModel().GetCurrentFolderId()) {
|
||||
NavigateToFolder(target.containerFolder->itemId, EventSource::GridSecondary);
|
||||
if (HasValidBounds(m_layout.bounds)) {
|
||||
m_layout = BuildLayout(m_layout.bounds);
|
||||
RebuildPanelLayout(m_layout.bounds);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1370,8 +1383,7 @@ UIEditorHostCommandDispatchResult ProjectPanel::DispatchEditCommand(
|
||||
}
|
||||
|
||||
ClearRenameState();
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
m_hoveredAssetItemId.clear();
|
||||
m_lastPrimaryClickedAssetId.clear();
|
||||
m_lastPrimaryClickTime = {};
|
||||
@@ -1439,8 +1451,7 @@ void ProjectPanel::Update(
|
||||
|
||||
if (GetBrowserModel().GetTreeItems().empty()) {
|
||||
ResolveProjectRuntime()->Refresh();
|
||||
SyncCurrentFolderSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
}
|
||||
|
||||
RebuildWindowTreeItems();
|
||||
@@ -1472,17 +1483,11 @@ void ProjectPanel::Update(
|
||||
dispatchEntry.allowInteraction);
|
||||
|
||||
m_navigationWidth = ClampNavigationWidth(m_navigationWidth, dispatchEntry.bounds.width);
|
||||
m_layout = BuildLayout(dispatchEntry.bounds);
|
||||
const Widgets::UIEditorTreeViewMetrics treeMetrics =
|
||||
RebuildPanelLayout(dispatchEntry.bounds);
|
||||
if (m_contextMenu.open) {
|
||||
RebuildContextMenu();
|
||||
}
|
||||
const Widgets::UIEditorTreeViewMetrics treeMetrics = ResolveUIEditorTreeViewMetrics();
|
||||
m_treeFrame.layout = Widgets::BuildUIEditorTreeViewLayout(
|
||||
m_layout.treeRect,
|
||||
GetWindowTreeItems(),
|
||||
m_folderExpansion,
|
||||
treeMetrics,
|
||||
m_treeInteractionState.verticalOffset);
|
||||
m_treeFrame.result = {};
|
||||
|
||||
if ((m_renameState.active || !m_pendingRenameItemId.empty()) &&
|
||||
@@ -1516,7 +1521,7 @@ void ProjectPanel::Update(
|
||||
m_treeFrame.result.selectedItemId != GetBrowserModel().GetCurrentFolderId()) {
|
||||
CloseContextMenu();
|
||||
NavigateToFolder(m_treeFrame.result.selectedItemId, EventSource::Tree);
|
||||
m_layout = BuildLayout(dispatchEntry.bounds);
|
||||
RebuildPanelLayout(dispatchEntry.bounds);
|
||||
}
|
||||
if (m_treeFrame.result.renameRequested &&
|
||||
!m_treeFrame.result.renameItemId.empty()) {
|
||||
@@ -1595,20 +1600,13 @@ void ProjectPanel::Update(
|
||||
const bool hadAssetSelection = ResolveProjectRuntime()->HasSelection();
|
||||
CloseContextMenu();
|
||||
ResolveProjectRuntime()->ClearSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
m_hoveredAssetItemId.clear();
|
||||
m_lastPrimaryClickedAssetId.clear();
|
||||
if (hadAssetSelection && !ResolveProjectRuntime()->HasSelection()) {
|
||||
EmitSelectionClearedEvent(EventSource::Tree);
|
||||
}
|
||||
SyncCurrentFolderSelection();
|
||||
m_layout = BuildLayout(dispatchEntry.bounds);
|
||||
m_treeFrame.layout = Widgets::BuildUIEditorTreeViewLayout(
|
||||
m_layout.treeRect,
|
||||
GetWindowTreeItems(),
|
||||
m_folderExpansion,
|
||||
treeMetrics,
|
||||
m_treeInteractionState.verticalOffset);
|
||||
RebuildPanelLayout(dispatchEntry.bounds);
|
||||
}
|
||||
|
||||
struct ProjectAssetDragCallbacks {
|
||||
@@ -1707,7 +1705,6 @@ void ProjectPanel::Update(
|
||||
m_hoveredAssetItemId.clear();
|
||||
m_lastPrimaryClickedAssetId.clear();
|
||||
m_lastPrimaryClickTime = {};
|
||||
SyncCurrentFolderSelection();
|
||||
|
||||
const std::string movedItemId = assetDragCallbacks.movedItemId.empty()
|
||||
? assetDragResult.draggedItemId
|
||||
@@ -1715,23 +1712,17 @@ void ProjectPanel::Update(
|
||||
if (const AssetEntry* movedAsset = FindAssetEntry(movedItemId);
|
||||
movedAsset != nullptr) {
|
||||
ResolveProjectRuntime()->SetSelection(movedItemId);
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
EmitEvent(EventKind::AssetSelected, EventSource::GridDrag, movedAsset);
|
||||
} else {
|
||||
ResolveProjectRuntime()->ClearSelection();
|
||||
SyncAssetSelectionFromRuntime();
|
||||
SyncSelectionsFromRuntime();
|
||||
if (hadAssetSelection && !ResolveProjectRuntime()->HasSelection()) {
|
||||
EmitSelectionClearedEvent(EventSource::GridDrag);
|
||||
}
|
||||
}
|
||||
|
||||
m_layout = BuildLayout(dispatchEntry.bounds);
|
||||
m_treeFrame.layout = Widgets::BuildUIEditorTreeViewLayout(
|
||||
m_layout.treeRect,
|
||||
GetWindowTreeItems(),
|
||||
m_folderExpansion,
|
||||
treeMetrics,
|
||||
m_treeInteractionState.verticalOffset);
|
||||
RebuildPanelLayout(dispatchEntry.bounds);
|
||||
}
|
||||
|
||||
const bool suppressPanelPointerEvents =
|
||||
@@ -1900,7 +1891,7 @@ void ProjectPanel::Update(
|
||||
m_layout.breadcrumbItems[releasedBreadcrumbIndex];
|
||||
if (item.clickable) {
|
||||
NavigateToFolder(item.targetFolderId, EventSource::Breadcrumb);
|
||||
m_layout = BuildLayout(dispatchEntry.bounds);
|
||||
RebuildPanelLayout(dispatchEntry.bounds);
|
||||
}
|
||||
}
|
||||
m_pressedBreadcrumbIndex = kInvalidLayoutIndex;
|
||||
|
||||
Reference in New Issue
Block a user