Example #1
0
        public MemberPickerVM(IFileSearcherCreator fileSearcherCreator, IFileTreeView fileTreeView, ILanguageManager languageManager, IFileTreeNodeFilter filter, string title, IEnumerable <IDnSpyFile> assemblies)
        {
            this.title = title;
            this.fileSearcherCreator = fileSearcherCreator;
            this.languageManager     = languageManager;
            this.fileTreeView        = fileTreeView;
            this.language            = languageManager.SelectedLanguage;
            this.filter        = filter;
            this.delayedSearch = new DelayedAction(DEFAULT_DELAY_SEARCH_MS, DelayStartSearch);
            this.searchResults = new ObservableCollection <ISearchResult>();
            this.searchResultsCollectionView            = (ListCollectionView)CollectionViewSource.GetDefaultView(searchResults);
            this.searchResultsCollectionView.CustomSort = new SearchResult_Comparer();

            foreach (var file in assemblies)
            {
                fileTreeView.FileManager.ForceAdd(file, false, null);
            }

            fileTreeView.FileManager.CollectionChanged += (s, e) => Restart();

            this.CaseSensitive      = false;
            this.MatchWholeWords    = false;
            this.MatchAnySearchTerm = false;
            RefreshTreeView();
        }
 public FileTreeNodeDataContext(IFileTreeView fileTreeView, IResourceNodeFactory resourceNodeFactory, IFileTreeNodeFilter filter)
 {
     this.FileTreeView = fileTreeView;
     this.ResourceNodeFactory = resourceNodeFactory;
     this.Filter = filter;
     this.FilterVersion = 1;
     this.CanDragAndDrop = true;
 }
Example #3
0
        public FileTreeView(bool isGlobal, IFileTreeNodeFilter filter, IThemeManager themeManager, ITreeViewManager treeViewManager, ILanguageManager languageManager, IFileManager fileManager, IFileTreeViewSettings fileTreeViewSettings, IMenuManager menuManager, IDotNetImageManager dotNetImageManager, IWpfCommandManager wpfCommandManager, IResourceNodeFactory resourceNodeFactory, IAppSettings appSettings, [ImportMany] IEnumerable <Lazy <IDnSpyFileNodeProvider, IDnSpyFileNodeProviderMetadata> > dnSpyFileNodeProviders, [ImportMany] IEnumerable <Lazy <IFileTreeNodeDataFinder, IFileTreeNodeDataFinderMetadata> > mefFinders)
        {
            this.languageManager      = languageManager;
            this.themeManager         = themeManager;
            this.fileTreeViewSettings = fileTreeViewSettings;
            this.appSettings          = appSettings;

            this.context = new FileTreeNodeDataContext(this, resourceNodeFactory, filter ?? FilterNothingFileTreeNodeFilter.Instance)
            {
                SyntaxHighlight            = fileTreeViewSettings.SyntaxHighlight,
                SingleClickExpandsChildren = fileTreeViewSettings.SingleClickExpandsTreeViewChildren,
                ShowAssemblyVersion        = fileTreeViewSettings.ShowAssemblyVersion,
                ShowAssemblyPublicKeyToken = fileTreeViewSettings.ShowAssemblyPublicKeyToken,
                ShowToken            = fileTreeViewSettings.ShowToken,
                Language             = languageManager.Language,
                UseNewRenderer       = appSettings.UseNewRenderer_FileTreeView,
                DeserializeResources = fileTreeViewSettings.DeserializeResources,
                CanDragAndDrop       = isGlobal,
            };

            var options = new TreeViewOptions {
                AllowDrop          = true,
                IsVirtualizing     = true,
                VirtualizationMode = VirtualizationMode.Recycling,
                TreeViewListener   = this,
                RootNode           = new RootNode {
                    DropNodes = OnDropNodes,
                    DropFiles = OnDropFiles,
                },
            };

            this.fileTreeNodeGroups     = new FileTreeNodeGroups();
            this.dnSpyFileNodeProviders = dnSpyFileNodeProviders.OrderBy(a => a.Metadata.Order).ToArray();
            this.TreeView = treeViewManager.Create(new Guid(TVConstants.FILE_TREEVIEW_GUID), options);
            this.TreeView.SelectionChanged += TreeView_SelectionChanged;
            this.FileManager        = fileManager;
            this.DotNetImageManager = dotNetImageManager;
            this.dispatcher         = Dispatcher.CurrentDispatcher;
            this.FileManager.SetDispatcher(AddAction);
            fileManager.CollectionChanged        += FileManager_CollectionChanged;
            languageManager.LanguageChanged      += LanguageManager_LanguageChanged;
            themeManager.ThemeChanged            += ThemeManager_ThemeChanged;
            fileTreeViewSettings.PropertyChanged += FileTreeViewSettings_PropertyChanged;
            appSettings.PropertyChanged          += AppSettings_PropertyChanged;

            this.WpfCommands = wpfCommandManager.GetCommands(CommandConstants.GUID_FILE_TREEVIEW);

            if (isGlobal)
            {
                menuManager.InitializeContextMenu((FrameworkElement)this.TreeView.UIObject, new Guid(MenuConstants.GUIDOBJ_FILES_TREEVIEW_GUID), new GuidObjectsProvider(this.TreeView));
                wpfCommandManager.Add(CommandConstants.GUID_FILE_TREEVIEW, (UIElement)TreeView.UIObject);
            }

            this.nodeFinders = mefFinders.OrderBy(a => a.Metadata.Order).ToArray();
            InitializeFileTreeNodeGroups();
        }
