78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
|
#if UNITY_EDITOR
|
|||
|
#if UNITY_2019_1_OR_NEWER
|
|||
|
#define UI_USE_FOLDOUT_HEADER_2019
|
|||
|
#endif
|
|||
|
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace VLB
|
|||
|
{
|
|||
|
public static class FoldableHeader
|
|||
|
{
|
|||
|
public static void OnEnable()
|
|||
|
{
|
|||
|
ms_CurrentFoldableHeader = null;
|
|||
|
}
|
|||
|
|
|||
|
public static bool Begin(UnityEngine.Object self, string label)
|
|||
|
{
|
|||
|
return Begin(self, new GUIContent(label));
|
|||
|
}
|
|||
|
|
|||
|
public static bool Begin(UnityEngine.Object self, GUIContent label)
|
|||
|
{
|
|||
|
var uniqueString = label.text;
|
|||
|
if(self) uniqueString = self.ToString() + uniqueString;
|
|||
|
|
|||
|
if (ms_StyleHeaderFoldable == null)
|
|||
|
{
|
|||
|
ms_StyleHeaderFoldable = new GUIStyle(EditorStyles.foldout);
|
|||
|
ms_StyleHeaderFoldable.fontStyle = FontStyle.Bold;
|
|||
|
}
|
|||
|
|
|||
|
ms_CurrentFoldableHeader = uniqueString;
|
|||
|
|
|||
|
bool folded = IsFolded(uniqueString);
|
|||
|
|
|||
|
|
|||
|
#if UI_USE_FOLDOUT_HEADER_2019
|
|||
|
folded = !EditorGUILayout.BeginFoldoutHeaderGroup(!folded, label);
|
|||
|
#else
|
|||
|
folded = !EditorGUILayout.Foldout(!folded, label, toggleOnLabelClick: true, style: ms_StyleHeaderFoldable);
|
|||
|
#endif
|
|||
|
|
|||
|
if (folded) ms_FoldedHeaders.Add(uniqueString);
|
|||
|
else ms_FoldedHeaders.Remove(uniqueString);
|
|||
|
|
|||
|
return !folded;
|
|||
|
}
|
|||
|
|
|||
|
public static void End()
|
|||
|
{
|
|||
|
Debug.Assert(ms_CurrentFoldableHeader != null, "Trying to call FoldableHeader.End() but there is no header opened");
|
|||
|
bool isFolded = IsFolded(ms_CurrentFoldableHeader);
|
|||
|
ms_CurrentFoldableHeader = null;
|
|||
|
|
|||
|
#if UI_USE_FOLDOUT_HEADER_2019
|
|||
|
EditorGUILayout.EndFoldoutHeaderGroup();
|
|||
|
#if UNITY_2019_3_OR_NEWER
|
|||
|
if(!isFolded) EditorGUILayout.Separator();
|
|||
|
#endif
|
|||
|
#else
|
|||
|
EditorExtensions.DrawLineSeparator();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
static bool IsFolded(string uniqueString) { return ms_FoldedHeaders.Contains(uniqueString); }
|
|||
|
|
|||
|
static string ms_CurrentFoldableHeader = null;
|
|||
|
static HashSet<String> ms_FoldedHeaders = new HashSet<String>();
|
|||
|
static GUIStyle ms_StyleHeaderFoldable = null;
|
|||
|
}
|
|||
|
}
|
|||
|
#endif // UNITY_EDITOR
|
|||
|
|