12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #if UNITY_EDITOR
- using UnityEngine;
- using UnityEditor;
- using System;
- namespace O3DWB
- {
- [Serializable]
- public abstract class GUIRenderableContent
- {
- #region Protected Variables
- [SerializeField]
- protected bool _isVisible = true;
- [SerializeField]
- protected bool _toggleVisibilityBeforeRender = false;
- [SerializeField]
- protected string _visibilityToggleLabel = "";
- [SerializeField]
- protected int _visibilityToggleIndent = 0;
- [SerializeField]
- protected bool _indentContent = false;
- [SerializeField]
- protected bool _surroundWithBox = false;
- #endregion
- #region Public Properties
- public bool IsVisible { get { return _isVisible; } set { _isVisible = value; } }
- public bool ToggleVisibilityBeforeRender { get { return _toggleVisibilityBeforeRender; } set { _toggleVisibilityBeforeRender = value; } }
- public string VisibilityToggleLabel { get { return _visibilityToggleLabel; } set { _visibilityToggleLabel = value; } }
- public int VisibilityToggleIndent { get { return _visibilityToggleIndent; } set { _visibilityToggleIndent = value; } }
- public bool IndentContent { get { return _indentContent; } set { _indentContent = value; } }
- public bool SurroundWithBox { get { return _surroundWithBox; } set { _surroundWithBox = value; } }
- #endregion
- #region Public Methods
- public void Render()
- {
- EditorGUILayout.BeginVertical();
- if (_toggleVisibilityBeforeRender) ToggleVisibilityAndRender();
- else if(IsVisible) RenderGUIContent();
- EditorGUILayout.EndVertical();
- }
- #endregion
- #region Protected Abstract Methods
- protected abstract void RenderContent();
- #endregion
- #region Private Methods
- private void ToggleVisibilityAndRender()
- {
- ToggleVisibility();
- if (IsVisible) RenderGUIContent();
- }
- private void ToggleVisibility()
- {
- EditorGUI.indentLevel += _visibilityToggleIndent;
- bool newBool = EditorGUILayout.Foldout(IsVisible, _visibilityToggleLabel);
- EditorGUI.indentLevel -= _visibilityToggleIndent;
- if (newBool != IsVisible) IsVisible = newBool;
- }
- private void RenderGUIContent()
- {
- if (_indentContent) IndentAndRender();
- else RenderNoIndent();
- }
- private void IndentAndRender()
- {
- int indentAmount = _toggleVisibilityBeforeRender ? _visibilityToggleIndent + 1 : 1;
- EditorGUI.indentLevel += indentAmount;
- if (_surroundWithBox) SurroundWithBoxAndRender();
- else RenderContent();
- EditorGUI.indentLevel -= indentAmount;
- }
- private void RenderNoIndent()
- {
- if (_surroundWithBox) SurroundWithBoxAndRender();
- else RenderContent();
- }
- private void SurroundWithBoxAndRender()
- {
- EditorGUILayoutEx.BeginVerticalBox();
- RenderContent();
- EditorGUILayoutEx.EndVerticalBox();
- }
- #endregion
- }
- }
- #endif
|