Skip to content

Instantly share code, notes, and snippets.

@unitycoder
Forked from nikescar1/TMP_InputField.cs
Created February 13, 2025 07:39
Show Gist options
  • Select an option

  • Save unitycoder/08dfef33d582ca9e5762d19a89350a38 to your computer and use it in GitHub Desktop.

Select an option

Save unitycoder/08dfef33d582ca9e5762d19a89350a38 to your computer and use it in GitHub Desktop.

Revisions

  1. @nikescar1 nikescar1 created this gist Jun 9, 2022.
    4,540 changes: 4,540 additions & 0 deletions TMP_InputField.cs
    4,540 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
    289 changes: 289 additions & 0 deletions TMP_InputFieldEditor.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,289 @@
    using UnityEngine;
    using UnityEngine.UI;
    using UnityEditor;
    using UnityEditor.UI;
    using UnityEditor.AnimatedValues;


    namespace TMPro.EditorUtilities
    {
    [CanEditMultipleObjects]
    [CustomEditor(typeof(TMP_InputField), true)]
    public class TMP_InputFieldEditor : SelectableEditor
    {
    private struct m_foldout
    { // Track Inspector foldout panel states, globally.
    public static bool textInput = true;
    public static bool fontSettings = true;
    public static bool extraSettings = true;
    //public static bool shadowSetting = false;
    //public static bool materialEditor = true;
    }

    SerializedProperty m_TextViewport;
    SerializedProperty m_TextComponent;
    SerializedProperty m_Text;
    SerializedProperty m_ContentType;
    SerializedProperty m_LineType;
    SerializedProperty m_LineLimit;
    SerializedProperty m_InputType;
    SerializedProperty m_CharacterValidation;
    SerializedProperty m_InputValidator;
    SerializedProperty m_RegexValue;
    SerializedProperty m_KeyboardType;
    SerializedProperty m_CharacterLimit;
    SerializedProperty m_CaretBlinkRate;
    SerializedProperty m_CaretWidth;
    SerializedProperty m_CaretColor;
    SerializedProperty m_CustomCaretColor;
    SerializedProperty m_SelectionColor;
    SerializedProperty m_HideMobileKeyboard;
    SerializedProperty m_HideMobileInput;
    SerializedProperty m_Placeholder;
    SerializedProperty m_VerticalScrollbar;
    SerializedProperty m_ScrollbarScrollSensitivity;
    SerializedProperty m_OnValueChanged;
    SerializedProperty m_OnEndEdit;
    SerializedProperty m_OnSelect;
    SerializedProperty m_OnFocus;
    SerializedProperty m_OnDeselect;
    SerializedProperty m_ReadOnly;
    SerializedProperty m_RichText;
    SerializedProperty m_RichTextEditingAllowed;
    SerializedProperty m_ResetOnDeActivation;
    SerializedProperty m_RestoreOriginalTextOnEscape;
    SerializedProperty m_ShouldActivateOnSelect;

    SerializedProperty m_OnFocusSelectAll;
    SerializedProperty m_GlobalPointSize;
    SerializedProperty m_GlobalFontAsset;

    AnimBool m_CustomColor;

    //TMP_InputValidator m_ValidationScript;

    protected override void OnEnable()
    {
    base.OnEnable();

    m_TextViewport = serializedObject.FindProperty("m_TextViewport");
    m_TextComponent = serializedObject.FindProperty("m_TextComponent");
    m_Text = serializedObject.FindProperty("m_Text");
    m_ContentType = serializedObject.FindProperty("m_ContentType");
    m_LineType = serializedObject.FindProperty("m_LineType");
    m_LineLimit = serializedObject.FindProperty("m_LineLimit");
    m_InputType = serializedObject.FindProperty("m_InputType");
    m_CharacterValidation = serializedObject.FindProperty("m_CharacterValidation");
    m_InputValidator = serializedObject.FindProperty("m_InputValidator");
    m_RegexValue = serializedObject.FindProperty("m_RegexValue");
    m_KeyboardType = serializedObject.FindProperty("m_KeyboardType");
    m_CharacterLimit = serializedObject.FindProperty("m_CharacterLimit");
    m_CaretBlinkRate = serializedObject.FindProperty("m_CaretBlinkRate");
    m_CaretWidth = serializedObject.FindProperty("m_CaretWidth");
    m_CaretColor = serializedObject.FindProperty("m_CaretColor");
    m_CustomCaretColor = serializedObject.FindProperty("m_CustomCaretColor");
    m_SelectionColor = serializedObject.FindProperty("m_SelectionColor");

    m_HideMobileKeyboard = serializedObject.FindProperty("m_HideSoftKeyboard");
    m_HideMobileInput = serializedObject.FindProperty("m_HideMobileInput");

    m_Placeholder = serializedObject.FindProperty("m_Placeholder");
    m_VerticalScrollbar = serializedObject.FindProperty("m_VerticalScrollbar");
    m_ScrollbarScrollSensitivity = serializedObject.FindProperty("m_ScrollSensitivity");

    m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
    m_OnEndEdit = serializedObject.FindProperty("m_OnEndEdit");
    m_OnSelect = serializedObject.FindProperty("m_OnSelect");
    m_OnFocus = serializedObject.FindProperty("m_OnFocus");
    m_OnDeselect = serializedObject.FindProperty("m_OnDeselect");
    m_ReadOnly = serializedObject.FindProperty("m_ReadOnly");
    m_RichText = serializedObject.FindProperty("m_RichText");
    m_RichTextEditingAllowed = serializedObject.FindProperty("m_isRichTextEditingAllowed");
    m_ResetOnDeActivation = serializedObject.FindProperty("m_ResetOnDeActivation");
    m_RestoreOriginalTextOnEscape = serializedObject.FindProperty("m_RestoreOriginalTextOnEscape");
    m_ShouldActivateOnSelect = serializedObject.FindProperty("m_ShouldActivateOnSelect");

    m_OnFocusSelectAll = serializedObject.FindProperty("m_OnFocusSelectAll");
    m_GlobalPointSize = serializedObject.FindProperty("m_GlobalPointSize");
    m_GlobalFontAsset = serializedObject.FindProperty("m_GlobalFontAsset");

    m_CustomColor = new AnimBool(m_CustomCaretColor.boolValue);
    m_CustomColor.valueChanged.AddListener(Repaint);
    }

    protected override void OnDisable()
    {
    base.OnDisable();
    m_CustomColor.valueChanged.RemoveListener(Repaint);
    }

    public override void OnInspectorGUI()
    {
    serializedObject.Update();

    base.OnInspectorGUI();

    EditorGUILayout.Space();

    EditorGUILayout.PropertyField(m_TextViewport);

    EditorGUILayout.PropertyField(m_TextComponent);

    TextMeshProUGUI text = null;
    if (m_TextComponent != null && m_TextComponent.objectReferenceValue != null)
    {
    text = m_TextComponent.objectReferenceValue as TextMeshProUGUI;
    //if (text.supportRichText)
    //{
    // EditorGUILayout.HelpBox("Using Rich Text with input is unsupported.", MessageType.Warning);
    //}
    }

    EditorGUI.BeginDisabledGroup(m_TextComponent == null || m_TextComponent.objectReferenceValue == null);

    // TEXT INPUT BOX
    EditorGUILayout.PropertyField(m_Text);

    // INPUT FIELD SETTINGS
    #region INPUT FIELD SETTINGS

    m_foldout.fontSettings = EditorGUILayout.Foldout(m_foldout.fontSettings, "Input Field Settings", true, TMP_UIStyleManager.boldFoldout);

    if (m_foldout.fontSettings)
    {
    EditorGUI.indentLevel++;
    EditorGUI.BeginChangeCheck();
    EditorGUILayout.PropertyField(m_GlobalFontAsset, new GUIContent("Font Asset", "Set the Font Asset for both Placeholder and Input Field text object."));
    if (EditorGUI.EndChangeCheck())
    {
    TMP_InputField inputField = target as TMP_InputField;
    inputField.SetGlobalFontAsset(m_GlobalFontAsset.objectReferenceValue as TMP_FontAsset);
    }


    EditorGUI.BeginChangeCheck();
    EditorGUILayout.PropertyField(m_GlobalPointSize, new GUIContent("Point Size", "Set the point size of both Placeholder and Input Field text object."));
    if (EditorGUI.EndChangeCheck())
    {
    TMP_InputField inputField = target as TMP_InputField;
    inputField.SetGlobalPointSize(m_GlobalPointSize.floatValue);
    }

    EditorGUI.BeginChangeCheck();
    EditorGUILayout.PropertyField(m_CharacterLimit);

    EditorGUILayout.Space();

    EditorGUILayout.PropertyField(m_ContentType);
    if (!m_ContentType.hasMultipleDifferentValues)
    {
    EditorGUI.indentLevel++;

    if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Standard ||
    m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Autocorrected ||
    m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom)
    {
    EditorGUI.BeginChangeCheck();
    EditorGUILayout.PropertyField(m_LineType);
    if (EditorGUI.EndChangeCheck())
    {
    if (text != null)
    {
    if (m_LineType.enumValueIndex == (int)TMP_InputField.LineType.SingleLine)
    text.enableWordWrapping = false;
    else
    {
    text.enableWordWrapping = true;
    }
    }
    }

    if (m_LineType.enumValueIndex != (int)TMP_InputField.LineType.SingleLine)
    {
    EditorGUILayout.PropertyField(m_LineLimit);
    }
    }

    if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom)
    {
    EditorGUILayout.PropertyField(m_InputType);
    EditorGUILayout.PropertyField(m_KeyboardType);
    EditorGUILayout.PropertyField(m_CharacterValidation);
    if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.Regex)
    {
    EditorGUILayout.PropertyField(m_RegexValue);
    }
    else if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.CustomValidator)
    {
    EditorGUILayout.PropertyField(m_InputValidator);
    }
    }

    EditorGUI.indentLevel--;
    }

    EditorGUILayout.Space();

    EditorGUILayout.PropertyField(m_Placeholder);
    EditorGUILayout.PropertyField(m_VerticalScrollbar);

    if (m_VerticalScrollbar.objectReferenceValue != null)
    EditorGUILayout.PropertyField(m_ScrollbarScrollSensitivity);

    EditorGUILayout.PropertyField(m_CaretBlinkRate);
    EditorGUILayout.PropertyField(m_CaretWidth);

    EditorGUILayout.PropertyField(m_CustomCaretColor);

    m_CustomColor.target = m_CustomCaretColor.boolValue;

    if (EditorGUILayout.BeginFadeGroup(m_CustomColor.faded))
    {
    EditorGUILayout.PropertyField(m_CaretColor);
    }
    EditorGUILayout.EndFadeGroup();

    EditorGUILayout.PropertyField(m_SelectionColor);

    EditorGUI.indentLevel--;
    }
    #endregion


    // CONTROL SETTINGS
    #region CONTROL SETTINGS
    m_foldout.extraSettings = EditorGUILayout.Foldout(m_foldout.extraSettings, "Control Settings", true, TMP_UIStyleManager.boldFoldout);

    if (m_foldout.extraSettings)
    {
    EditorGUI.indentLevel++;

    EditorGUILayout.PropertyField(m_ShouldActivateOnSelect, new GUIContent("Should Activate OnSelect"));
    EditorGUILayout.PropertyField(m_OnFocusSelectAll, new GUIContent("OnFocus - Select All", "Should all the text be selected when the Input Field is selected."));
    EditorGUILayout.PropertyField(m_ResetOnDeActivation, new GUIContent("Reset On DeActivation", "Should the Text and Caret position be reset when Input Field is DeActivated."));
    EditorGUILayout.PropertyField(m_RestoreOriginalTextOnEscape, new GUIContent("Restore On ESC Key", "Should the original text be restored when pressing ESC."));
    EditorGUILayout.PropertyField(m_HideMobileKeyboard, new GUIContent("Hide Soft Keyboard", "Controls the visibility of the mobile virtual keyboard."));
    EditorGUILayout.PropertyField(m_HideMobileInput, new GUIContent("Hide Mobile Input", "Controls the visibility of the editable text field above the mobile virtual keyboard."));
    EditorGUILayout.PropertyField(m_ReadOnly);
    EditorGUILayout.PropertyField(m_RichText);
    EditorGUILayout.PropertyField(m_RichTextEditingAllowed, new GUIContent("Allow Rich Text Editing"));

    EditorGUI.indentLevel--;
    }
    #endregion


    EditorGUILayout.Space();

    EditorGUILayout.PropertyField(m_OnValueChanged);
    EditorGUILayout.PropertyField(m_OnEndEdit);
    EditorGUILayout.PropertyField(m_OnSelect);
    EditorGUILayout.PropertyField(m_OnDeselect);
    EditorGUILayout.PropertyField(m_OnFocus);

    EditorGUI.EndDisabledGroup();

    serializedObject.ApplyModifiedProperties();
    }
    }
    }