2022-01-12 10:39:15 +03:00
using System.Collections.Generic ;
2022-01-12 10:06:03 +03:00
using UnityEngine ;
using UnityEngine.UI ;
namespace UnityEditor.UI
{
[CustomEditor(typeof(Slider), true)]
[CanEditMultipleObjects]
/// <summary>
/// Custom Editor for the Slider Component.
/// Extend this class to write a custom editor for a component derived from Slider.
/// </summary>
public class SliderEditor : SelectableEditor
{
SerializedProperty m_Direction ;
SerializedProperty m_FillRect ;
SerializedProperty m_HandleRect ;
SerializedProperty m_MinValue ;
SerializedProperty m_MaxValue ;
SerializedProperty m_WholeNumbers ;
SerializedProperty m_Value ;
SerializedProperty m_OnValueChanged ;
protected override void OnEnable ( )
{
base . OnEnable ( ) ;
m_FillRect = serializedObject . FindProperty ( "m_FillRect" ) ;
m_HandleRect = serializedObject . FindProperty ( "m_HandleRect" ) ;
m_Direction = serializedObject . FindProperty ( "m_Direction" ) ;
m_MinValue = serializedObject . FindProperty ( "m_MinValue" ) ;
m_MaxValue = serializedObject . FindProperty ( "m_MaxValue" ) ;
m_WholeNumbers = serializedObject . FindProperty ( "m_WholeNumbers" ) ;
m_Value = serializedObject . FindProperty ( "m_Value" ) ;
m_OnValueChanged = serializedObject . FindProperty ( "m_OnValueChanged" ) ;
}
public override void OnInspectorGUI ( )
{
base . OnInspectorGUI ( ) ;
EditorGUILayout . Space ( ) ;
serializedObject . Update ( ) ;
EditorGUILayout . PropertyField ( m_FillRect ) ;
EditorGUILayout . PropertyField ( m_HandleRect ) ;
if ( m_FillRect . objectReferenceValue ! = null | | m_HandleRect . objectReferenceValue ! = null )
{
EditorGUI . BeginChangeCheck ( ) ;
EditorGUILayout . PropertyField ( m_Direction ) ;
if ( EditorGUI . EndChangeCheck ( ) )
{
Slider . Direction direction = ( Slider . Direction ) m_Direction . enumValueIndex ;
foreach ( var obj in serializedObject . targetObjects )
{
Slider slider = obj as Slider ;
slider . SetDirection ( direction , true ) ;
}
}
EditorGUI . BeginChangeCheck ( ) ;
float newMin = EditorGUILayout . FloatField ( "Min Value" , m_MinValue . floatValue ) ;
if ( EditorGUI . EndChangeCheck ( ) & & newMin < = m_MaxValue . floatValue )
{
m_MinValue . floatValue = newMin ;
}
EditorGUI . BeginChangeCheck ( ) ;
float newMax = EditorGUILayout . FloatField ( "Max Value" , m_MaxValue . floatValue ) ;
if ( EditorGUI . EndChangeCheck ( ) & & newMax > = m_MinValue . floatValue )
{
m_MaxValue . floatValue = newMax ;
}
EditorGUILayout . PropertyField ( m_WholeNumbers ) ;
EditorGUILayout . Slider ( m_Value , m_MinValue . floatValue , m_MaxValue . floatValue ) ;
bool warning = false ;
foreach ( var obj in serializedObject . targetObjects )
{
Slider slider = obj as Slider ;
Slider . Direction dir = slider . direction ;
if ( dir = = Slider . Direction . LeftToRight | | dir = = Slider . Direction . RightToLeft )
warning = ( slider . navigation . mode ! = Navigation . Mode . Automatic & & ( slider . FindSelectableOnLeft ( ) ! = null | | slider . FindSelectableOnRight ( ) ! = null ) ) ;
else
warning = ( slider . navigation . mode ! = Navigation . Mode . Automatic & & ( slider . FindSelectableOnDown ( ) ! = null | | slider . FindSelectableOnUp ( ) ! = null ) ) ;
}
if ( warning )
EditorGUILayout . HelpBox ( "The selected slider direction conflicts with navigation. Not all navigation options may work." , MessageType . Warning ) ;
// Draw the event notification options
EditorGUILayout . Space ( ) ;
EditorGUILayout . PropertyField ( m_OnValueChanged ) ;
}
else
{
EditorGUILayout . HelpBox ( "Specify a RectTransform for the slider fill or the slider handle or both. Each must have a parent RectTransform that it can slide within." , MessageType . Info ) ;
}
serializedObject . ApplyModifiedProperties ( ) ;
}
}
}