using AppUI.Localization; using AppUI.Util.Input; using TMPro; using UnityEditor; using UnityEngine; namespace AppUI.Editor { [CustomEditor(typeof(AppUITMPInputField))] public class AppUITMPInputFieldEditor : UnityEditor.Editor { SerializedProperty _titleKey; SerializedProperty _title; SerializedProperty _placeholderKey; SerializedProperty _placeholder; SerializedProperty _kind; SerializedProperty _titleLabel; SerializedProperty _inputField; SerializedProperty _actionBar; SerializedProperty _minLength; SerializedProperty _maxLength; SerializedProperty _required; SerializedProperty _clickOnly; SerializedProperty _onClick; void OnEnable() { _titleKey = serializedObject.FindProperty("titleKey"); _title = serializedObject.FindProperty("title"); _placeholderKey = serializedObject.FindProperty("placeholderKey"); _placeholder = serializedObject.FindProperty("placeholder"); _kind = serializedObject.FindProperty("kind"); _titleLabel = serializedObject.FindProperty("titleLabel"); _inputField = serializedObject.FindProperty("inputField"); _actionBar = serializedObject.FindProperty("actionBar"); _minLength = serializedObject.FindProperty("minLength"); _maxLength = serializedObject.FindProperty("maxLength"); _required = serializedObject.FindProperty("required"); _clickOnly = serializedObject.FindProperty("clickOnly"); _onClick = serializedObject.FindProperty("onClick"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.LabelField("TMPInput 通用输入", EditorStyles.boldLabel); EditorGUILayout.HelpBox( "Title Key / Placeholder Key 优先于下方明文,走 AppUILocalization(新表优先 + 旧表回退)。", MessageType.Info); var changed = false; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(_titleKey, new GUIContent("Title Key")); EditorGUILayout.PropertyField(_title, new GUIContent("Title 文案(fallback)")); EditorGUILayout.PropertyField(_placeholderKey, new GUIContent("Placeholder Key")); EditorGUILayout.PropertyField(_placeholder, new GUIContent("Placeholder(fallback)")); EditorGUILayout.PropertyField(_kind, new GUIContent("输入类型")); if (EditorGUI.EndChangeCheck()) changed = true; if (changed) { serializedObject.ApplyModifiedProperties(); ApplyKindToTargets(); RefreshLocalizedPreview(); } if (GUILayout.Button("重新应用类型默认配置到 InputField")) { serializedObject.ApplyModifiedProperties(); ApplyKindToTargets(); } if (GUILayout.Button("刷新多语言 Title / Placeholder")) { serializedObject.ApplyModifiedProperties(); RefreshLocalizedPreview(); } EditorGUILayout.Space(8); EditorGUILayout.LabelField("引用", EditorStyles.boldLabel); EditorGUILayout.PropertyField(_titleLabel); EditorGUILayout.PropertyField(_inputField); EditorGUILayout.PropertyField(_actionBar); EditorGUILayout.Space(8); EditorGUILayout.LabelField("校验", EditorStyles.boldLabel); EditorGUILayout.PropertyField(_required); EditorGUILayout.PropertyField(_minLength, new GUIContent("最小长度 (0=默认)")); EditorGUILayout.PropertyField(_maxLength, new GUIContent("最大长度 (0=默认)")); EditorGUILayout.Space(8); EditorGUILayout.LabelField("仅点击", EditorStyles.boldLabel); EditorGUILayout.PropertyField(_clickOnly, new GUIContent("仅点击模式")); EditorGUILayout.PropertyField(_onClick, new GUIContent("On Click")); serializedObject.ApplyModifiedProperties(); if (!Application.isPlaying && targets.Length == 1 && targets[0] is AppUITMPInputField preview) { EditorGUILayout.Space(8); var contentHint = preview.InputField != null ? preview.InputField.contentType.ToString() : "(未绑定 InputField)"; EditorGUILayout.HelpBox( $"预览 TrimmedText: \"{preview.TrimmedText}\" | ContentType: {contentHint}", MessageType.None); } } void RefreshLocalizedPreview() { AppUILocalization.Reload(); foreach (var t in targets) { if (t is not AppUITMPInputField field) continue; Undo.RecordObject(field, "Refresh AppUI Input Localization"); if (field.InputField != null) Undo.RecordObject(field.InputField, "Refresh AppUI Input Localization"); field.ApplyLocalizedTexts(); EditorUtility.SetDirty(field); } } void ApplyKindToTargets() { foreach (var t in targets) { if (t is not AppUITMPInputField field) continue; Undo.RecordObject(field, "Apply AppUI Input Kind"); if (field.InputField != null) Undo.RecordObject(field.InputField, "Apply AppUI Input Kind"); field.ApplyKindSettings(); EditorUtility.SetDirty(field); if (field.InputField != null) EditorUtility.SetDirty(field.InputField); } } } }