#if UNITY_2019_4_OR_NEWER using System.IO; using System.Linq; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEditor.UIElements; using UnityEngine.UIElements; namespace YooAsset.Editor { internal class DebuggerAssetListViewer { private VisualTreeAsset _visualAsset; private TemplateContainer _root; private ListView _assetListView; private ListView _dependListView; private DebugReport _debugReport; /// /// 初始化页面 /// public void InitViewer() { // 加载布局文件 _visualAsset = EditorHelper.LoadWindowUXML(); if (_visualAsset == null) return; _root = _visualAsset.CloneTree(); _root.style.flexGrow = 1f; // 资源列表 _assetListView = _root.Q("TopListView"); _assetListView.makeItem = MakeAssetListViewItem; _assetListView.bindItem = BindAssetListViewItem; #if UNITY_2020_1_OR_NEWER _assetListView.onSelectionChange += AssetListView_onSelectionChange; #else _assetListView.onSelectionChanged += AssetListView_onSelectionChange; #endif // 依赖列表 _dependListView = _root.Q("BottomListView"); _dependListView.makeItem = MakeDependListViewItem; _dependListView.bindItem = BindDependListViewItem; } /// /// 清空页面 /// public void ClearView() { _debugReport = null; _assetListView.Clear(); _assetListView.ClearSelection(); _assetListView.itemsSource.Clear(); _assetListView.Rebuild(); } /// /// 填充页面数据 /// public void FillViewData(DebugReport debugReport, string searchKeyWord) { _debugReport = debugReport; _assetListView.Clear(); _assetListView.ClearSelection(); _assetListView.itemsSource = FilterViewItems(debugReport, searchKeyWord); _assetListView.Rebuild(); } private List FilterViewItems(DebugReport debugReport, string searchKeyWord) { var result = new List(debugReport.ProviderInfos.Count); foreach (var providerInfo in debugReport.ProviderInfos) { if (string.IsNullOrEmpty(searchKeyWord) == false) { if (providerInfo.AssetPath.Contains(searchKeyWord) == false) continue; } result.Add(providerInfo); } return result; } /// /// 挂接到父类页面上 /// public void AttachParent(VisualElement parent) { parent.Add(_root); } /// /// 从父类页面脱离开 /// public void DetachParent() { _root.RemoveFromHierarchy(); } // 资源列表相关 private VisualElement MakeAssetListViewItem() { VisualElement element = new VisualElement(); element.style.flexDirection = FlexDirection.Row; { var label = new Label(); label.name = "Label1"; label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; label.style.flexGrow = 1f; label.style.width = 280; element.Add(label); } { var label = new Label(); label.name = "Label2"; label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; label.style.width = 150; element.Add(label); } { var label = new Label(); label.name = "Label3"; label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; label.style.width = 150; element.Add(label); } { var label = new Label(); label.name = "Label4"; label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; label.style.width = 100; element.Add(label); } { var label = new Label(); label.name = "Label5"; label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; label.style.width = 120; element.Add(label); } return element; } private void BindAssetListViewItem(VisualElement element, int index) { var sourceData = _assetListView.itemsSource as List; var providerInfo = sourceData[index]; // Asset Path var label1 = element.Q