| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | using UnityEditor;using UnityEngine;using System.Collections.Generic;using UnityEditor.IMGUI.Controls;namespace AssetBundleBrowser{    internal class BundleDetailItem : TreeViewItem    {        internal BundleDetailItem(int id, int depth, string displayName, MessageType type) : base(id, depth, displayName)        {            MessageLevel = type;        }        internal MessageType MessageLevel        { get; set; }    }    internal class BundleDetailList : TreeView    {        HashSet<AssetBundleModel.BundleDataInfo> m_Selecteditems;        Rect m_TotalRect;        const float k_DoubleIndent = 32f;        const string k_SizeHeader = "Size: ";        const string k_DependencyHeader = "Dependent On:";        const string k_DependencyEmpty = k_DependencyHeader + " - None";        const string k_MessageHeader = "Messages:";        const string k_MessageEmpty = k_MessageHeader + " - None";        internal BundleDetailList(TreeViewState state) : base(state)        {            m_Selecteditems = new HashSet<AssetBundleModel.BundleDataInfo>();            showBorder = true;        }        internal void Update()        {            bool dirty = false;            foreach (var bundle in m_Selecteditems)            {                dirty |= bundle.dirty;            }            if (dirty)            {                Reload();                ExpandAll();            }        }        protected override TreeViewItem BuildRoot()        {            var root = new TreeViewItem(-1, -1);            root.children = new List<TreeViewItem>();            if (m_Selecteditems != null)            {                foreach(var bundle in m_Selecteditems)                {                    root.AddChild(AppendBundleToTree(bundle));                }            }            return root;        }        protected override void RowGUI(RowGUIArgs args)        {            if ((args.item as BundleDetailItem) != null)            {                EditorGUI.HelpBox(                    new Rect(args.rowRect.x + k_DoubleIndent, args.rowRect.y, args.rowRect.width - k_DoubleIndent, args.rowRect.height),                     args.item.displayName,                    (args.item as BundleDetailItem).MessageLevel);            }            else            {                Color old = GUI.color;                if (args.item.depth == 1 &&                    (args.item.displayName == k_MessageEmpty || args.item.displayName == k_DependencyEmpty))                    GUI.color = AssetBundleModel.Model.k_LightGrey;                base.RowGUI(args);                GUI.color = old;            }        }        public override void OnGUI(Rect rect)        {            m_TotalRect = rect;            base.OnGUI(rect);        }        protected override float GetCustomRowHeight(int row, TreeViewItem item)        {            if( (item as BundleDetailItem) != null)            {                float height = DefaultStyles.backgroundEven.CalcHeight(new GUIContent(item.displayName), m_TotalRect.width);                return height + 3f;            }            return base.GetCustomRowHeight(row, item);        }        internal static TreeViewItem AppendBundleToTree(AssetBundleModel.BundleDataInfo bundle)        {            var itemName = bundle.m_Name.fullNativeName;            var bunRoot = new TreeViewItem(itemName.GetHashCode(), 0, itemName);            var str = itemName + k_SizeHeader;            var sz = new TreeViewItem(str.GetHashCode(), 1, k_SizeHeader + bundle.TotalSize());            str = itemName + k_DependencyHeader;            var dependency = new TreeViewItem(str.GetHashCode(), 1, k_DependencyEmpty);            var depList = bundle.GetBundleDependencies();            if(depList.Count > 0)            {                dependency.displayName = k_DependencyHeader;                foreach (var dep in bundle.GetBundleDependencies())                {                    str = itemName + dep;                    dependency.AddChild(new TreeViewItem(str.GetHashCode(), 2, dep));                }            }            str = itemName + k_MessageHeader;            var msg = new TreeViewItem(str.GetHashCode(), 1, k_MessageEmpty);            if (bundle.HasMessages())            {                msg.displayName = k_MessageHeader;                var currMessages = bundle.GetMessages();                foreach(var currMsg in currMessages)                {                    str = itemName + currMsg.message;                    msg.AddChild(new BundleDetailItem(str.GetHashCode(), 2, currMsg.message, currMsg.severity));                }            }            bunRoot.AddChild(sz);            bunRoot.AddChild(dependency);            bunRoot.AddChild(msg);            return bunRoot;        }        internal void SetItems(IEnumerable<AssetBundleModel.BundleInfo> items)        {            m_Selecteditems.Clear();            foreach(var item in items)            {                CollectBundles(item);            }            SetSelection(new List<int>());            Reload();            ExpandAll();        }        internal void CollectBundles(AssetBundleModel.BundleInfo bundle)        {            var bunData = bundle as AssetBundleModel.BundleDataInfo;            if (bunData != null)                m_Selecteditems.Add(bunData);            else            {                var bunFolder = bundle as AssetBundleModel.BundleFolderInfo;                foreach (var bun in bunFolder.GetChildList())                {                    CollectBundles(bun);                }            }        }    }}
 |