コード例 #1
0
ファイル: FileTabManager.cs プロジェクト: imanadib/dnSpy
        void FileTreeView_NodeActivated(object sender, FileTreeNodeActivatedEventArgs e)
        {
            e.Handled = true;

            var asmRefNode = e.Node as IAssemblyReferenceNode;

            if (asmRefNode != null)
            {
                var asm = fileTreeView.FileManager.Resolve(asmRefNode.AssemblyRef, asmRefNode.GetModule());
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => {
                    var asmNode = fileTreeView.FindNode(asm);
                    if (asmNode != null)
                    {
                        fileTreeView.TreeView.SelectItems(new ITreeNodeData[] { asmNode });
                    }
                }));
                return;
            }

            var tab = ActiveTabContentImpl;

            if (tab == null)
            {
                return;
            }
            SetFocus(tab);
        }
コード例 #2
0
        void FileTreeView_NodeActivated(object sender, FileTreeNodeActivatedEventArgs e)
        {
            e.Handled = true;

            var asmRefNode = e.Node as IAssemblyReferenceNode;

            if (asmRefNode != null)
            {
                var asm = fileTreeView.FileManager.Resolve(asmRefNode.AssemblyRef, asmRefNode.GetModule());
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => {
                    var asmNode = fileTreeView.FindNode(asm);
                    if (asmNode != null)
                    {
                        fileTreeView.TreeView.SelectItems(new ITreeNodeData[] { asmNode });
                    }
                }));
                return;
            }

            var derivedTypeNode = e.Node as IDerivedTypeNode;

            if (derivedTypeNode != null)
            {
                var td = derivedTypeNode.TypeDef;
                Debug.Assert(td != null);
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => {
                    var typeNode = fileTreeView.FindNode(td);
                    if (typeNode != null)
                    {
                        fileTreeView.TreeView.SelectItems(new ITreeNodeData[] { typeNode });
                    }
                }));
                return;
            }

            var baseTypeNode = e.Node as IBaseTypeNode;

            if (baseTypeNode != null)
            {
                var tdr = baseTypeNode.TypeDefOrRef;
                Debug.Assert(tdr != null);
                var td = tdr?.ScopeType.ResolveTypeDef();
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => {
                    var typeNode = fileTreeView.FindNode(td);
                    if (typeNode != null)
                    {
                        fileTreeView.TreeView.SelectItems(new ITreeNodeData[] { typeNode });
                    }
                }));
                return;
            }

            var tab = ActiveTabContentImpl;

            if (tab == null)
            {
                return;
            }
            SetFocus(tab);
        }
コード例 #3
0
        HashSet <IDnSpyFile> GetModifiedFiles(IDnSpyFile file)
        {
            var fileHash = new HashSet <IDnSpyFile>();

            fileHash.Add(file);
            var node = FileTreeView.FindNode(file);

            if (node is IModuleFileNode)
            {
                if (node.DnSpyFile.AssemblyDef != null && node.DnSpyFile.AssemblyDef.ManifestModule == node.DnSpyFile.ModuleDef)
                {
                    var asmNode = node.GetAssemblyNode();
                    Debug.Assert(asmNode != null);
                    if (asmNode != null)
                    {
                        fileHash.Add(asmNode.DnSpyFile);
                    }
                }
            }
            else if (node is IAssemblyFileNode)
            {
                node.TreeNode.EnsureChildrenLoaded();
                var manifestModNode = node.TreeNode.DataChildren.FirstOrDefault() as IModuleFileNode;
                Debug.Assert(manifestModNode != null);
                if (manifestModNode != null)
                {
                    fileHash.Add(manifestModNode.DnSpyFile);
                }
            }
            return(fileHash);
        }
コード例 #4
0
 private void FilterApplied()
 {
     Cursor.Current  = Cursors.WaitCursor;
     tvFiles.Visible = false;
     appDB.EFileSearchRow efsr = myFTV.SelectedFile;
     ReloadRoot();
     myFTV.FindNode(efsr);
     tvFiles.BeginUpdate();
     //resort tree
     myFTV.Resort(tvFiles.Nodes);
     tvFiles.EndUpdate();
     //tvFiles.Sort();
     if (tvFiles.Nodes.Find(efsr.FileId.ToString(), true).Length > 0)
     {
         tvFiles.SelectedNode = tvFiles.Nodes.Find(efsr.FileId.ToString(), true)[0];
     }
     Cursor.Current  = Cursors.Default;
     tvFiles.Visible = true;
     tvFiles.ExpandAll();
 }