33 lines
862 B
C++
33 lines
862 B
C++
#include "scene_hierarchy_panel.hpp"
|
|
|
|
#include <imgui.h>
|
|
|
|
void SceneHierarchyPanel::drawNode(const Node& node) {
|
|
if (node.children.empty()) {
|
|
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf |
|
|
ImGuiTreeNodeFlags_NoTreePushOnOpen |
|
|
ImGuiTreeNodeFlags_SpanAvailWidth;
|
|
if (node.name == selected) {
|
|
flags |= ImGuiTreeNodeFlags_Selected;
|
|
}
|
|
ImGui::TreeNodeEx(node.name.c_str(), flags);
|
|
if (ImGui::IsItemClicked()) {
|
|
selected = node.name;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (ImGui::TreeNodeEx(node.name.c_str(), ImGuiTreeNodeFlags_SpanAvailWidth)) {
|
|
for (const Node& child : node.children) {
|
|
drawNode(child);
|
|
}
|
|
ImGui::TreePop();
|
|
}
|
|
}
|
|
|
|
void SceneHierarchyPanel::onUpdate(const sophia::FrameInfo&) {
|
|
for (const Node& node : nodes) {
|
|
drawNode(node);
|
|
}
|
|
}
|