Car/Assets/StompyRobot/SRF/Scripts/UI/Editor/StyleComponentEditor.cs

106 lines
3.0 KiB
C#

using System.Linq;
using UnityEditor;
using UnityEngine;
namespace SRF.UI.Editor
{
[CustomEditor(typeof (StyleComponent))]
[CanEditMultipleObjects]
public class StyleComponentEditor : UnityEditor.Editor
{
private SerializedProperty _styleKeyProperty;
protected void OnEnable()
{
_styleKeyProperty = serializedObject.FindProperty("_styleKey");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
var styleComponent = serializedObject.targetObject as StyleComponent;
if (styleComponent == null)
{
Debug.LogWarning("Target is null, expected StyleComponent");
return;
}
var styleRoot = styleComponent.GetComponentInParent<StyleRoot>();
if (styleRoot == null)
{
EditorGUILayout.HelpBox("There must be a StyleRoot component above this object in the hierarchy.",
MessageType.Error,
true);
return;
}
var styleSheet = styleRoot.StyleSheet;
if (styleSheet == null)
{
EditorGUILayout.HelpBox("Style Root has no stylesheet set.", MessageType.Warning);
EditorGUILayout.Popup("Key", 0,
new[] {string.IsNullOrEmpty(styleComponent.StyleKey) ? "--" : styleComponent.StyleKey});
return;
}
var options = styleRoot.StyleSheet.GetStyleKeys(true).ToList();
var index = _styleKeyProperty.hasMultipleDifferentValues
? 0
: options.IndexOf(_styleKeyProperty.stringValue) + 1;
options.Insert(0, "--");
EditorGUILayout.Separator();
GUI.enabled = _styleKeyProperty.editable;
var newIndex = EditorGUILayout.Popup("Key", index, options.ToArray());
GUI.enabled = true;
if (newIndex != index)
{
_styleKeyProperty.stringValue = "";
_styleKeyProperty.stringValue = newIndex == 0 ? "" : options[newIndex];
}
if (serializedObject.ApplyModifiedProperties())
{
foreach (var o in serializedObject.targetObjects)
{
var c = o as StyleComponent;
c.Refresh(true);
}
_styleKeyProperty.serializedObject.Update();
}
EditorGUILayout.Separator();
GUILayout.BeginHorizontal();
if (GUILayout.Button("Open StyleSheet"))
{
Selection.activeObject = styleRoot.StyleSheet;
}
EditorGUILayout.Separator();
if (GUILayout.Button("Select StyleRoot"))
{
Selection.activeGameObject = styleRoot.gameObject;
}
GUILayout.EndHorizontal();
EditorGUILayout.Separator();
}
}
}