private void DragDropType(Rect dropArea)
        {
            var evt = Event.current;

            if (evt.type == EventType.DragUpdated)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                }
            }

            if (evt.type == EventType.DragPerform)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.AcceptDrag();
                    m_Initialized = false;
                    UnityEngine.Object[] draggedObjects = DragAndDrop.objectReferences as UnityEngine.Object[];
                    for (int i = 0; i < draggedObjects.Length; i++)
                    {
                        if (draggedObjects[i])
                        {
                            System.Type sType = draggedObjects[i].GetType();
                            UAI.AddType(sType);
                        }
                    }
                    UAI.ForceSave();
                }
            }
        }
        private void DragDropAdd(Rect dropArea)
        {
            var evt = Event.current;

            if (evt.type == EventType.DragUpdated)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                }
            }

            if (evt.type == EventType.DragPerform)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.AcceptDrag();
                    UnityEngine.Object[] draggedObjects = DragAndDrop.objectReferences as UnityEngine.Object[];
                    for (int i = 0; i < draggedObjects.Length; i++)
                    {
                        if (draggedObjects[i])
                        {
                            m_Initialized = false;                             // need to reload when we're done.

                            UAI.AddIfIndexed(draggedObjects[i]);

                            var path = AssetDatabase.GetAssetPath(draggedObjects[i]);
                            if (System.IO.Directory.Exists(path))
                            {
                                UAI.RecursiveScanFoldersForAssets(path);
                            }
                        }
                    }
                    UAI.ForceSave();
                }
            }
        }
        IList <AssetTreeElement> GetData()
        {
            LoadedLabels = new HashSet <string>();

            eLoaded    itemstoload  = (eLoaded)LoadedItems;
            eShowTypes typesToShow  = (eShowTypes)ShowIndex;
            int        totalitems   = 0;
            var        treeElements = new List <AssetTreeElement>();

            var root = new AssetTreeElement("Root", -1, totalitems);

            treeElements.Add(root);

            System.Type[] Types = UAI.GetTypes();


            // Preprocess to get labels (we need to filter on them later).
            foreach (System.Type t in Types)
            {
                if (t != typeof(AnimatorController) && t != typeof(AnimatorOverrideController))                 // Somewhere, a kitten died because I typed that.
                {
                    Dictionary <string, AssetItem> TypeDic = UAI.GetAssetDictionary(t);
                    AssetItem[] items = new AssetItem[TypeDic.Values.Count];
                    TypeDic.Values.CopyTo(items, 0);

                    List <AssetTreeElement> ElementsToLoad = new List <AssetTreeElement>();
                    for (int i = 0; i < TypeDic.Values.Count; i++)
                    {
                        AssetItem ai = items[i];
                        AddLabels(ai);
                    }
                }
            }



            foreach (System.Type t in Types)
            {
                if (t != typeof(AnimatorController) && t != typeof(AnimatorOverrideController))                 // Somewhere, a kitten died because I typed that.
                {
                    Dictionary <string, AssetItem> TypeDic = UAI.GetAssetDictionary(t);

                    AssetTreeElement ate = new AssetTreeElement(t.Name, 0, ++totalitems);
                    ate.type = t;
                    AssetItem[] items = new AssetItem[TypeDic.Values.Count];
                    TypeDic.Values.CopyTo(items, 0);

                    List <AssetTreeElement> ElementsToLoad = new List <AssetTreeElement>();
                    for (int i = 0; i < TypeDic.Values.Count; i++)
                    {
                        AssetItem ai = items[i];
                        if (ShouldLoad(itemstoload, ai))
                        {
                            AssetTreeElement atai = new AssetTreeElement(ai._Name, 1, ++totalitems);
                            atai.ai    = ai;
                            atai.index = i;
                            atai.type  = t;
                            ElementsToLoad.Add(atai);

                            if (ai.IsResource)
                            {
                                ate.IsResourceCount++;
                            }
                            if (ai.IsAlwaysLoaded)
                            {
                                ate.Keepcount++;
                            }
                            if (ai.IsAddressable)
                            {
                                ate.IsAddrCount++;
                            }
                        }
                    }

                    if (ElementsToLoad.Count < 1)
                    {
                        if (typesToShow == eShowTypes.WithItems || itemstoload == eLoaded.SelectedOnly)
                        {
                            continue;
                        }
                    }

                    treeElements.Add(ate);
                    treeElements.AddRange(ElementsToLoad);
                }
            }
            LoadOnly.Clear();
            return(treeElements);
            // generate some test data
            //return MyTreeElementGenerator.GenerateRandomTree(130);
        }