Пример #1
0
        public MemberPickerVM(IDocumentSearcherProvider fileSearcherProvider, IDocumentTreeView documentTreeView, IDecompilerService decompilerService, IDocumentTreeNodeFilter filter, string title, IEnumerable <IDsDocument> assemblies)
        {
            Title = title;
            this.fileSearcherProvider = fileSearcherProvider;
            this.decompilerService    = decompilerService;
            this.documentTreeView     = documentTreeView;
            allDecompilers            = new ObservableCollection <DecompilerVM>(decompilerService.AllDecompilers.Select(a => new DecompilerVM(a)));
            decompiler    = allDecompilers.FirstOrDefault(a => a.Decompiler == decompilerService.Decompiler);
            this.filter   = filter;
            delayedSearch = new DelayedAction(DEFAULT_DELAY_SEARCH_MS, DelayStartSearch);
            SearchResults = new ObservableCollection <ISearchResult>();
            searchResultsCollectionView            = (ListCollectionView)CollectionViewSource.GetDefaultView(SearchResults);
            searchResultsCollectionView.CustomSort = new SearchResult_Comparer();

            foreach (var file in assemblies)
            {
                documentTreeView.DocumentService.ForceAdd(file, false, null);
            }

            documentTreeView.DocumentService.CollectionChanged += (s, e) => Restart();

            CaseSensitive      = false;
            MatchWholeWords    = false;
            MatchAnySearchTerm = false;
            RefreshTreeView();
        }
Пример #2
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) {
			var res = filter.GetResult(TypeDef);
			if (res.FilterType != FilterType.Default)
				return res.FilterType;
			if (Context.Decompiler.ShowMember(TypeDef))
				return FilterType.Visible;
			return FilterType.Hide;
		}
		public DocumentTreeNodeDataContext(IDocumentTreeView documentTreeView, IResourceNodeFactory resourceNodeFactory, IDocumentTreeNodeFilter filter, ITreeViewNodeTextElementProvider treeViewNodeTextElementProvider) {
			DocumentTreeView = documentTreeView;
			ResourceNodeFactory = resourceNodeFactory;
			Filter = filter;
			TreeViewNodeTextElementProvider = treeViewNodeTextElementProvider;
			FilterVersion = 1;
			CanDragAndDrop = true;
		}
Пример #4
0
 public DocumentTreeNodeDataContext(IDocumentTreeView documentTreeView, IResourceNodeFactory resourceNodeFactory, IDocumentTreeNodeFilter filter, ITreeViewNodeTextElementProvider treeViewNodeTextElementProvider)
 {
     DocumentTreeView    = documentTreeView;
     ResourceNodeFactory = resourceNodeFactory;
     Filter = filter;
     TreeViewNodeTextElementProvider = treeViewNodeTextElementProvider;
     FilterVersion  = 1;
     CanDragAndDrop = true;
 }
Пример #5
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) {
			var res = filter.GetResult(this);
			if (res.FilterType != FilterType.Default)
				return res.FilterType;
			var type = TypeDef;
			if (type.IsNested && !Context.Decompiler.ShowMember(type))
				return FilterType.Hide;
			return FilterType.Visible;
		}
Пример #6
0
        public override FilterType GetFilterType(IDocumentTreeNodeFilter filter)
        {
            var res = filter.GetResult(this);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            return(FilterType.CheckChildren);
        }
