Extract shared editor tree view
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user