CTT/Unity/Assets/Editor/ComponentViewEditor/Entity/EditorLayout.cs

199 lines
7.1 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace ET
{
public static class Styles
{
private static GUIStyle _sectionHeader;
private static GUIStyle _sectionContent;
public static GUIStyle sectionHeader
{
get
{
if (Styles._sectionHeader == null)
Styles._sectionHeader = new GUIStyle((GUIStyle) "OL Title");
return Styles._sectionHeader;
}
}
public static GUIStyle sectionContent
{
get
{
if (Styles._sectionContent == null)
{
Styles._sectionContent = new GUIStyle((GUIStyle) "OL Box");
Styles._sectionContent.stretchHeight = false;
}
return Styles._sectionContent;
}
}
}
public static class EditorLayout
{
private const int DEFAULT_FOLDOUT_MARGIN = 11;
public static T GetWindow<T>(string title, Vector2 size) where T : EditorWindow
{
T window = EditorWindow.GetWindow<T>(true, title);
window.minSize = window.maxSize = size;
return window;
}
public static Texture2D LoadTexture(string label)
{
string[] assets = AssetDatabase.FindAssets(label);
if (assets.Length != 0)
{
string guid = assets[0];
if (guid != null)
return AssetDatabase.LoadAssetAtPath<Texture2D>(AssetDatabase.GUIDToAssetPath(guid));
}
return (Texture2D) null;
}
public static Rect DrawTexture(Texture2D texture)
{
if (!((UnityEngine.Object) texture != (UnityEngine.Object) null))
return new Rect();
Rect aspectRect = GUILayoutUtility.GetAspectRect((float) ((double) texture.width / (double) texture.height),
new GUILayoutOption[1] { GUILayout.ExpandWidth(true) });
GUI.DrawTexture(aspectRect, (Texture) texture, ScaleMode.ScaleAndCrop);
return aspectRect;
}
public static bool ObjectFieldButton(string label, string buttonText)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(label, new GUILayoutOption[1] { GUILayout.Width(146f) });
if (buttonText.Length > 24)
buttonText = "..." + buttonText.Substring(buttonText.Length - 24);
int num = GUILayout.Button(buttonText, EditorStyles.objectField, new GUILayoutOption[0])? 1 : 0;
EditorGUILayout.EndHorizontal();
return num != 0;
}
public static string ObjectFieldOpenFolderPanel(string label, string buttonText, string defaultPath)
{
if (!EditorLayout.ObjectFieldButton(label, buttonText))
return (string) null;
string str = defaultPath ?? "Assets/";
if (!Directory.Exists(str))
str = "Assets/";
return EditorUtility.OpenFolderPanel(label, str, string.Empty).Replace(Directory.GetCurrentDirectory() + "/", string.Empty);
}
public static string ObjectFieldOpenFilePanel(string label, string buttonText, string defaultPath)
{
if (!EditorLayout.ObjectFieldButton(label, buttonText))
return (string) null;
string str = defaultPath ?? "Assets/";
if (!File.Exists(str))
str = "Assets/";
return EditorUtility.OpenFilePanel(label, str, "dll").Replace(Directory.GetCurrentDirectory() + "/", string.Empty);
}
public static bool MiniButton(string c)
{
return EditorLayout.miniButton(c, EditorStyles.miniButton);
}
public static bool MiniButtonLeft(string c)
{
return EditorLayout.miniButton(c, EditorStyles.miniButtonLeft);
}
public static bool MiniButtonMid(string c)
{
return EditorLayout.miniButton(c, EditorStyles.miniButtonMid);
}
public static bool MiniButtonRight(string c)
{
return EditorLayout.miniButton(c, EditorStyles.miniButtonRight);
}
private static bool miniButton(string c, GUIStyle style)
{
GUILayoutOption[] guiLayoutOptionArray1;
if (c.Length != 1)
guiLayoutOptionArray1 = new GUILayoutOption[0];
else
guiLayoutOptionArray1 = new GUILayoutOption[1] { GUILayout.Width(19f) };
GUILayoutOption[] guiLayoutOptionArray2 = guiLayoutOptionArray1;
int num = GUILayout.Button(c, style, guiLayoutOptionArray2)? 1 : 0;
if (num == 0)
return num != 0;
GUI.FocusControl((string) null);
return num != 0;
}
public static bool Foldout(bool foldout, string content, int leftMargin = 11)
{
return EditorLayout.Foldout(foldout, content, EditorStyles.foldout, leftMargin);
}
public static bool Foldout(bool foldout, string content, GUIStyle style, int leftMargin = 11)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Space((float) leftMargin);
foldout = EditorGUILayout.Foldout(foldout, content, style);
EditorGUILayout.EndHorizontal();
return foldout;
}
public static string SearchTextField(string searchString)
{
bool changed = GUI.changed;
GUILayout.BeginHorizontal();
searchString = GUILayout.TextField(searchString, GUI.skin.FindStyle("ToolbarSeachTextField"), new GUILayoutOption[0]);
if (GUILayout.Button(string.Empty, GUI.skin.FindStyle("ToolbarSeachCancelButton"), new GUILayoutOption[0]))
searchString = string.Empty;
GUILayout.EndHorizontal();
GUI.changed = changed;
return searchString;
}
public static bool MatchesSearchString(string str, string search)
{
string[] strArray = search.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (strArray.Length != 0)
return ((IEnumerable<string>) strArray).Any<string>(new Func<string, bool>(str.Contains));
return true;
}
public static bool DrawSectionHeaderToggle(string header, bool value)
{
return GUILayout.Toggle(value, header, Styles.sectionHeader, new GUILayoutOption[0]);
}
public static void BeginSectionContent()
{
EditorGUILayout.BeginVertical(Styles.sectionContent, new GUILayoutOption[0]);
}
public static void EndSectionContent()
{
EditorGUILayout.EndVertical();
}
public static Rect BeginVerticalBox()
{
return EditorGUILayout.BeginVertical(GUI.skin.box, new GUILayoutOption[0]);
}
public static void EndVerticalBox()
{
EditorGUILayout.EndVertical();
}
}
}