Пример #7
0
        public DocumentTreeView(bool isGlobal, IDocumentTreeNodeFilter filter, ITreeViewService treeViewService, IDecompilerService decompilerService, IDsDocumentService documentService, IDocumentTreeViewSettings documentTreeViewSettings, IMenuService menuService, IDotNetImageService dotNetImageService, IWpfCommandService wpfCommandService, IResourceNodeFactory resourceNodeFactory, IAppSettings appSettings, [ImportMany] IEnumerable <Lazy <IDsDocumentNodeProvider, IDsDocumentNodeProviderMetadata> > dsDocumentNodeProvider, [ImportMany] IEnumerable <Lazy <IDocumentTreeNodeDataFinder, IDocumentTreeNodeDataFinderMetadata> > mefFinders, ITreeViewNodeTextElementProvider treeViewNodeTextElementProvider)
        {
            this.decompilerService        = decompilerService;
            this.documentTreeViewSettings = documentTreeViewSettings;
            this.appSettings = appSettings;

            this.context = new DocumentTreeNodeDataContext(this, resourceNodeFactory, filter ?? FilterNothingDocumentTreeNodeFilter.Instance, treeViewNodeTextElementProvider)
            {
                SyntaxHighlight            = documentTreeViewSettings.SyntaxHighlight,
                SingleClickExpandsChildren = documentTreeViewSettings.SingleClickExpandsTreeViewChildren,
                ShowAssemblyVersion        = documentTreeViewSettings.ShowAssemblyVersion,
                ShowAssemblyPublicKeyToken = documentTreeViewSettings.ShowAssemblyPublicKeyToken,
                ShowToken            = documentTreeViewSettings.ShowToken,
                Decompiler           = decompilerService.Decompiler,
                UseNewRenderer       = appSettings.UseNewRenderer_DocumentTreeView,
                DeserializeResources = documentTreeViewSettings.DeserializeResources,
                CanDragAndDrop       = isGlobal,
            };

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

            this.documentTreeNodeGroups = new DocumentTreeNodeGroups();
            this.dsDocumentNodeProvider = dsDocumentNodeProvider.OrderBy(a => a.Metadata.Order).ToArray();
            this.TreeView = treeViewService.Create(new Guid(TreeViewConstants.DOCUMENT_TREEVIEW_GUID), options);
            this.TreeView.SelectionChanged += TreeView_SelectionChanged;
            this.DocumentService            = documentService;
            this.DotNetImageService         = dotNetImageService;
            this.dispatcher = Dispatcher.CurrentDispatcher;
            this.DocumentService.SetDispatcher(AddAction);
            documentService.CollectionChanged        += DocumentService_CollectionChanged;
            decompilerService.DecompilerChanged      += DecompilerService_DecompilerChanged;
            documentTreeViewSettings.PropertyChanged += DocumentTreeViewSettings_PropertyChanged;
            appSettings.PropertyChanged += AppSettings_PropertyChanged;

            this.WpfCommands = wpfCommandService.GetCommands(ControlConstants.GUID_DOCUMENT_TREEVIEW);

            if (isGlobal)
            {
                menuService.InitializeContextMenu(this.TreeView.UIObject, new Guid(MenuConstants.GUIDOBJ_DOCUMENTS_TREEVIEW_GUID), new GuidObjectsProvider(this.TreeView));
                wpfCommandService.Add(ControlConstants.GUID_DOCUMENT_TREEVIEW, TreeView.UIObject);
            }

            this.nodeFinders = mefFinders.OrderBy(a => a.Metadata.Order).ToArray();
            InitializeDocumentTreeNodeGroups();
        }
Пример #8
0
        public override FilterType GetFilterType(IDocumentTreeNodeFilter filter)
        {
            var res = filter.GetResult(TypeDef);

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            if (Context.Decompiler.ShowMember(TypeDef))
            {
                return(FilterType.Visible);
            }
            return(FilterType.Hide);
        }
Пример #9
0
        public override FilterType GetFilterType(IDocumentTreeNodeFilter filter)
        {
            var res = filter.GetResult(this);

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

            if (type.IsNested && !Context.Decompiler.ShowMember(type))
            {
                return(FilterType.Hide);
            }
            return(FilterType.Visible);
        }
Пример #10
0
        public override FilterType GetFilterType(IDocumentTreeNodeFilter filter)
        {
            var p      = TreeNode.Parent;
            var parent = p == null ? null : p.Data as ModuleDocumentNode;

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

            if (res.FilterType != FilterType.Default)
            {
                return(res.FilterType);
            }
            return(FilterType.CheckChildren);
        }
Пример #11
0
        public T GetDnlibType <T>(string title, IDocumentTreeNodeFilter filter, T selectedObject, ModuleDef ownerModule) where T : class
        {
            var newDocumentTreeView = documentTreeViewProvider.Create(filter);

            try {
                var win  = new MemberPickerDlg(documentTreeView, newDocumentTreeView);
                var data = new MemberPickerVM(fileSearcherProvider, newDocumentTreeView, decompilerService, filter, title, documentTreeView.DocumentService.GetDocuments());
                data.SyntaxHighlight = documentTreeViewSettings.SyntaxHighlight;
                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 {
                newDocumentTreeView.Dispose();
            }
        }
Пример #12
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="filter"></param>
 public ChainDocumentTreeNodeFilter(IDocumentTreeNodeFilter filter)
 {
     this.filter = filter;
 }
Пример #13
0
 public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) =>
 filter.GetResult(ModuleRef).FilterType;
