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); } }
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); }
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); }