using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using UnityEditor; using UnityEditor.UIElements; using System.Text; namespace BITKit.Editors { public class StringHelper : EditorWindow { [MenuItem("Tools/Open StringHelper")] public static void Open() { var windows = GetWindow(); windows.Show(); windows.titleContent = new GUIContent(nameof(StringHelper)); } public void CreateGUI() { TextField textField = new("String"); IntegerField textPaddingLimit = new("TextPaddingLimit"); IntegerField textLengthLabel = new("TextLength"); IntegerField byteCountLabel = new("ByteCount"); IntegerField resultByteCount = new("ResultByteCount"); ProgressBar byteProgressBar = new(); ProgressBar paddingLimitBar = new(); Label formatString = new(); byteProgressBar.highValue = paddingLimitBar.highValue = 100; byteProgressBar.lowValue = paddingLimitBar.lowValue = 0; textField.RegisterValueChangedCallback(x => OnValueChanged(x.newValue)); textPaddingLimit.RegisterValueChangedCallback(x => OnValueChanged(textField.text)); textLengthLabel.isReadOnly = true; byteCountLabel.isReadOnly = true; rootVisualElement.Add(textField); rootVisualElement.Add(textPaddingLimit); rootVisualElement.Add(textLengthLabel); rootVisualElement.Add(byteCountLabel); rootVisualElement.Add(formatString); rootVisualElement.Add(resultByteCount); rootVisualElement.Add(paddingLimitBar); rootVisualElement.Add(byteProgressBar); void OnValueChanged(string value) { int byteCount = Encoding.UTF8.GetByteCount(value); textLengthLabel.SetValueWithoutNotify(value.Length); byteCountLabel.SetValueWithoutNotify(byteCount); byteProgressBar.SetValueWithoutNotify(byteCount); paddingLimitBar.SetValueWithoutNotify(textPaddingLimit.value); formatString.text = Padding(value); } string Padding(string value) { int byteCount = Encoding.UTF8.GetByteCount(value); var length = Mathf.Max(0, textPaddingLimit.value - byteCount); value = value + new string('x', length) + ":END"; resultByteCount.SetValueWithoutNotify(Encoding.UTF8.GetByteCount(value)); return value; } } } }