Extract shared editor tree view

This commit is contained in:
2026-03-27 22:05:05 +08:00
parent a51e0f6f88
commit 37a90b39e2
6 changed files with 120 additions and 169 deletions

View File

@@ -118,37 +118,28 @@ void ProjectPanel::RenderFolderTreeNode(
}
}
ImGuiTreeNodeFlags flags =
ImGuiTreeNodeFlags_OpenOnArrow |
ImGuiTreeNodeFlags_OpenOnDoubleClick |
ImGuiTreeNodeFlags_SpanAvailWidth |
ImGuiTreeNodeFlags_FramePadding;
if (!hasChildFolders) {
flags |= ImGuiTreeNodeFlags_Leaf;
}
if (folder->fullPath == currentFolderPath) {
flags |= ImGuiTreeNodeFlags_Selected;
}
if (IsCurrentTreeBranch(currentFolderPath, folder->fullPath)) {
flags |= ImGuiTreeNodeFlags_DefaultOpen;
}
UI::TreeNodeOptions nodeOptions;
nodeOptions.selected = folder->fullPath == currentFolderPath;
nodeOptions.leaf = !hasChildFolders;
nodeOptions.defaultOpen = IsCurrentTreeBranch(currentFolderPath, folder->fullPath);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, UI::ProjectTreeNodeFramePadding());
const bool open = ImGui::TreeNodeEx((void*)folder.get(), flags, "%s", folder->name.c_str());
ImGui::PopStyleVar();
const UI::TreeNodeResult node = UI::DrawTreeNode(
(void*)folder.get(),
folder->name.c_str(),
nodeOptions);
if (ImGui::IsItemClicked()) {
if (node.clicked) {
manager.NavigateToFolder(folder);
}
if (open) {
if (node.open) {
for (const auto& child : folder->children) {
if (!child || !child->isFolder) {
continue;
}
RenderFolderTreeNode(manager, child, currentFolderPath);
}
ImGui::TreePop();
UI::EndTreeNode();
}
}