private static void AllSlidersToMax(JORServer jorServer, JORNode jorNode) { foreach (var jorControl in jorNode.Controls) { if (jorControl is JORControlRangeInt) { var jorRange = jorControl as JORControlRangeInt; jorRange.SetValue(jorServer, jorRange.RangeMax); } if (jorControl is JORControlRangeFloat) { var jorRange = jorControl as JORControlRangeFloat; jorRange.SetValue(jorServer, jorRange.RangeMax); } } }
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(); } }
public static void DrawControlContainer(JORServer server, JORControl control) { if (control.Node.Status == JORNodeStatus.Invalid) { return; } var scale = 2.0f; if (control.Location.X != -1 && control.Location.Y != -1) { ImGui.SetCursorPosX(control.Location.X * scale); ImGui.SetCursorPosY(control.Location.Y * scale); } ImGui.SetNextItemWidth(control.Location.Width); var highlightColor = GetHighlightColor(control); if (highlightColor.HasValue) { ImGui.PushStyleColor(ImGuiCol.FrameBg, highlightColor.Value); } switch (control.Type) { case "LABL": // Label { var jorLabel = control as JORControlLabel; ImGui.Text(GetText(jorLabel.Name, jorLabel)); break; } case "BUTN": // Button { var jorButton = control as JORControlButton; var disabled = (jorButton.Style & 0x40000000) != 0; // ImGUI.NET doesn't have a way to set disabled flag if (ImGui.Button(GetText(jorButton.Name, jorButton) + "##" + control.ID)) { jorButton.Click(server); } break; } case "CHBX": // Checkbox { var jorCheckbox = control as JORControlCheckBox; var val = jorCheckbox.Value; if (ImGui.Checkbox(GetText(jorCheckbox.Name, jorCheckbox) + "##" + jorCheckbox.ID + jorCheckbox.Mask, ref val)) { jorCheckbox.SetValue(server, val); } break; } case "RNGi": // Integer Range { var jorRange = control as JORControlRangeInt; var val = jorRange.Value; if (ImGui.SliderInt(GetText(jorRange.Name, jorRange) + "##" + control.ID, ref val, jorRange.RangeMin, jorRange.RangeMax)) { jorRange.SetValue(server, val); } break; } case "RNGf": // Float Range { var jorRange = control as JORControlRangeFloat; var val = jorRange.Value; if (ImGui.SliderFloat(GetText(jorRange.Name, jorRange) + "##" + control.ID, ref val, jorRange.RangeMin, jorRange.RangeMax)) { jorRange.SetValue(server, val); } break; } case "CMBX": // ComboBox { var jorSelector = control as JORControlSelector; var names = new string[jorSelector.Items.Count]; for (int i = 0; i < jorSelector.Items.Count; i++) { names[i] = GetText(jorSelector.Items[i].Name, jorSelector); } var val = (int)jorSelector.GetSelectedIndex(); if (ImGui.Combo(GetText(jorSelector.Name, jorSelector) + "##" + control.ID, ref val, names, names.Length)) { jorSelector.SetSelectedIndex(server, (uint)val); } break; } case "RBTN": // Radio Button { var jorSelector = control as JORControlSelector; var names = new string[jorSelector.Items.Count]; for (int i = 0; i < jorSelector.Items.Count; i++) { names[i] = GetText(jorSelector.Items[i].Name, jorSelector); } var val = (int)jorSelector.GetSelectedIndex(); ImGui.Combo(GetText(jorSelector.Name, jorSelector) + "##" + control.ID, ref val, names, names.Length); jorSelector.SetSelectedIndex(server, (uint)val); break; } case "EDBX": // EditBox { /// TODO!!! /// If someone types in the textbox, it might overflow the buffer. I don't know yet. I haven't found a text box to type in. /// Figure out a way to introduce a typable text buffer. var jorEdit = control as JORControlEditBox; var val = jorEdit.Text; var buff = Encoding.UTF8.GetBytes(val); ImGui.InputText(GetText(jorEdit.Name, jorEdit) + "##" + control.ID, buff, (uint)buff.Length); var newBuff = Encoding.UTF8.GetString(buff); jorEdit.SetValue(server, newBuff); break; } case "GRBX": // GroupBox { // Group boxes can have a text label, but they're never used in Twilight Princess. ImGui.Separator(); break; } default: DrawStyledTextInstance($"Unimplemented control '{control.Type}'", 0xFF0000FF); break; } if (highlightColor.HasValue) { ImGui.PopStyleColor(); } }