192 lines
6.0 KiB
C#
192 lines
6.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Guru
|
|
{
|
|
public static class EasyGUILayout
|
|
{
|
|
private const string K_BOX_STYPE = "Box";
|
|
public static GUIStyle BoxStyle => new GUIStyle(K_BOX_STYPE);
|
|
|
|
private static ulong _genId = ulong.MinValue;
|
|
private static ulong GenId
|
|
{
|
|
get
|
|
{
|
|
if (_genId == ulong.MaxValue) _genId = ulong.MinValue;
|
|
_genId++;
|
|
return _genId;
|
|
}
|
|
}
|
|
|
|
public static void Label(string value, float width = 0, int fontSize = 0, FontStyle fontStyle = FontStyle.Normal, TextAnchor anchor = TextAnchor.MiddleLeft, params GUILayoutOption[] options)
|
|
{
|
|
GUILayoutOption w = null;
|
|
if (width > 0)
|
|
{
|
|
w = GUILayout.Width(width);
|
|
}
|
|
|
|
GUIStyle s = null;
|
|
if (fontSize > 0)
|
|
{
|
|
s = new GUIStyle("Label");
|
|
s.fontSize = fontSize;
|
|
s.alignment = anchor;
|
|
s.fontStyle = fontStyle;
|
|
}
|
|
|
|
List<GUILayoutOption> opts = new List<GUILayoutOption>();
|
|
if (w != null) opts.Add(w);
|
|
if (options != null && options.Length > 0) opts.AddRange(options);
|
|
|
|
if (s == null)
|
|
{
|
|
GUILayout.Label(value, opts.ToArray());
|
|
return;
|
|
}
|
|
|
|
GUILayout.Label(value, s, opts.ToArray());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 水平Box布局
|
|
/// </summary>
|
|
/// <param name="content"></param>
|
|
public static void HBox(Action content)
|
|
{
|
|
GUILayout.BeginHorizontal(BoxStyle);
|
|
content?.Invoke();
|
|
GUILayout.EndHorizontal();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 水平Box布局
|
|
/// </summary>
|
|
/// <param name="content"></param>
|
|
public static void VBox(Action content)
|
|
{
|
|
GUILayout.BeginVertical(BoxStyle);
|
|
content?.Invoke();
|
|
GUILayout.EndVertical();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// BoxLineItem 风格图框
|
|
/// </summary>
|
|
/// <param name="label"></param>
|
|
/// <param name="contents"></param>
|
|
/// <param name="width"></param>
|
|
/// <param name="fontSize"></param>
|
|
public static void BoxLineItem(string label, float width = 60, int fontSize = 0, params Action[] contents)
|
|
{
|
|
HBox(
|
|
() =>
|
|
{
|
|
Label(label, width, fontSize);
|
|
if (contents != null && contents.Length > 0)
|
|
{
|
|
for (int i = 0; i < contents.Length; i++)
|
|
{
|
|
contents[i]?.Invoke();
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Text 文本框
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <param name="onValueChanged"></param>
|
|
public static string Text(string value, Action<string> onValueChanged = null, params GUILayoutOption[] options)
|
|
{
|
|
return Text(value, "", null, onValueChanged, options);;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Text 文本框
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <param name="onValueChanged"></param>
|
|
public static string Text(string value, string label, Action<string> onValueChanged = null, params GUILayoutOption[] options)
|
|
{
|
|
return Text(value, label, null, onValueChanged, options);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Text 文本框
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <param name="onValueChanged"></param>
|
|
public static string Text(string value, GUIStyle style, Action<string> onValueChanged = null, params GUILayoutOption[] options)
|
|
{
|
|
return Text(value, "", style, onValueChanged, options);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Text 文本框
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <param name="onValueChanged"></param>
|
|
public static string Text(string text , string label, GUIStyle style, Action<string> onValueChanged = null, params GUILayoutOption[] options)
|
|
{
|
|
string _cname = label;
|
|
if (string.IsNullOrEmpty(_cname)) _cname = $"lab_{GenId}";
|
|
GUI.SetNextControlName(_cname);
|
|
|
|
string newValue = "";
|
|
if (string.IsNullOrEmpty(label) && style == null)
|
|
{
|
|
newValue = EditorGUILayout.TextField(text, options);
|
|
}
|
|
else if (string.IsNullOrEmpty(label))
|
|
{
|
|
newValue = EditorGUILayout.TextField(text, style, options);
|
|
}
|
|
else if (style == null)
|
|
{
|
|
newValue = EditorGUILayout.TextField(label, text, options);
|
|
}
|
|
else
|
|
{
|
|
newValue = EditorGUILayout.TextField(label, text, style, options);
|
|
}
|
|
|
|
if ( newValue != text )
|
|
// && GUI.GetNameOfFocusedControl() != _cname)
|
|
{
|
|
if (null != onValueChanged)
|
|
{
|
|
onValueChanged?.Invoke(newValue);
|
|
}
|
|
}
|
|
return newValue;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Text 文本框
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <param name="onValueChanged"></param>
|
|
public static bool Toggle(bool value, Action<bool> onValueChanged = null)
|
|
{
|
|
bool newValue = GUILayout.Toggle(value, "");
|
|
if (newValue != value)
|
|
{
|
|
if (null != onValueChanged)
|
|
{
|
|
onValueChanged?.Invoke(newValue);
|
|
}
|
|
}
|
|
return newValue;
|
|
}
|
|
|
|
}
|
|
} |