Пример #1
0
 private static string GetText(String text, JORControl cnt)
 {
     if (UseTranslation)
     {
         return(translationDictionary.Translate(text, cnt));
     }
     else
     {
         return(text);
     }
 }
Пример #2
0
        private static void EnsureTranslation(JORControl jorControl)
        {
            translationDictionary.EnsureKey(jorControl.Name);

            if (jorControl is JORControlSelector)
            {
                var jorSelector = jorControl as JORControlSelector;
                foreach (var jorSelectorItem in jorSelector.Items)
                {
                    EnsureTranslation(jorSelectorItem);
                }
            }
        }
Пример #3
0
        private static Vector4?GetHighlightColor(JORControl jorControl)
        {
            if (MatchesSearchString(jorControl.Name, jorControl))
            {
                return(new Vector4(0xFF, 0x00, 0xFF, 0xFF));
            }

            if (jorControl is JORControlSelector)
            {
                var jorSelector = jorControl as JORControlSelector;
                foreach (var item in jorSelector.Items)
                {
                    if (MatchesSearchString(item.Name, jorControl))
                    {
                        return(new Vector4(0x00, 0xFF, 0x00, 0xFF));
                    }
                }
            }

            return(null);
        }
Пример #4
0
        private static bool MatchesSearchString(string text, JORControl jorControl)
        {
            if (String.IsNullOrEmpty(currentSearchString))
            {
                return(false);
            }

            var lowerSearchString = currentSearchString.ToLower();

            if (text.ToLower().Contains(lowerSearchString))
            {
                return(true);
            }

            var translatedText = translationDictionary.Translate(text, jorControl);

            if (translatedText.ToLower().Contains(lowerSearchString))
            {
                return(true);
            }

            return(false);
        }
Пример #5
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();
            }
        }