Example #4
0
        public override FilterType GetFilterType(IFileTreeNodeFilter filter)
        {
            var res = filter.GetResult(this);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            return(FilterType.CheckChildren);
        }
Example #5
0
        public override FilterType GetFilterType(IFileTreeNodeFilter filter)
        {
            var res = filter.GetResult(MethodDef);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            if (Context.Decompiler.ShowMember(MethodDef))
            {
                return(FilterType.Visible);
            }
            return(FilterType.Hide);
        }
Example #6
0
        public override FilterType GetFilterType(IFileTreeNodeFilter filter)
        {
            var res = filter.GetResult(this.EventDef);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            if (Context.Language.ShowMember(this.EventDef))
            {
                return(FilterType.Visible);
            }
            return(FilterType.Hide);
        }
Example #7
0
        public override FilterType GetFilterType(IFileTreeNodeFilter filter)
        {
            var res = filter.GetResult(this);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            var type = TypeDef;

            if (type.IsNested && !Context.Language.ShowMember(type))
            {
                return(FilterType.Hide);
            }
            return(FilterType.Visible);
        }
Example #8
0
        public override FilterType GetFilterType(IFileTreeNodeFilter filter)
        {
            var p      = TreeNode.Parent;
            var parent = p == null ? null : p.Data as IModuleFileNode;

            Debug.Assert(parent != null);
            if (parent == null)
            {
                return(FilterType.Default);
            }
            var res = filter.GetResult(Name, parent.DnSpyFile);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            return(FilterType.CheckChildren);
        }
Example #9
0
        public T GetDnlibType <T>(string title, IFileTreeNodeFilter filter, T selectedObject, ModuleDef ownerModule) where T : class
        {
            var newFileTreeView = fileTreeViewCreator.Create(filter);

            try {
                var data = new MemberPickerVM(fileSearcherCreator, newFileTreeView, languageManager, filter, title, fileTreeView.FileManager.GetFiles());
                data.SyntaxHighlight = fileTreeViewSettings.SyntaxHighlight;
                var win = new MemberPickerDlg(fileTreeView, newFileTreeView, imageManager);
                win.DataContext = data;
                win.Owner       = ownerWindow ?? appWindow.MainWindow;
                data.SelectItem(selectedObject);
                if (win.ShowDialog() != true)
                {
                    return(null);
                }

                return(ImportObject(ownerModule, data.SelectedDnlibObject) as T);
            }
            finally {
                newFileTreeView.Dispose();
            }
        }
Example #10
0
 /// <inheritdoc/>
 public sealed override FilterType GetFilterType(IFileTreeNodeFilter filter) => filter.GetResult(this).FilterType;
Example #11
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter) =>
 filter.GetResult(DnSpyFile).FilterType;
Example #12
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     Debug.Fail("Shouldn't be called");
     return FilterType.Default;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="allowedMod">Module</param>
 /// <param name="filter">Filter</param>
 public SameAssemblyFileTreeNodeFilter(ModuleDef allowedMod, IFileTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedAsm = allowedMod.Assembly;
     this.allowedMod = allowedMod;
 }
Example #14
0
 public IFileTreeView Create(IFileTreeNodeFilter filter)
 {
     return new FileTreeView(false, filter, themeManager, treeViewManager, languageManager, fileManagerCreator.Create(), fileTreeViewSettings, menuManager, dotNetImageManager, wpfCommandManager, resourceNodeFactory, appSettings, dnSpyFileNodeCreators.ToArray(), mefFinders.ToArray());
 }
Example #15
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter) => filter.GetResult(AssemblyRef).FilterType;
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return filter.GetResult(assemblyRef).FilterType;
 }
