private static void DrawTree(JORServer server, JORNode node) { if (node == null) { return; } if (node.Name == null) { return; } if (node.Status == JORNodeStatus.Invalid) { return; } if (node.Status == JORNodeStatus.GenRequestSent) { if (node.LastRequestTime == null || (DateTime.Now - node.LastRequestTime).Seconds > 2) { server.SendGenObjectInfo(node); } return; } var nodeLabel = GetText(node.Name, null); var highlightColor = GetHighlightColor(node); int styleColorPushCount = 0; var treeNodeFlags = ImGuiTreeNodeFlags.OpenOnDoubleClick | ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.SpanFullWidth; if (node == server.CurrentNode) { treeNodeFlags |= ImGuiTreeNodeFlags.Selected; } if (node.Children.Count == 0) { treeNodeFlags |= ImGuiTreeNodeFlags.Leaf; if (node.Controls.Count == 0) { unsafe { var vector = ImGui.GetStyleColorVec4(ImGuiCol.TextDisabled); ImGui.PushStyleColor(ImGuiCol.Text, *vector); } styleColorPushCount++; } } if (highlightColor.HasValue) { treeNodeFlags |= ImGuiTreeNodeFlags.Framed; ImGui.PushStyleColor(ImGuiCol.Header, highlightColor.Value); styleColorPushCount++; } bool treeNodeOpen = ImGui.TreeNodeEx(nodeLabel + "##" + node.NodePtr, treeNodeFlags); ImGui.PopStyleColor(styleColorPushCount); if (ImGui.IsItemClicked()) { server.SetCurrentNode(node); } if (treeNodeOpen) { foreach (JORNode jorNode in node.Children) { DrawTree(server, jorNode); } ImGui.TreePop(); } }