void TryAddChildren(AssetTreeItem <T> rootitem, List <TreeViewItem> list, AssetTreeModel <T> model, int depth)
        {
            if (model.HasChildren(rootitem.DataId))
            {
                List <T> children = model.GetChildren(rootitem.DataId);
                Stack <AssetTreeItem <T> > stack = StackPool <AssetTreeItem <T> > .Get();

                for (int i = children.Count - 1; i >= 0; i--)
                {
                    var child = children[i];

                    //create item
                    var childItem = CreateItem(ref child, depth + 1);
                    stack.Push(childItem);
                }

                ListPool <T> .Release(children);

                while (stack.Count > 0)
                {
                    var stackChild = stack.Pop();
                    list.Add(stackChild);
                    if (model.HasChildren(stackChild.DataId))
                    {
                        if (IsExpanded(stackChild.id))
                        {
                            children = model.GetChildren(stackChild.DataId);
                            //
                            //stackChild.children = new List<TreeViewItem>();
                            for (int i = children.Count - 1; i >= 0; i--)
                            {
                                var child = children[i];

                                //create item
                                var childItem = CreateItem(ref child, stackChild.depth + 1);
                                stack.Push(childItem);
                                //stackChild.children.Add(childItem);
                            }

                            ListPool <T> .Release(children);
                        }
                        else
                        {
                            stackChild.children = CreateChildListForCollapsedParent();
                        }
                    }
                }

                StackPool <AssetTreeItem <T> > .Release(stack);
            }
        }
        void SearchItem(List <TreeViewItem> list, AssetTreeModel <T> model, int itemid)
        {
            if (list != null && model != null && model.HasChildren(itemid))
            {
                List <T>  children = model.GetChildren(itemid);
                Stack <T> stack    = StackPool <T> .Get();

                for (int i = children.Count - 1; i >= 0; i--)
                {
                    stack.Push(children[i]);
                }

                ListPool <T> .Release(children);

                while (stack.Count > 0)
                {
                    T current = stack.Pop();

                    if (!string.IsNullOrEmpty(current.DisplayName) && current.DisplayName.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        //Add result
                        var viewitem = CreateItem(ref current, 0);
                        list.Add(viewitem);
                    }

                    if (model.HasChildren(current.Id))
                    {
                        children = model.GetChildren(current.Id);
                        for (int i = children.Count - 1; i >= 0; i--)
                        {
                            stack.Push(children[i]);
                        }

                        ListPool <T> .Release(children);
                    }
                }

                StackPool <T> .Release(stack);
            }
        }
Exemple #3
0
        bool HasNoAssetBundleName(ref AssetTreeData data)
        {
            bool ret = false;

            if (_model.HasChildren(ref data))
            {
                var children = _model.GetChildren(ref data);

                for (int i = 0; i < children.Count; i++)
                {
                    var child = children[i];
                    if (_model.HasChildren(ref child))
                    {
                        ret = true;
                        break;
                    }
                }

                ListPool <AssetTreeData> .Release(children);
            }
            return(ret);
        }
Exemple #4
0
        public static long GetSelfAssetSize <T>(ref T data, bool isroot, AssetTreeModel <T> datamodel) where T : ITreeData
        {
            long size = 0;

            if (isroot)
            {
                if (datamodel.HasChildren(ref data))
                {
                    var children = datamodel.GetChildren(ref data);
                    for (int i = 0; i < children.Count; i++)
                    {
                        size += children[i].EditorInfo.RuntimeInfo.AssetSize;
                    }

                    ListPool <T> .Release(children);
                }
            }
            else
            {
                size = data.EditorInfo.RuntimeInfo.AssetSize;
            }
            return(size);
        }