new_editor: isolate project panel state and harden runtime reset

This commit is contained in:
2026-04-22 00:19:35 +08:00
parent fff33185b9
commit 8bfca5e8f2
11 changed files with 144 additions and 61 deletions

View File

@@ -553,7 +553,16 @@ std::string RemapMovedItemId(
} // namespace
void ProjectBrowserModel::Reset() {
m_assetsRootPath.clear();
m_folderEntries.clear();
m_treeItems.clear();
m_assetEntries.clear();
m_currentFolderId.clear();
}
void ProjectBrowserModel::Initialize(const std::filesystem::path& repoRoot) {
Reset();
m_assetsRootPath = (repoRoot / "project/Assets").lexically_normal();
TraceProjectBrowser("ProjectBrowserModel::Initialize assetsRoot=" + PathToUtf8String(m_assetsRootPath));
std::error_code errorCode = {};
@@ -571,21 +580,6 @@ void ProjectBrowserModel::Initialize(const std::filesystem::path& repoRoot) {
std::to_string(m_assetEntries.size()));
}
void ProjectBrowserModel::SetFolderIcon(const ::XCEngine::UI::UITextureHandle& icon) {
if (m_folderIcon.nativeHandle == icon.nativeHandle &&
m_folderIcon.width == icon.width &&
m_folderIcon.height == icon.height &&
m_folderIcon.kind == icon.kind &&
m_folderIcon.resourceHandle == icon.resourceHandle) {
return;
}
m_folderIcon = icon;
if (!m_assetsRootPath.empty()) {
RefreshFolderTree();
}
}
void ProjectBrowserModel::Refresh() {
TraceProjectBrowser("ProjectBrowserModel::Refresh begin");
RefreshFolderTree();
@@ -1307,7 +1301,6 @@ void ProjectBrowserModel::RefreshFolderTree() {
item.label = folderEntry.label;
item.depth = depth;
item.forceLeaf = !HasChildDirectories(folderPath);
item.leadingIcon = m_folderIcon;
m_treeItems.push_back(std::move(item));
const std::vector<std::filesystem::path> childFolders =