123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using UnityEngine;
- using UnityEditor.IMGUI.Controls;
- using System.Collections.Generic;
- using System.Linq;
- namespace AssetBundleBrowser
- {
- internal class InspectTreeItem : TreeViewItem
- {
- internal string bundlePath { get; private set; }
-
- internal InspectTreeItem(string path, int depth) : base(path.GetHashCode(), depth, path)
- {
- bundlePath = path;
- }
- internal InspectTreeItem(string path, int depth, string prettyName) : base(path.GetHashCode(), depth, prettyName)
- {
- bundlePath = path;
- }
- }
- class InspectBundleTree : TreeView
- {
- AssetBundleInspectTab m_InspectTab;
- internal InspectBundleTree(TreeViewState s, AssetBundleInspectTab parent) : base(s)
- {
- m_InspectTab = parent;
- showBorder = true;
- }
- protected override TreeViewItem BuildRoot()
- {
- var root = new TreeViewItem(-1, -1);
- root.children = new List<TreeViewItem>();
- if (m_InspectTab == null)
- Debug.Log("Unknown problem in AssetBundle Browser Inspect tab. Restart Browser and try again, or file ticket on github.");
- else
- {
- foreach (var folder in m_InspectTab.BundleList)
- {
- if (System.String.IsNullOrEmpty(folder.Key))
- {
- foreach(var path in folder.Value)
- root.AddChild(new InspectTreeItem(path, 0));
- }
- else
- {
- var folderItem = new TreeViewItem(folder.Key.GetHashCode(), 0, folder.Key);
- foreach (var path in folder.Value)
- {
- var prettyName = path;
- if (path.StartsWith(folder.Key)) //how could it not?
- prettyName = path.Remove(0, folder.Key.Length + 1);
- folderItem.AddChild(new InspectTreeItem(path, 1, prettyName));
- }
- root.AddChild(folderItem);
- }
- }
- }
- return root;
- }
- public override void OnGUI(Rect rect)
- {
- base.OnGUI(rect);
- if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && rect.Contains(Event.current.mousePosition))
- {
- SetSelection(new int[0], TreeViewSelectionOptions.FireSelectionChanged);
- }
- }
- protected override void RowGUI(RowGUIArgs args)
- {
- base.RowGUI(args);
- if (args.item.depth == 0)
- {
- var width = 16;
- var edgeRect = new Rect(args.rowRect.xMax - width, args.rowRect.y, width, args.rowRect.height);
- if (GUI.Button(edgeRect, "-"))
- {
- if (GetSelection().Contains(args.item.id))
- {
- var selection = GetSelection();
- foreach (var id in selection)
- {
- var item = FindItem(id, rootItem);
- if(item.depth == 0)
- RemoveItem(item);
- }
- }
- else
- {
- RemoveItem(args.item);
- }
- m_InspectTab.RefreshBundles();
- }
- }
- }
- private void RemoveItem(TreeViewItem item)
- {
- var inspectItem = item as InspectTreeItem;
- if (inspectItem != null)
- m_InspectTab.RemoveBundlePath(inspectItem.bundlePath);
- else
- m_InspectTab.RemoveBundleFolder(item.displayName);
- }
- protected override void SelectionChanged(IList<int> selectedIds)
- {
- base.SelectionChanged(selectedIds);
- if (selectedIds == null)
- return;
- if (selectedIds.Count > 0)
- {
- m_InspectTab.SetBundleItem(FindRows(selectedIds).Select(tvi => tvi as InspectTreeItem).ToList());
- //m_InspectTab.SetBundleItem(FindItem(selectedIds[0], rootItem) as InspectTreeItem);
- }
- else
- {
- m_InspectTab.SetBundleItem(null);
- }
- }
- protected override bool CanMultiSelect(TreeViewItem item)
- {
- return true;
- }
- }
- }
|