2022-08-01 03:47:37 +00:00
|
|
|
using UnityEditor;
|
|
|
|
using UnityEditor.IMGUI.Controls;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.Profiling;
|
|
|
|
|
|
|
|
namespace WeChatWASM.Analysis
|
|
|
|
{
|
|
|
|
internal class SerializedPropertyTable
|
|
|
|
{
|
|
|
|
private readonly float m_DragHeight = 20f;
|
|
|
|
|
|
|
|
private readonly float m_DragWidth = 32f;
|
|
|
|
|
|
|
|
private readonly float m_FilterHeight = 20f;
|
|
|
|
|
|
|
|
private float m_ColumnHeaderHeight;
|
|
|
|
|
|
|
|
private SerializedPropertyDataStore m_DataStore;
|
|
|
|
|
|
|
|
private readonly SerializedPropertyDataStore.GatherDelegate m_GatherDelegate;
|
|
|
|
|
|
|
|
private readonly HeaderDelegate m_HeaderDelegate;
|
|
|
|
|
|
|
|
private bool m_Initialized;
|
|
|
|
|
|
|
|
private MultiColumnHeaderState m_MultiColumnHeaderState;
|
|
|
|
|
|
|
|
private readonly string m_SerializationUID;
|
|
|
|
|
|
|
|
//private float m_TableHeight = 200f;
|
|
|
|
|
|
|
|
private SerializedPropertyTreeView m_TreeView;
|
|
|
|
|
|
|
|
private TreeViewState m_TreeViewState;
|
|
|
|
|
|
|
|
public SerializedPropertyTable(string serializationUID, SerializedPropertyDataStore.GatherDelegate gatherDelegate, HeaderDelegate headerDelegate)
|
|
|
|
{
|
|
|
|
//dragHandleEnabled = true;
|
|
|
|
m_SerializationUID = serializationUID;
|
|
|
|
m_GatherDelegate = gatherDelegate;
|
|
|
|
m_HeaderDelegate = headerDelegate;
|
|
|
|
//OnEnable();
|
|
|
|
}
|
|
|
|
|
|
|
|
//public bool dragHandleEnabled { get; set; }
|
|
|
|
|
|
|
|
private void InitIfNeeded()
|
|
|
|
{
|
|
|
|
if (!m_Initialized)
|
|
|
|
{
|
|
|
|
if (m_TreeViewState == null)
|
|
|
|
m_TreeViewState = new TreeViewState();
|
|
|
|
if (m_MultiColumnHeaderState == null)
|
|
|
|
{
|
|
|
|
string[] propNames;
|
|
|
|
m_MultiColumnHeaderState = new MultiColumnHeaderState(m_HeaderDelegate(out propNames));
|
|
|
|
m_DataStore = new SerializedPropertyDataStore(propNames, m_GatherDelegate);
|
|
|
|
}
|
|
|
|
var multiColumnHeader = new MultiColumnHeader(m_MultiColumnHeaderState);
|
|
|
|
m_ColumnHeaderHeight = multiColumnHeader.height;
|
|
|
|
m_TreeView = new SerializedPropertyTreeView(m_TreeViewState, multiColumnHeader, m_DataStore);
|
|
|
|
m_TreeView.DeserializeState(m_SerializationUID);
|
|
|
|
m_TreeView.Reload();
|
|
|
|
m_Initialized = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private float GetMinHeight()
|
|
|
|
{
|
|
|
|
var singleLineHeight = EditorGUIUtility.singleLineHeight;
|
|
|
|
var num = m_FilterHeight + m_ColumnHeaderHeight + singleLineHeight + m_DragHeight;
|
|
|
|
return num + singleLineHeight * 3f;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnInspectorUpdate()
|
|
|
|
{
|
|
|
|
if (m_DataStore != null && m_DataStore.Repopulate() && m_TreeView != null)
|
|
|
|
m_TreeView.FullReload();
|
|
|
|
else if (m_TreeView != null && m_TreeView.Update())
|
|
|
|
m_TreeView.Repaint();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnHierarchyChange()
|
|
|
|
{
|
|
|
|
if (m_DataStore != null && m_DataStore.Repopulate() && m_TreeView != null)
|
|
|
|
m_TreeView.FullReload();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnSelectionChange()
|
|
|
|
{
|
|
|
|
OnSelectionChange(Selection.instanceIDs);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnSelectionChange(int[] instanceIDs)
|
|
|
|
{
|
|
|
|
if (m_TreeView != null)
|
|
|
|
m_TreeView.SetSelection(instanceIDs);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnGUI()
|
|
|
|
{
|
|
|
|
Profiler.BeginSample("SerializedPropertyTable.OnGUI");
|
|
|
|
InitIfNeeded();
|
|
|
|
var rect = GUILayoutUtility.GetRect(0f, Screen.width, 0f, Screen.height);
|
|
|
|
if (Event.current.type != EventType.Layout)
|
|
|
|
{
|
|
|
|
rect.x += m_DragWidth;
|
|
|
|
rect.width -= m_DragWidth * 2;
|
|
|
|
|
|
|
|
rect.y += m_DragHeight;
|
|
|
|
|
|
|
|
var r = rect;
|
|
|
|
rect.y += m_FilterHeight;
|
|
|
|
rect.height = rect.height - m_FilterHeight - m_DragHeight * 2;
|
|
|
|
|
|
|
|
var rect2 = rect;
|
|
|
|
Profiler.BeginSample("TreeView.OnGUI");
|
|
|
|
m_TreeView.OnGUI(rect2);
|
|
|
|
Profiler.EndSample();
|
|
|
|
|
|
|
|
m_TreeView.OnFilterGUI(r);
|
|
|
|
if (m_TreeView.IsFilteredDirty())
|
|
|
|
m_TreeView.Reload();
|
|
|
|
Profiler.EndSample();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnDisable()
|
|
|
|
{
|
|
|
|
if (m_TreeView != null)
|
|
|
|
m_TreeView.SerializeState(m_SerializationUID);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static class Styles
|
|
|
|
{
|
|
|
|
public static readonly GUIStyle DragHandle = "RL DragHandle";
|
|
|
|
}
|
|
|
|
|
|
|
|
internal delegate SerializedPropertyTreeView.Column[] HeaderDelegate(out string[] propNames);
|
|
|
|
}
|
2022-07-27 13:57:29 +00:00
|
|
|
}
|