public void AdjustNodePosition(Item item) { var nodes = ItemNodes.Where(x => x.Item == item); var foundCurrent = false; foreach (var node in nodes.ToList()) { if (node.Path.Equals(item.Path)) { foundCurrent = true; node.IsShadow = false; TreeListViewService.RefreshNode(node); continue; } if (node.Path.Equals(item.OriginalPath)) { node.IsShadow = true; TreeListViewService.RefreshNode(node); continue; } if (node.Parent is FolderTreeItem folder) { folder.SubItems.Remove(node); TreeListViewService.RefreshNode(folder); } else { Source.Remove(node); } ItemNodes.Remove(node); } if (!foundCurrent) { var rootFolders = Source.Select(x => x is FolderTreeItem folder ? folder : null).Where(x => x != null).ToList(); var parent = ProcessPath(item.Path.Trim(Path.DirectorySeparatorChar), rootFolders, null); foreach (var folder in rootFolders) { if (!Source.Contains(folder)) { Source.Add(folder); } } var itemNode = new ItemTreeItem(item, parent); ItemNodes.Add(itemNode); parent.SubItems.Add(itemNode); TreeListViewService.RefreshNode(parent); } }
public static NeoOCI load_item_tree(ItemTreeItem obj, Studio.TreeNodeObject itemparenttobj) { NeoOCI return_item; if (obj.no is string) { Folder folder = Folder.add(obj.name); if (itemparenttobj != null) { folder.set_parent_treenodeobject(itemparenttobj); } folder.Position = obj.pos; folder.Rotation = obj.rot; return_item = folder; } else { Item item = Item.add_item(obj.group, obj.category, (int)obj.no); if (itemparenttobj != null) { item.set_parent_treenodeobject(itemparenttobj); } item.Position = obj.pos; item.Rotation = obj.rot; item.scale = obj.scale; if (obj.anSp != null) { item.objctrl.animeSpeed = (float)obj.anSp; } return_item = item; } if (obj.ch != null) { foreach (var objch in obj.ch) { load_item_tree(objch, return_item.treeNodeObject); } } return(return_item); }
public async Task RebuildNodes(IEnumerable <Item> items) { var nodes = await Task.Run(() => { var folders = new List <FolderTreeItem>(); foreach (var unit in items) { var parent = ProcessPath(unit.Path.Trim(Path.DirectorySeparatorChar), folders, null); var itemNode = new ItemTreeItem(unit, parent); ItemNodes.Add(itemNode); parent.SubItems.Add(itemNode); } return(folders); }); Source.Clear(); foreach (var folderTreeItem in nodes) { Source.Add(folderTreeItem); } }