123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- using UnityEditor;
- using UnityEditor.IMGUI.Controls;
- using UnityEngine;
- using System.Collections.Generic;
- namespace AssetBundleBrowser
- {
- [System.Serializable]
- internal class AssetBundleManageTab
- {
- [SerializeField]
- TreeViewState m_BundleTreeState;
- [SerializeField]
- TreeViewState m_AssetListState;
- [SerializeField]
- MultiColumnHeaderState m_AssetListMCHState;
- [SerializeField]
- TreeViewState m_BundleDetailState;
- Rect m_Position;
- AssetBundleTree m_BundleTree;
- AssetListTree m_AssetList;
- MessageList m_MessageList;
- BundleDetailList m_DetailsList;
- bool m_ResizingHorizontalSplitter = false;
- bool m_ResizingVerticalSplitterRight = false;
- bool m_ResizingVerticalSplitterLeft = false;
- Rect m_HorizontalSplitterRect, m_VerticalSplitterRectRight, m_VerticalSplitterRectLeft;
- [SerializeField]
- float m_HorizontalSplitterPercent;
- [SerializeField]
- float m_VerticalSplitterPercentRight;
- [SerializeField]
- float m_VerticalSplitterPercentLeft;
- const float k_SplitterWidth = 3f;
- private static float s_UpdateDelay = 0f;
- SearchField m_searchField;
- EditorWindow m_Parent = null;
- internal AssetBundleManageTab()
- {
- m_HorizontalSplitterPercent = 0.4f;
- m_VerticalSplitterPercentRight = 0.7f;
- m_VerticalSplitterPercentLeft = 0.85f;
- }
- internal void OnEnable(Rect pos, EditorWindow parent)
- {
- m_Parent = parent;
- m_Position = pos;
- m_HorizontalSplitterRect = new Rect(
- (int)(m_Position.x + m_Position.width * m_HorizontalSplitterPercent),
- m_Position.y,
- k_SplitterWidth,
- m_Position.height);
- m_VerticalSplitterRectRight = new Rect(
- m_HorizontalSplitterRect.x,
- (int)(m_Position.y + m_HorizontalSplitterRect.height * m_VerticalSplitterPercentRight),
- (m_Position.width - m_HorizontalSplitterRect.width) - k_SplitterWidth,
- k_SplitterWidth);
- m_VerticalSplitterRectLeft = new Rect(
- m_Position.x,
- (int)(m_Position.y + m_HorizontalSplitterRect.height * m_VerticalSplitterPercentLeft),
- (m_HorizontalSplitterRect.width) - k_SplitterWidth,
- k_SplitterWidth);
- m_searchField = new SearchField();
- }
- internal void Update()
- {
- var t = Time.realtimeSinceStartup;
- if (t - s_UpdateDelay > 0.1f ||
- s_UpdateDelay > t) //something went strangely wrong if this second check is true.
- {
- s_UpdateDelay = t - 0.001f;
- if(AssetBundleModel.Model.Update())
- {
- m_Parent.Repaint();
- }
- if (m_DetailsList != null)
- m_DetailsList.Update();
- if (m_AssetList != null)
- m_AssetList.Update();
- }
- }
- internal void ForceReloadData()
- {
- UpdateSelectedBundles(new List<AssetBundleModel.BundleInfo>());
- SetSelectedItems(new List<AssetBundleModel.AssetInfo>());
- m_BundleTree.SetSelection(new int[0]);
- AssetBundleModel.Model.ForceReloadData(m_BundleTree);
- m_Parent.Repaint();
- }
- internal void OnGUI(Rect pos)
- {
- m_Position = pos;
- if(m_BundleTree == null)
- {
- if (m_AssetListState == null)
- m_AssetListState = new TreeViewState();
- var headerState = AssetListTree.CreateDefaultMultiColumnHeaderState();// multiColumnTreeViewRect.width);
- if (MultiColumnHeaderState.CanOverwriteSerializedFields(m_AssetListMCHState, headerState))
- MultiColumnHeaderState.OverwriteSerializedFields(m_AssetListMCHState, headerState);
- m_AssetListMCHState = headerState;
- m_AssetList = new AssetListTree(m_AssetListState, m_AssetListMCHState, this);
- m_AssetList.Reload();
- m_MessageList = new MessageList();
- if (m_BundleDetailState == null)
- m_BundleDetailState = new TreeViewState();
- m_DetailsList = new BundleDetailList(m_BundleDetailState);
- m_DetailsList.Reload();
- if (m_BundleTreeState == null)
- m_BundleTreeState = new TreeViewState();
- m_BundleTree = new AssetBundleTree(m_BundleTreeState, this);
- m_BundleTree.Refresh();
- m_Parent.Repaint();
- }
-
- HandleHorizontalResize();
- HandleVerticalResize();
- if (AssetBundleModel.Model.BundleListIsEmpty())
- {
- m_BundleTree.OnGUI(m_Position);
- var style = new GUIStyle(GUI.skin.label);
- style.alignment = TextAnchor.MiddleCenter;
- style.wordWrap = true;
- GUI.Label(
- new Rect(m_Position.x + 1f, m_Position.y + 1f, m_Position.width - 2f, m_Position.height - 2f),
- new GUIContent(AssetBundleModel.Model.GetEmptyMessage()),
- style);
- }
- else
- {
- //Left half
- var bundleTreeRect = new Rect(
- m_Position.x,
- m_Position.y,
- m_HorizontalSplitterRect.x,
- m_VerticalSplitterRectLeft.y - m_Position.y);
-
- m_BundleTree.OnGUI(bundleTreeRect);
- m_DetailsList.OnGUI(new Rect(
- bundleTreeRect.x,
- bundleTreeRect.y + bundleTreeRect.height + k_SplitterWidth,
- bundleTreeRect.width,
- m_Position.height - bundleTreeRect.height - k_SplitterWidth*2));
- //Right half.
- float panelLeft = m_HorizontalSplitterRect.x + k_SplitterWidth;
- float panelWidth = m_VerticalSplitterRectRight.width - k_SplitterWidth * 2;
- float searchHeight = 20f;
- float panelTop = m_Position.y + searchHeight;
- float panelHeight = m_VerticalSplitterRectRight.y - panelTop;
- OnGUISearchBar(new Rect(panelLeft, m_Position.y, panelWidth, searchHeight));
- m_AssetList.OnGUI(new Rect(
- panelLeft,
- panelTop,
- panelWidth,
- panelHeight));
- m_MessageList.OnGUI(new Rect(
- panelLeft,
- panelTop + panelHeight + k_SplitterWidth,
- panelWidth,
- (m_Position.height - panelHeight) - k_SplitterWidth * 2));
- if (m_ResizingHorizontalSplitter || m_ResizingVerticalSplitterRight || m_ResizingVerticalSplitterLeft)
- m_Parent.Repaint();
- }
- }
- void OnGUISearchBar(Rect rect)
- {
- m_BundleTree.searchString = m_searchField.OnGUI(rect, m_BundleTree.searchString);
- m_AssetList.searchString = m_BundleTree.searchString;
- }
- public bool hasSearch
- {
- get { return m_BundleTree.hasSearch; }
- }
- private void HandleHorizontalResize()
- {
- m_HorizontalSplitterRect.x = (int)(m_Position.width * m_HorizontalSplitterPercent);
- m_HorizontalSplitterRect.height = m_Position.height;
- EditorGUIUtility.AddCursorRect(m_HorizontalSplitterRect, MouseCursor.ResizeHorizontal);
- if (Event.current.type == EventType.MouseDown && m_HorizontalSplitterRect.Contains(Event.current.mousePosition))
- m_ResizingHorizontalSplitter = true;
- if (m_ResizingHorizontalSplitter)
- {
- m_HorizontalSplitterPercent = Mathf.Clamp(Event.current.mousePosition.x / m_Position.width, 0.1f, 0.9f);
- m_HorizontalSplitterRect.x = (int)(m_Position.width * m_HorizontalSplitterPercent);
- }
- if (Event.current.type == EventType.MouseUp)
- m_ResizingHorizontalSplitter = false;
- }
- private void HandleVerticalResize()
- {
- m_VerticalSplitterRectRight.x = m_HorizontalSplitterRect.x;
- m_VerticalSplitterRectRight.y = (int)(m_HorizontalSplitterRect.height * m_VerticalSplitterPercentRight);
- m_VerticalSplitterRectRight.width = m_Position.width - m_HorizontalSplitterRect.x;
- m_VerticalSplitterRectLeft.y = (int)(m_HorizontalSplitterRect.height * m_VerticalSplitterPercentLeft);
- m_VerticalSplitterRectLeft.width = m_VerticalSplitterRectRight.width;
- EditorGUIUtility.AddCursorRect(m_VerticalSplitterRectRight, MouseCursor.ResizeVertical);
- if (Event.current.type == EventType.MouseDown && m_VerticalSplitterRectRight.Contains(Event.current.mousePosition))
- m_ResizingVerticalSplitterRight = true;
- EditorGUIUtility.AddCursorRect(m_VerticalSplitterRectLeft, MouseCursor.ResizeVertical);
- if (Event.current.type == EventType.MouseDown && m_VerticalSplitterRectLeft.Contains(Event.current.mousePosition))
- m_ResizingVerticalSplitterLeft = true;
- if (m_ResizingVerticalSplitterRight)
- {
- m_VerticalSplitterPercentRight = Mathf.Clamp(Event.current.mousePosition.y / m_HorizontalSplitterRect.height, 0.2f, 0.98f);
- m_VerticalSplitterRectRight.y = (int)(m_HorizontalSplitterRect.height * m_VerticalSplitterPercentRight);
- }
- else if (m_ResizingVerticalSplitterLeft)
- {
- m_VerticalSplitterPercentLeft = Mathf.Clamp(Event.current.mousePosition.y / m_HorizontalSplitterRect.height, 0.25f, 0.98f);
- m_VerticalSplitterRectLeft.y = (int)(m_HorizontalSplitterRect.height * m_VerticalSplitterPercentLeft);
- }
- if (Event.current.type == EventType.MouseUp)
- {
- m_ResizingVerticalSplitterRight = false;
- m_ResizingVerticalSplitterLeft = false;
- }
- }
- internal void UpdateSelectedBundles(IEnumerable<AssetBundleModel.BundleInfo> bundles)
- {
- AssetBundleModel.Model.AddBundlesToUpdate(bundles);
- m_AssetList.SetSelectedBundles(bundles);
- m_DetailsList.SetItems(bundles);
- m_MessageList.SetItems(null);
- }
- internal void SetSelectedItems(IEnumerable<AssetBundleModel.AssetInfo> items)
- {
- m_MessageList.SetItems(items);
- }
- }
- }
|