Exemple #1
0
        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)));
        }
Exemple #3
0
        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)));
        }
Exemple #4
0
        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);
        }