void CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs eventArgs) { var c = CollectionChanged; if (c != null) { c(this, eventArgs); } }
void CallCollectionChanged(NotifyFileTreeViewCollectionChangedEventArgs eventArgs) => CollectionChanged?.Invoke(this, eventArgs);
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; } }