|
@@ -3920,6 +3920,7 @@ static void DemoWindowWidgetsTreeNodes()
|
|
|
IMGUI_DEMO_MARKER("Widgets/Tree Nodes");
|
|
|
if (ImGui::TreeNode("Tree Nodes"))
|
|
|
{
|
|
|
+ // See see "Examples -> Property Editor" (ShowExampleAppPropertyEditor() function) for a fancier, data-driven tree.
|
|
|
IMGUI_DEMO_MARKER("Widgets/Tree Nodes/Basic trees");
|
|
|
if (ImGui::TreeNode("Basic trees"))
|
|
|
{
|
|
@@ -3946,6 +3947,35 @@ static void DemoWindowWidgetsTreeNodes()
|
|
|
ImGui::TreePop();
|
|
|
}
|
|
|
|
|
|
+ IMGUI_DEMO_MARKER("Widgets/Tree Nodes/Hierarchy lines");
|
|
|
+ if (ImGui::TreeNode("Hierarchy lines"))
|
|
|
+ {
|
|
|
+ static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_DrawLinesFull | ImGuiTreeNodeFlags_DefaultOpen;
|
|
|
+ HelpMarker("Default option for DrawLinesXXX is stored in style.TreeLinesFlags");
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesNone", &base_flags, ImGuiTreeNodeFlags_DrawLinesNone);
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesFull", &base_flags, ImGuiTreeNodeFlags_DrawLinesFull);
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesToNodes", &base_flags, ImGuiTreeNodeFlags_DrawLinesToNodes);
|
|
|
+
|
|
|
+ if (ImGui::TreeNodeEx("Parent", base_flags))
|
|
|
+ {
|
|
|
+ if (ImGui::TreeNodeEx("Child 1", base_flags))
|
|
|
+ {
|
|
|
+ ImGui::Button("Button for Child 1");
|
|
|
+ ImGui::TreePop();
|
|
|
+ }
|
|
|
+ if (ImGui::TreeNodeEx("Child 2", base_flags))
|
|
|
+ {
|
|
|
+ ImGui::Button("Button for Child 2");
|
|
|
+ ImGui::TreePop();
|
|
|
+ }
|
|
|
+ ImGui::Text("Remaining contents");
|
|
|
+ ImGui::Text("Remaining contents");
|
|
|
+ ImGui::TreePop();
|
|
|
+ }
|
|
|
+
|
|
|
+ ImGui::TreePop();
|
|
|
+ }
|
|
|
+
|
|
|
IMGUI_DEMO_MARKER("Widgets/Tree Nodes/Advanced, with Selectable nodes");
|
|
|
if (ImGui::TreeNode("Advanced, with Selectable nodes"))
|
|
|
{
|
|
@@ -3964,6 +3994,12 @@ static void DemoWindowWidgetsTreeNodes()
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_AllowOverlap", &base_flags, ImGuiTreeNodeFlags_AllowOverlap);
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_Framed", &base_flags, ImGuiTreeNodeFlags_Framed); ImGui::SameLine(); HelpMarker("Draw frame with background (e.g. for CollapsingHeader)");
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_NavLeftJumpsBackHere", &base_flags, ImGuiTreeNodeFlags_NavLeftJumpsBackHere);
|
|
|
+
|
|
|
+ HelpMarker("Default option for DrawLinesXXX is stored in style.TreeLinesFlags");
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesNone", &base_flags, ImGuiTreeNodeFlags_DrawLinesNone);
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesFull", &base_flags, ImGuiTreeNodeFlags_DrawLinesFull);
|
|
|
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesToNodes", &base_flags, ImGuiTreeNodeFlags_DrawLinesToNodes);
|
|
|
+
|
|
|
ImGui::Checkbox("Align label with current X position", &align_label_with_current_x_position);
|
|
|
ImGui::Checkbox("Test tree node as drag source", &test_drag_and_drop);
|
|
|
ImGui::Text("Hello!");
|
|
@@ -4607,10 +4643,11 @@ static void DemoWindowLayout()
|
|
|
ImGui::SmallButton("SmallButton()");
|
|
|
|
|
|
// Tree
|
|
|
+ // (here the node appears after a button and has odd intent, so we use ImGuiTreeNodeFlags_DrawLinesNone to disable hierarchy outline)
|
|
|
const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
|
|
|
ImGui::Button("Button##1");
|
|
|
ImGui::SameLine(0.0f, spacing);
|
|
|
- if (ImGui::TreeNode("Node##1"))
|
|
|
+ if (ImGui::TreeNodeEx("Node##1", ImGuiTreeNodeFlags_DrawLinesNone))
|
|
|
{
|
|
|
// Placeholder tree data
|
|
|
for (int i = 0; i < 6; i++)
|
|
@@ -6592,7 +6629,7 @@ static void DemoWindowTables()
|
|
|
{
|
|
|
static ImGuiTableFlags table_flags = ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersOuterH | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg | ImGuiTableFlags_NoBordersInBody;
|
|
|
|
|
|
- static ImGuiTreeNodeFlags tree_node_flags_base = ImGuiTreeNodeFlags_SpanAllColumns;
|
|
|
+ static ImGuiTreeNodeFlags tree_node_flags_base = ImGuiTreeNodeFlags_SpanAllColumns | ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_DrawLinesFull;
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", &tree_node_flags_base, ImGuiTreeNodeFlags_SpanFullWidth);
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanLabelWidth", &tree_node_flags_base, ImGuiTreeNodeFlags_SpanLabelWidth);
|
|
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAllColumns", &tree_node_flags_base, ImGuiTreeNodeFlags_SpanAllColumns);
|
|
@@ -8139,6 +8176,14 @@ bool ImGui::ShowStyleSelector(const char* label)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+static const char* GetTreeLinesFlagsName(ImGuiTreeNodeFlags flags)
|
|
|
+{
|
|
|
+ if (flags == ImGuiTreeNodeFlags_DrawLinesNone) return "DrawLinesNone";
|
|
|
+ if (flags == ImGuiTreeNodeFlags_DrawLinesFull) return "DrawLinesFull";
|
|
|
+ if (flags == ImGuiTreeNodeFlags_DrawLinesToNodes) return "DrawLinesToNodes";
|
|
|
+ return "";
|
|
|
+}
|
|
|
+
|
|
|
void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|
|
{
|
|
|
IMGUI_DEMO_MARKER("Tools/Style Editor");
|
|
@@ -8233,6 +8278,15 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|
|
style.WindowMenuButtonPosition = (ImGuiDir)(window_menu_button_position - 1);
|
|
|
|
|
|
ImGui::SeparatorText("Widgets");
|
|
|
+ if (ImGui::BeginCombo("TreeLinesFlags", GetTreeLinesFlagsName(style.TreeLinesFlags)))
|
|
|
+ {
|
|
|
+ const ImGuiTreeNodeFlags options[] = { ImGuiTreeNodeFlags_DrawLinesNone, ImGuiTreeNodeFlags_DrawLinesFull, ImGuiTreeNodeFlags_DrawLinesToNodes };
|
|
|
+ for (ImGuiTreeNodeFlags option : options)
|
|
|
+ if (ImGui::Selectable(GetTreeLinesFlagsName(option), style.TreeLinesFlags == option))
|
|
|
+ style.TreeLinesFlags = option;
|
|
|
+ ImGui::EndCombo();
|
|
|
+ }
|
|
|
+ ImGui::SliderFloat("TreeLinesSize", &style.TreeLinesSize, 0.0f, 1.0f, "%.0f");
|
|
|
ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0");
|
|
|
ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f");
|
|
|
ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content.");
|
|
@@ -9285,8 +9339,10 @@ struct ExampleAppPropertyEditor
|
|
|
ImGui::TableNextColumn();
|
|
|
ImGui::PushID(node->UID);
|
|
|
ImGuiTreeNodeFlags tree_flags = ImGuiTreeNodeFlags_None;
|
|
|
- tree_flags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick; // Standard opening mode as we are likely to want to add selection afterwards
|
|
|
- tree_flags |= ImGuiTreeNodeFlags_NavLeftJumpsBackHere; // Left arrow support
|
|
|
+ tree_flags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick;// Standard opening mode as we are likely to want to add selection afterwards
|
|
|
+ tree_flags |= ImGuiTreeNodeFlags_NavLeftJumpsBackHere; // Left arrow support
|
|
|
+ tree_flags |= ImGuiTreeNodeFlags_SpanFullWidth; // Span full width for easier mouse reach
|
|
|
+ tree_flags |= ImGuiTreeNodeFlags_DrawLinesToNodes; // Always draw hierarchy outlines
|
|
|
if (node == VisibleNode)
|
|
|
tree_flags |= ImGuiTreeNodeFlags_Selected;
|
|
|
if (node->Childs.Size == 0)
|