Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }