cvr-props/Assets/ABI.CCK/Scripts/Editor/CCK_CVRDescriptionEditor.cs

102 lines
No EOL
3.4 KiB
C#
Executable file

using ABI.CCK.Components;
using UnityEditor;
using UnityEngine;
namespace ABI.CCK.Scripts.Editor
{
[CustomEditor(typeof(CVRDescription))]
public class CCK_CVRDescriptionEditor : UnityEditor.Editor
{
private CVRDescription _description;
#region Unity Events
private void OnEnable()
{
if (target == null) return;
_description = (CVRDescription)target;
}
public override void OnInspectorGUI()
{
if (_description == null)
return;
EditorGUI.BeginChangeCheck();
if (_description.locked)
DrawLockedDescription();
else
DrawEditableDescription();
if (EditorGUI.EndChangeCheck())
EditorUtility.SetDirty(_description);
}
#endregion
#region GUI Drawing
private void DrawLockedDescription()
{
GUIStyle helpBoxStyle = new GUIStyle(EditorStyles.helpBox)
{
padding = new RectOffset(10, 10, 10, 10)
};
GUIStyle descriptionStyle = new GUIStyle(EditorStyles.label)
{
richText = true,
wordWrap = true
};
EditorGUILayout.BeginVertical(helpBoxStyle);
EditorGUILayout.BeginHorizontal();
GUIContent iconContent = GUIContent.none;
switch (_description.type)
{
case 1: // Info
iconContent = EditorGUIUtility.IconContent("console.infoicon");
break;
case 2: // Warning
iconContent = EditorGUIUtility.IconContent("console.warnicon");
break;
case 3: // Error
iconContent = EditorGUIUtility.IconContent("console.erroricon");
break;
}
if (iconContent != GUIContent.none)
{
GUILayout.Label(iconContent, GUILayout.Width(40), GUILayout.Height(40));
GUILayout.Space(10);
}
using (new EditorGUILayout.ScrollViewScope(Vector2.zero, GUILayout.ExpandWidth(true)))
EditorGUILayout.LabelField(_description.description, descriptionStyle);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
if (!string.IsNullOrEmpty(_description.url) && GUILayout.Button("Read more about this topic"))
Application.OpenURL(_description.url);
}
private void DrawEditableDescription()
{
EditorGUILayout.LabelField("Description:", new GUIStyle(EditorStyles.label));
_description.description = EditorGUILayout.TextArea(_description.description,
new GUIStyle(EditorStyles.textArea) { richText = true },
GUILayout.Height(100));
_description.url = EditorGUILayout.TextField("Documentation Url", _description.url);
_description.type = EditorGUILayout.Popup("Icon Type", _description.type, new[] { "None", "Info", "Warning", "Error" });
if (GUILayout.Button("Lock info"))
_description.locked = true;
}
#endregion
}
}