Example #17
0
 public FileTreeNodeDataContext(IFileTreeView fileTreeView, IResourceNodeFactory resourceNodeFactory, IFileTreeNodeFilter filter)
 {
     this.FileTreeView        = fileTreeView;
     this.ResourceNodeFactory = resourceNodeFactory;
     this.Filter         = filter;
     this.FilterVersion  = 1;
     this.CanDragAndDrop = true;
 }
Example #18
0
 public virtual FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return filter.GetResult(this).FilterType;
 }
Example #19
0
 public virtual FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return(filter.GetResult(this).FilterType);
 }
 public SameModuleFileTreeNodeFilter(ModuleDef allowedModule, IFileTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedModule = allowedModule;
 }
Example #21
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter) =>
 filter.GetResult(ModuleRef).FilterType;
Example #22
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return(filter.GetResult(assemblyRef).FilterType);
 }
Example #23
0
 public ChainFileTreeNodeFilter(IFileTreeNodeFilter filter)
 {
     this.filter = filter;
 }
Example #24
0
 public override sealed FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return filter.GetResult(this).FilterType;
 }
Example #25
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     var res = filter.GetResult(PropertyDef);
     if (res.FilterType != FilterType.Default)
         return res.FilterType;
     if (Context.Language.ShowMember(PropertyDef))
         return FilterType.Visible;
     return FilterType.Hide;
 }
Example #26
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     var res = filter.GetResult(this);
     if (res.FilterType != FilterType.Default)
         return res.FilterType;
     var type = TypeDef;
     if (type.IsNested && !Context.Language.ShowMember(type))
         return FilterType.Hide;
     return FilterType.Visible;
 }
 public SameAssemblyFileTreeNodeFilter(ModuleDef allowedMod, IFileTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedAsm = allowedMod.Assembly;
     this.allowedMod = allowedMod;
 }
Example #28
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     var p = TreeNode.Parent;
     var parent = p == null ? null : p.Data as IModuleFileNode;
     Debug.Assert(parent != null);
     if (parent == null)
         return FilterType.Default;
     var res = filter.GetResult(Name, parent.DnSpyFile);
     if (res.FilterType != FilterType.Default)
         return res.FilterType;
     return FilterType.CheckChildren;
 }
Example #29
0
		public MemberPickerVM(IFileSearcherCreator fileSearcherCreator, IFileTreeView fileTreeView, ILanguageManager languageManager, IFileTreeNodeFilter filter, string title, IEnumerable<IDnSpyFile> assemblies) {
			this.title = title;
			this.fileSearcherCreator = fileSearcherCreator;
			this.languageManager = languageManager;
			this.fileTreeView = fileTreeView;
			this.language = languageManager.SelectedLanguage;
			this.filter = filter;
			this.delayedSearch = new DelayedAction(DEFAULT_DELAY_SEARCH_MS, DelayStartSearch);
			this.searchResults = new ObservableCollection<ISearchResult>();
			this.searchResultsCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(searchResults);
			this.searchResultsCollectionView.CustomSort = new SearchResult_Comparer();

			foreach (var file in assemblies)
				fileTreeView.FileManager.ForceAdd(file, false, null);

			fileTreeView.FileManager.CollectionChanged += (s, e) => Restart();

			this.CaseSensitive = false;
			this.MatchWholeWords = false;
			this.MatchAnySearchTerm = false;
			RefreshTreeView();
		}
 public ChainFileTreeNodeFilter(IFileTreeNodeFilter filter)
 {
     this.filter = filter;
 }
Example #31
0
		public override FilterType GetFilterType(IFileTreeNodeFilter filter) {
			return filter.GetResult(DnSpyFile).FilterType;
		}
Example #32
0
 /// <inheritdoc/>
 public virtual FilterType GetFilterType(IFileTreeNodeFilter filter) => filter.GetResult(this).FilterType;
