Exemplo n.º 1
0
        void CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs eventArgs)
        {
            var c = CollectionChanged;

            if (c != null)
            {
                c(this, eventArgs);
            }
        }
Exemplo n.º 2
0
 void CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs eventArgs) =>
 CollectionChanged?.Invoke(this, eventArgs);
Exemplo n.º 3
0
        void FileManager_CollectionChanged(object sender, NotifyFileCollectionChangedEventArgs e)
        {
            switch (e.Type)
            {
            case NotifyFileCollectionType.Add:
                IDnSpyFileNode newNode;

                var addFileInfo = e.Data as AddFileInfo;
                int index;
                if (addFileInfo != null)
                {
                    newNode = addFileInfo.DnSpyFileNode;
                    index   = addFileInfo.Index;
                    if (newNode.TreeNode == null)
                    {
                        TreeView.Create(newNode);
                    }
                }
                else
                {
                    newNode = CreateNode(null, e.Files[0]);
                    TreeView.Create(newNode);
                    index = TreeView.Root.Children.Count;
                }

                if ((uint)index >= (uint)TreeView.Root.Children.Count)
                {
                    index = TreeView.Root.Children.Count;
                }
                TreeView.Root.Children.Insert(index, newNode.TreeNode);
                CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs.CreateAdd(newNode));
                break;

            case NotifyFileCollectionType.Remove:
                var dict  = new Dictionary <IDnSpyFileNode, int>();
                var dict2 = new Dictionary <IDnSpyFile, IDnSpyFileNode>();
                int i     = 0;
                foreach (var n in TopNodes)
                {
                    dict[n]            = i++;
                    dict2[n.DnSpyFile] = n;
                }
                var list = new List <Tuple <IDnSpyFileNode, int> >(e.Files.Select(a => {
                    IDnSpyFileNode node;
                    bool b = dict2.TryGetValue(a, out node);
                    Debug.Assert(b);
                    int j = -1;
                    b     = b && dict.TryGetValue(node, out j);
                    Debug.Assert(b);
                    return(Tuple.Create(node, b ? j : -1));
                }));
                list.Sort((a, b) => b.Item2.CompareTo(a.Item2));
                var removed = new List <IDnSpyFileNode>();
                foreach (var t in list)
                {
                    if (t.Item2 < 0)
                    {
                        continue;
                    }
                    Debug.Assert((uint)t.Item2 < (uint)TreeView.Root.Children.Count);
                    Debug.Assert(TreeView.Root.Children[t.Item2].Data == t.Item1);
                    TreeView.Root.Children.RemoveAt(t.Item2);
                    removed.Add(t.Item1);
                }
                DisableMemoryMappedIO(list.Select(a => a.Item1).ToArray());
                CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs.CreateRemove(removed.ToArray()));
                break;

            case NotifyFileCollectionType.Clear:
                var oldNodes = TreeView.Root.Children.Select(a => (IDnSpyFileNode)a.Data).ToArray();
                TreeView.Root.Children.Clear();
                DisableMemoryMappedIO(oldNodes);
                CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs.CreateClear(oldNodes));
                break;

            default:
                Debug.Fail(string.Format("Unknown event type: {0}", e.Type));
                break;
            }
        }