Exemple #1
0
        private void HandleRemoveAction()
        {
            if (fileSystem == null)
            {
                return;
            }

            List <TreeIter> selectedIters = packTreeView.GetSelected().ToList();

            if (selectedIters.Count == 0)
            {
                return;
            }

            TreePath path = folderStore.GetPath(selectedIters.Last());

            for (int i = 0; i < selectedIters.Count - 1; i++)
            {
                path.Prev();
            }

            selectedIters.ForEach(selectedInFolder =>
            {
                if (TreeIter.Zero.Equals(selectedInFolder))
                {
                    return;
                }

                Packer.Item selectedItem = folderStore.GetValue(selectedInFolder, 2) as Packer.Item;
                if (selectedItem.IsRoot)
                {
                    return;
                }

                TreeIter selectedInPack = FindInPack(selectedItem);
                if (!TreeIter.Zero.Equals(selectedInPack))
                {
                    List <TreeIter> iterInPack = packStore.GetTree(selectedInPack).ToList();
                    iterInPack.Select(iter => packStore.GetValue(iter, 0) as Packer.Item).ToList()
                    .ForEach(item =>
                    {
                        if (!item.IsFolder)
                        {
                            fileSystem.Remove(item);
                        }
                    });

                    packStore.Remove(ref selectedInPack);
                }
                folderStore.Remove(ref selectedInFolder);
            });

            while (path.Indices.Last() >= folderStore.IterNChildren() && path.Prev())
            {
                ;
            }
            packTreeView.SelectAndFocus(path);
        }