| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- 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);
- }
- }
- }
- }
|