177 lines
6.9 KiB
C#
177 lines
6.9 KiB
C#
|
#if UNITY_EDITOR
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace ABI.CCK.Scripts.Editor
|
|||
|
{
|
|||
|
// Shared between all Custom Editors for CCK Components specifically
|
|||
|
public static class SharedComponentGUI
|
|||
|
{
|
|||
|
public static readonly GUIStyle s_BoldLabelStyle;
|
|||
|
public static readonly GUIStyle s_BoldFoldoutStyle;
|
|||
|
|
|||
|
static SharedComponentGUI()
|
|||
|
{
|
|||
|
// Foldout scope styles
|
|||
|
s_BoldLabelStyle = new GUIStyle(EditorStyles.label) { fontStyle = FontStyle.Bold };
|
|||
|
s_BoldFoldoutStyle = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold };
|
|||
|
}
|
|||
|
|
|||
|
public static void Separator()
|
|||
|
{
|
|||
|
GUILayout.Space(2);
|
|||
|
GUILayout.Box("", EditorStyles.helpBox, GUILayout.ExpandWidth(true), GUILayout.Height(2));
|
|||
|
GUILayout.Space(2);
|
|||
|
}
|
|||
|
|
|||
|
public static bool InnerFoldout(ref bool foldoutState, string label, GUIStyle style = null)
|
|||
|
{
|
|||
|
return foldoutState = EditorGUILayout.Foldout(foldoutState, label, true, style ?? EditorStyles.foldout);
|
|||
|
}
|
|||
|
|
|||
|
public static bool InnerFoldout(ref bool foldoutState, GUIContent label, GUIStyle style = null)
|
|||
|
{
|
|||
|
return foldoutState = EditorGUILayout.Foldout(foldoutState, label, true, style ?? EditorStyles.foldout);
|
|||
|
}
|
|||
|
|
|||
|
public class LabelScope : GUI.Scope
|
|||
|
{
|
|||
|
// Magic numbers
|
|||
|
private const float LabelHeight = 24.0f;
|
|||
|
private const float IndentX = 8.0f;
|
|||
|
private const float VerticalSpacingAdjust = -26.0f;
|
|||
|
|
|||
|
public LabelScope(string label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitLabelScope(new GUIContent(label), style ?? s_BoldLabelStyle);
|
|||
|
}
|
|||
|
|
|||
|
public LabelScope(GUIContent label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitLabelScope(label, style ?? s_BoldLabelStyle);
|
|||
|
}
|
|||
|
|
|||
|
private void InitLabelScope(GUIContent label, GUIStyle style)
|
|||
|
{
|
|||
|
// Label
|
|||
|
Rect labelRect = GUILayoutUtility.GetRect(1.0f, LabelHeight);
|
|||
|
EditorGUI.HelpBox(labelRect, "", MessageType.None);
|
|||
|
labelRect.x += IndentX;
|
|||
|
labelRect.width -= IndentX;
|
|||
|
EditorGUI.LabelField(labelRect, label, style);
|
|||
|
|
|||
|
// Content
|
|||
|
GUILayout.Space(VerticalSpacingAdjust);
|
|||
|
GUILayout.BeginVertical(EditorStyles.helpBox);
|
|||
|
GUILayout.Space(LabelHeight);
|
|||
|
}
|
|||
|
|
|||
|
protected override void CloseScope()
|
|||
|
{
|
|||
|
GUILayout.Space(3f);
|
|||
|
GUILayout.EndVertical();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class FoldoutScope : GUI.Scope
|
|||
|
{
|
|||
|
// Magic numbers
|
|||
|
private const float FoldoutHeight = 24.0f;
|
|||
|
private const float IndentX = 18.0f;
|
|||
|
private const float VerticalSpacingAdjust = -26.0f;
|
|||
|
|
|||
|
public FoldoutScope(ref bool foldoutState, string label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitFoldoutScope(ref foldoutState, new GUIContent(label), style ?? s_BoldFoldoutStyle);
|
|||
|
}
|
|||
|
|
|||
|
public FoldoutScope(ref bool foldoutState, GUIContent label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitFoldoutScope(ref foldoutState, label, style ?? s_BoldFoldoutStyle);
|
|||
|
}
|
|||
|
|
|||
|
private void InitFoldoutScope(ref bool foldoutState, GUIContent label, GUIStyle style)
|
|||
|
{
|
|||
|
// Foldout
|
|||
|
Rect foldoutRect = GUILayoutUtility.GetRect(1.0f, FoldoutHeight);
|
|||
|
EditorGUI.HelpBox(foldoutRect, "", MessageType.None);
|
|||
|
foldoutRect.x += IndentX;
|
|||
|
foldoutRect.width -= IndentX;
|
|||
|
foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, label, true, style);
|
|||
|
|
|||
|
// Content
|
|||
|
GUILayout.Space(VerticalSpacingAdjust);
|
|||
|
GUILayout.BeginVertical(EditorStyles.helpBox);
|
|||
|
GUILayout.Space(foldoutState ? FoldoutHeight : 21);
|
|||
|
}
|
|||
|
|
|||
|
protected override void CloseScope()
|
|||
|
{
|
|||
|
GUILayout.Space(3f);
|
|||
|
GUILayout.EndVertical();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class ToggleFoldoutScope : GUI.Scope
|
|||
|
{
|
|||
|
// Magic numbers 2
|
|||
|
private const float FoldoutHeight = 24.0f;
|
|||
|
private const float IndentX = 18.0f;
|
|||
|
private const float VerticalSpacingAdjust = -26.0f;
|
|||
|
private const float ToggleWidth = 16.0f;
|
|||
|
|
|||
|
public ToggleFoldoutScope(ref bool foldoutState, ref bool toggleState, string label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitToggleFoldoutScope(ref foldoutState, ref toggleState, new GUIContent(label), style ?? s_BoldFoldoutStyle);
|
|||
|
}
|
|||
|
|
|||
|
public ToggleFoldoutScope(ref bool foldoutState, ref bool toggleState, GUIContent label, GUIStyle style = null)
|
|||
|
{
|
|||
|
InitToggleFoldoutScope(ref foldoutState, ref toggleState, label, style ?? s_BoldFoldoutStyle);
|
|||
|
}
|
|||
|
|
|||
|
private void InitToggleFoldoutScope(ref bool foldoutState, ref bool toggleState, GUIContent label, GUIStyle style)
|
|||
|
{
|
|||
|
// Foldout
|
|||
|
Rect fullRect = GUILayoutUtility.GetRect(1.0f, FoldoutHeight);
|
|||
|
EditorGUI.HelpBox(fullRect, "", MessageType.None);
|
|||
|
|
|||
|
// Toggle
|
|||
|
Rect toggleRect = new Rect(fullRect.x + IndentX + 1f, fullRect.y + 1f, ToggleWidth, FoldoutHeight);
|
|||
|
toggleState = EditorGUI.Toggle(toggleRect, toggleState);
|
|||
|
|
|||
|
// Foldout
|
|||
|
Rect foldoutRect = new Rect(fullRect.x + IndentX, fullRect.y, fullRect.width - IndentX, FoldoutHeight);
|
|||
|
foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, " " + label, true, style);
|
|||
|
|
|||
|
// Content
|
|||
|
GUILayout.Space(VerticalSpacingAdjust);
|
|||
|
GUILayout.BeginVertical(EditorStyles.helpBox);
|
|||
|
GUILayout.Space(foldoutState ? FoldoutHeight : 21);
|
|||
|
}
|
|||
|
|
|||
|
protected override void CloseScope()
|
|||
|
{
|
|||
|
GUILayout.Space(3f);
|
|||
|
GUILayout.EndVertical();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class SetIndentLevelScope : GUI.Scope
|
|||
|
{
|
|||
|
private readonly int originalIndentLevel;
|
|||
|
|
|||
|
public SetIndentLevelScope(int indentLevel)
|
|||
|
{
|
|||
|
originalIndentLevel = EditorGUI.indentLevel;
|
|||
|
EditorGUI.indentLevel = indentLevel;
|
|||
|
}
|
|||
|
|
|||
|
protected override void CloseScope()
|
|||
|
{
|
|||
|
EditorGUI.indentLevel = originalIndentLevel;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|