Пример #14
0
 /// <inheritdoc/>
 public sealed override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResult(this).FilterType;
Пример #15
0
 public IDocumentTreeView Create(IDocumentTreeNodeFilter filter) =>
 new DocumentTreeView(false, filter, treeViewService, decompilerService, documentServiceProvider.Create(), documentTreeViewSettings, menuService, dotNetImageService, wpfCommandService, resourceNodeFactory, appSettings, dsDocumentNodeProviders.ToArray(), mefFinders.ToArray(), treeViewNodeTextElementProvider);
Пример #16
0
 public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResultOther(this).FilterType;
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="allowedMod">Module</param>
 /// <param name="filter">Filter</param>
 public SameAssemblyDocumentTreeNodeFilter(ModuleDef allowedMod, IDocumentTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedAsm = allowedMod.Assembly;
     this.allowedMod = allowedMod;
 }
Пример #18
0
 public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResult(AssemblyRef).FilterType;
Пример #19
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) {
			Debug.Fail("Shouldn't be called");
			return FilterType.Default;
		}
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="allowedMod">Module</param>
		/// <param name="filter">Filter</param>
		public SameAssemblyDocumentTreeNodeFilter(ModuleDef allowedMod, IDocumentTreeNodeFilter filter)
			: base(filter) {
			allowedAsm = allowedMod.Assembly;
			this.allowedMod = allowedMod;
		}
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="filter"></param>
		public ChainDocumentTreeNodeFilter(IDocumentTreeNodeFilter filter) {
			this.filter = filter;
		}
Пример #22
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) {
			var res = filter.GetResult(this);
			if (res.FilterType != FilterType.Default)
				return res.FilterType;
			return FilterType.CheckChildren;
		}
Пример #23
0
 /// <inheritdoc/>
 public virtual FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResult(this).FilterType;
Пример #24
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResultOther(this).FilterType;
Пример #25
0
 public override FilterType GetFilterType(IDocumentTreeNodeFilter filter)
 {
     Debug.Fail("Shouldn't be called");
     return(FilterType.Default);
 }
Пример #26
0
		/// <inheritdoc/>
		public sealed override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResult(this).FilterType;
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="allowedModule">Module</param>
 /// <param name="filter">Filter</param>
 public SameModuleDocumentTreeNodeFilter(ModuleDef allowedModule, IDocumentTreeNodeFilter filter)
     : base(filter)
 {
     this.allowedModule = allowedModule;
 }
Пример #28
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) =>
			filter.GetResult(ModuleRef).FilterType;
Пример #29
0
		public override FilterType GetFilterType(IDocumentTreeNodeFilter filter) => filter.GetResult(AssemblyRef).FilterType;
Пример #30
0
		public IDocumentTreeView Create(IDocumentTreeNodeFilter filter) =>
			new DocumentTreeView(false, filter, treeViewService, decompilerService, documentServiceProvider.Create(), documentTreeViewSettings, menuService, dotNetImageService, wpfCommandService, resourceNodeFactory, appSettings, dsDocumentNodeProviders.ToArray(), mefFinders.ToArray(), treeViewNodeTextElementProvider);
Пример #31
0
		public MemberPickerVM(IDocumentSearcherProvider fileSearcherProvider, IDocumentTreeView documentTreeView, IDecompilerService decompilerService, IDocumentTreeNodeFilter filter, string title, IEnumerable<IDsDocument> assemblies) {
			Title = title;
			this.fileSearcherProvider = fileSearcherProvider;
			this.decompilerService = decompilerService;
			this.documentTreeView = documentTreeView;
			decompiler = decompilerService.Decompiler;
			this.filter = filter;
			delayedSearch = new DelayedAction(DEFAULT_DELAY_SEARCH_MS, DelayStartSearch);
			SearchResults = new ObservableCollection<ISearchResult>();
			searchResultsCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(SearchResults);
			searchResultsCollectionView.CustomSort = new SearchResult_Comparer();

			foreach (var file in assemblies)
				documentTreeView.DocumentService.ForceAdd(file, false, null);

			documentTreeView.DocumentService.CollectionChanged += (s, e) => Restart();

			CaseSensitive = false;
			MatchWholeWords = false;
			MatchAnySearchTerm = false;
			RefreshTreeView();
		}