Example #33
0
        public FileTreeView(bool isGlobal, IFileTreeNodeFilter filter, IThemeManager themeManager, ITreeViewManager treeViewManager, ILanguageManager languageManager, IFileManager fileManager, IFileTreeViewSettings fileTreeViewSettings, IMenuManager menuManager, IDotNetImageManager dotNetImageManager, IWpfCommandManager wpfCommandManager, IResourceNodeFactory resourceNodeFactory, IAppSettings appSettings, [ImportMany] IEnumerable <Lazy <IDnSpyFileNodeCreator, IDnSpyFileNodeCreatorMetadata> > dnSpyFileNodeCreators, [ImportMany] IEnumerable <Lazy <IFileTreeNodeDataFinder, IFileTreeNodeDataFinderMetadata> > mefFinders)
        {
            this.languageManager      = languageManager;
            this.themeManager         = themeManager;
            this.fileTreeViewSettings = fileTreeViewSettings;
            this.appSettings          = appSettings;

            this.context = new FileTreeNodeDataContext(this, resourceNodeFactory, filter ?? FilterNothingFileTreeNodeFilter.Instance)
            {
                SyntaxHighlight            = fileTreeViewSettings.SyntaxHighlight,
                SingleClickExpandsChildren = fileTreeViewSettings.SingleClickExpandsTreeViewChildren,
                ShowAssemblyVersion        = fileTreeViewSettings.ShowAssemblyVersion,
                ShowAssemblyPublicKeyToken = fileTreeViewSettings.ShowAssemblyPublicKeyToken,
                ShowToken            = fileTreeViewSettings.ShowToken,
                Language             = languageManager.SelectedLanguage,
                UseNewRenderer       = appSettings.UseNewRenderer_FileTreeView,
                DeserializeResources = fileTreeViewSettings.DeserializeResources,
                CanDragAndDrop       = isGlobal,
            };

            var options = new TreeViewOptions {
                AllowDrop          = true,
                IsVirtualizing     = true,
                VirtualizationMode = VirtualizationMode.Recycling,
                TreeViewListener   = this,
                RootNode           = new RootNode {
                    DropNodes = OnDropNodes,
                    DropFiles = OnDropFiles,
                },
            };

            this.fileTreeNodeGroups    = new FileTreeNodeGroups();
            this.dnSpyFileNodeCreators = dnSpyFileNodeCreators.OrderBy(a => a.Metadata.Order).ToArray();
            this.treeView           = treeViewManager.Create(new Guid(TVConstants.FILE_TREEVIEW_GUID), options);
            this.fileManager        = fileManager;
            this.dotNetImageManager = dotNetImageManager;
            var dispatcher = Dispatcher.CurrentDispatcher;

            this.fileManager.SetDispatcher(a => {
                if (!dispatcher.HasShutdownFinished && !dispatcher.HasShutdownStarted)
                {
                    bool callInvoke;
                    lock (actionsToCall) {
                        actionsToCall.Add(a);
                        callInvoke = actionsToCall.Count == 1;
                    }
                    if (callInvoke)
                    {
                        // Always notify with a delay because adding stuff to the tree view could
                        // cause some problems with the tree view or the list box it derives from.
                        dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(CallActions));
                    }
                }
            });
            fileManager.CollectionChanged        += FileManager_CollectionChanged;
            languageManager.LanguageChanged      += LanguageManager_LanguageChanged;
            themeManager.ThemeChanged            += ThemeManager_ThemeChanged;
            fileTreeViewSettings.PropertyChanged += FileTreeViewSettings_PropertyChanged;
            appSettings.PropertyChanged          += AppSettings_PropertyChanged;

            this.wpfCommands = wpfCommandManager.GetCommands(CommandConstants.GUID_FILE_TREEVIEW);

            if (isGlobal)
            {
                menuManager.InitializeContextMenu((FrameworkElement)this.treeView.UIObject, new Guid(MenuConstants.GUIDOBJ_FILES_TREEVIEW_GUID), new GuidObjectsCreator(this.treeView));
                wpfCommandManager.Add(CommandConstants.GUID_FILE_TREEVIEW, (UIElement)treeView.UIObject);
            }

            this.nodeFinders = mefFinders.OrderBy(a => a.Metadata.Order).ToArray();
            InitializeFileTreeNodeGroups();
        }
Example #34
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return(filter.GetResult(DnSpyFile.AssemblyDef).FilterType);
 }
Example #35
0
 public IFileTreeView Create(IFileTreeNodeFilter filter) =>
 new FileTreeView(false, filter, themeManager, treeViewManager, languageManager, fileManagerProvider.Create(), fileTreeViewSettings, menuManager, dotNetImageManager, wpfCommandManager, resourceNodeFactory, appSettings, dnSpyFileNodeProviders.ToArray(), mefFinders.ToArray());
Example #36
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     Debug.Fail("Shouldn't be called");
     return(FilterType.Default);
 }
Example #37
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return(filter.GetResult(this).FilterType);
 }
Example #38
0
 public SameModuleFileTreeNodeFilter(ModuleDef allowedModule, IFileTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedModule = allowedModule;
 }
Example #39
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     return filter.GetResult(ModuleRef).FilterType;
 }
Example #40
0
 public override FilterType GetFilterType(IFileTreeNodeFilter filter)
 {
     var res = filter.GetResult(this);
     if (res.FilterType != FilterType.Default)
         return res.FilterType;
     return FilterType.CheckChildren;
 }