public void Refresh(Predicate <IFileTreeNodeData> pred) { var nodes = new List <IFileTreeNodeData>(FileTreeView.TreeView.Root.Data.Descendants().OfType <IFileTreeNodeData>().Where(a => pred(a))); var hash = new HashSet <IDnSpyFileNode>(); foreach (var node in nodes) { var n = node.GetAncestorOrSelf <IDnSpyFileNode>(); if (n == null) { continue; } hash.Add(n); } if (hash.Count == 0) { return; } decompilationCache.Clear(new HashSet <IDnSpyFile>(hash.Select(a => a.DnSpyFile))); var tabs = new List <IFileTab>(); foreach (var tab in VisibleFirstTabs) { bool refresh = tab.Content.Nodes.Any(a => hash.Contains(a.GetAncestorOrSelf <IDnSpyFileNode>())); if (refresh) { tabs.Add(tab); } } Refresh(tabs); }
void OnNodeRemoved(DsDocumentNode node) { var hash = GetSelfAndDsDocumentNodeChildren(node); foreach (TabContentImpl tab in VisibleFirstTabs) { tab.OnNodesRemoved(hash, () => CreateTabContent(Array.Empty <DocumentTreeNodeData>())); } decompilationCache.Clear(new HashSet <IDsDocument>(hash.Select(a => a.Document))); }
void OnNodeRemoved(IDnSpyFileNode node) { var hash = GetSelfAndDnSpyFileNodeChildren(node); foreach (TabContentImpl tab in VisibleFirstTabs) { tab.OnNodesRemoved(hash, () => this.CreateTabContent(new IFileTreeNodeData[0])); } decompilationCache.Clear(new HashSet <IDnSpyFile>(hash.Select(a => a.DnSpyFile))); }
void RefreshResources(HashSet <TreeNodeData> modifiedResourceNodes) { if (modifiedResourceNodes.Count == 0) { return; } var ownerNodes = new HashSet <ResourcesFolderNode>(); foreach (var node in modifiedResourceNodes) { var owner = node.GetAncestorOrSelf <ResourcesFolderNode>(); if (owner != null) { ownerNodes.Add(owner); } } if (ownerNodes.Count == 0) { return; } decompilationCache.Clear(new HashSet <IDsDocument>(ownerNodes.Select(a => { var mod = a.GetModuleNode(); Debug.Assert(mod != null); return(mod?.Document); }).Where(a => a != null))); var tabs = new List <IDocumentTab>(); foreach (var tab in documentTabService.VisibleFirstTabs) { bool refresh = tab.Content.Nodes.Any(a => ownerNodes.Contains(a.GetAncestorOrSelf <ResourcesFolderNode>())); if (refresh) { tabs.Add(tab); } } documentTabService.Refresh(tabs); }