Example #1
0
        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);
                }
            }
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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();
            }
        }