private static string GetText(String text, JORControl cnt) { if (UseTranslation) { return(translationDictionary.Translate(text, cnt)); } else { return(text); } }
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); } } }
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); }
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); }
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(); } }