コード例 #1
0
ファイル: SaveCommands.cs プロジェクト: n017/dnSpy
        public override void Execute(IMenuItemContext context)
        {
            var modules = GetModules();
            if (modules.Length == 0)
                return;

            var lang = languageManager.Language;
            if (lang.ProjectFileExtension == null) {
                lang = languageManager.AllLanguages.FirstOrDefault(a => a.ProjectFileExtension != null);
                Debug.Assert(lang != null);
                if (lang == null)
                    return;
            }

            var task = new ExportTask(this, modules);
            var vm = new ExportToProjectVM(new PickDirectory(), languageManager, task, bamlDecompiler != null);
            task.vm = vm;
            vm.ProjectVersion = exportToProjectSettings.ProjectVersion;
            vm.CreateResX = fileTreeViewSettings.DeserializeResources;
            vm.DontReferenceStdLib = modules.Any(a => a.Assembly.IsCorLib());
            vm.Language = lang;
            vm.SolutionFilename = GetSolutionFilename(modules);
            vm.FilesToExportMessage = CreateFilesToExportMessage(modules);

            var win = new ExportToProjectDlg();
            task.dlg = win;
            win.DataContext = vm;
            win.Owner = appWindow.MainWindow;
            using (fileTreeView.FileManager.DisableAssemblyLoad())
                win.ShowDialog();
            if (vm.IsComplete)
                exportToProjectSettings.ProjectVersion = vm.ProjectVersion;
        }
コード例 #2
0
ファイル: Commands.cs プロジェクト: lovebanyi/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     var res = GetReference(context);
     if (res == null)
         return;
     searchManager.Value.FollowResult(res, newTab);
 }
コード例 #3
0
ファイル: CtxMenuCommands.cs プロジェクト: manojdjoshi/dnSpy
			public override void Execute(IMenuItemContext context) {
				var type = GetTypeRef(context, guid)?.ResolveTypeDef();
				if (type == null)
					return;
				foreach (var method in type.Methods)
					breakpointService.Value.Add(method);
			}
コード例 #4
0
ファイル: Commands.cs プロジェクト: lovebanyi/dnSpy
 public override bool IsVisible(IMenuItemContext context)
 {
     if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID))
         return false;
     var uiContext = context.Find<ITextEditorUIContext>();
     return uiContext != null && uiContext.HasSelectedText;
 }
コード例 #5
0
			static MethodDef GetEntryPoint(IMenuItemContext context) {
				if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_DOCUMENTS_TREEVIEW_GUID))
					return null;
				var nodes = context.Find<TreeNodeData[]>();
				var node = nodes == null || nodes.Length == 0 ? null : nodes[0];
				var module = node.GetModule();
				return module == null ? null : module.EntryPoint as MethodDef;
			}
コード例 #6
0
ファイル: ThemesMenu.cs プロジェクト: manojdjoshi/dnSpy
		public IEnumerable<CreatedMenuItem> Create(IMenuItemContext context) {
			foreach (var theme in themeService.VisibleThemes) {
				var attr = new ExportMenuItemAttribute { Header = theme.GetMenuName() };
				var tmp = theme;
				var item = new MyMenuItem(ctx => themeService.Theme = tmp, theme == themeService.Theme);
				yield return new CreatedMenuItem(attr, item);
			}
		}
コード例 #7
0
ファイル: MenuCommands.cs プロジェクト: GreenDamTan/dnSpy
		public override bool IsVisible(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID))
				return false;
			var uiContext = context.Find<ITextEditorUIContext>();
			if (uiContext == null)
				return false;
			var nodes = uiContext.FileTab.Content.Nodes.ToArray();
			return nodes.Length == 1 && nodes[0] is BamlResourceElementNode;
		}
コード例 #8
0
ファイル: MenuCommands.cs プロジェクト: manojdjoshi/dnSpy
		public override bool IsVisible(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_DOCUMENTVIEWERCONTROL_GUID))
				return false;
			var uiContext = context.Find<IDocumentViewer>();
			if (uiContext == null)
				return false;
			var nodes = uiContext.DocumentTab.Content.Nodes.ToArray();
			return nodes.Length == 1 && nodes[0] is BamlResourceElementNode;
		}
コード例 #9
0
ファイル: CodeCtxMenus.cs プロジェクト: manojdjoshi/dnSpy
		public override void Execute(IMenuItemContext context) {
			var md = GetTokenObj(context);
			if (md != null) {
				try {
					Clipboard.SetText(string.Format("{0:X8}", md.MDToken.Raw));
				}
				catch (ExternalException) { }
			}
		}
コード例 #10
0
ファイル: CopyTokenCommand.cs プロジェクト: levisre/dnSpy
			internal static uint? GetReference(IMenuItemContext context, string guid) {
				if (context.CreatorObject.Guid != new Guid(guid))
					return null;
				var @ref = context.Find<CodeReference>();
				if (@ref != null && @ref.Reference is IMDTokenProvider)
					return ((IMDTokenProvider)@ref.Reference).MDToken.Raw;
				if (@ref != null && @ref.Reference is TokenReference)
					return ((TokenReference)@ref.Reference).Token;
				return null;
			}
コード例 #11
0
ファイル: ThemesMenu.cs プロジェクト: lovebanyi/dnSpy
 public IEnumerable<CreatedMenuItem> Create(IMenuItemContext context)
 {
     foreach (var theme in themeManager.AllThemesSorted) {
         if (!themeManager.Settings.ShowAllThemes && !themeManager.IsHighContrast && theme.IsHighContrast)
             continue;
         var attr = new ExportMenuItemAttribute { Header = GetThemeHeaderName(theme) };
         var tmp = theme;
         var item = new MyMenuItem(ctx => themeManager.Theme = tmp, theme == themeManager.Theme);
         yield return new CreatedMenuItem(attr, item);
     }
 }
コード例 #12
0
ファイル: BodyCommandUtils.cs プロジェクト: manojdjoshi/dnSpy
		public static IList<MethodSourceStatement> GetStatements(IMenuItemContext context) {
			if (context == null)
				return null;
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_DOCUMENTVIEWERCONTROL_GUID))
				return null;
			var uiContext = context.Find<IDocumentViewer>();
			if (uiContext == null)
				return null;
			var pos = context.Find<TextEditorPosition>();
			if (pos == null)
				return null;
			return GetStatements(uiContext, pos.Position);
		}
コード例 #13
0
ファイル: ShowAppSettings.cs プロジェクト: lovebanyi/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     var tabs = tabCreators.SelectMany(a => a.Value.Create()).OrderBy(a => a.Order).ToArray();
     var dlg = new AppSettingsDlg(tabs);
     dlg.Owner = appWindow.MainWindow;
     bool saveSettings = dlg.ShowDialog() == true;
     var appRefreshSettings = new AppRefreshSettings();
     foreach (var tab in tabs)
         tab.OnClosed(saveSettings, appRefreshSettings);
     if (saveSettings) {
         foreach (var listener in listeners)
             listener.Value.OnSettingsModified(appRefreshSettings);
     }
 }
コード例 #14
0
ファイル: Commands.cs プロジェクト: kulminati/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     // Known problem: explorer can't show files in the .NET 2.0 GAC.
     var filename = GetFilename(context);
     if (filename == null)
         return;
     var args = string.Format("/select,{0}", filename);
     try {
         Process.Start(new ProcessStartInfo("explorer.exe", args));
     }
     catch (IOException) {
     }
     catch (Win32Exception) {
     }
 }
コード例 #15
0
ファイル: AssemblyCommands.cs プロジェクト: manojdjoshi/dnSpy
		public override void Execute(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_DOCUMENTS_TREEVIEW_GUID))
				return;
			var asms = new List<IDsDocument>();
			foreach (var node in (context.Find<TreeNodeData[]>() ?? Array.Empty<TreeNodeData>())) {
				var file = GetDocument(node);
				if (file != null)
					asms.Add(file);
			}
			foreach (var asm in asms) {
				var peImage = asm.PEImage;
				if (peImage != null)
					peImage.UnsafeDisableMemoryMappedIO();
			}
		}
コード例 #16
0
ファイル: AssemblyCommands.cs プロジェクト: lovebanyi/dnSpy
		public override void Execute(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_FILES_TREEVIEW_GUID))
				return;
			var asms = new List<IDnSpyFile>();
			foreach (var node in (context.Find<ITreeNodeData[]>() ?? new ITreeNodeData[0])) {
				var file = GetDnSpyFile(node);
				if (file != null)
					asms.Add(file);
			}
			foreach (var asm in asms) {
				var peImage = asm.PEImage;
				if (peImage != null)
					peImage.UnsafeDisableMemoryMappedIO();
			}
		}
コード例 #17
0
ファイル: Commands.cs プロジェクト: manojdjoshi/dnSpy
		TreeNodeData GetReference(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_ANALYZER_TREEVIEW_GUID))
				return null;

			var nodes = context.Find<TreeNodeData[]>();
			if (nodes == null || nodes.Length != 1)
				return null;

			var tokenNode = nodes[0] as IMDTokenNode;
			if (tokenNode != null && tokenNode.Reference != null) {
				if (!analyzerService.Value.CanFollowNode(nodes[0], useCodeRef))
					return null;
				return nodes[0];
			}

			return null;
		}
コード例 #18
0
		public void Initialize(IMenuItemContext context, ContextMenu menu) {
			if (context.OpenedFromKeyboard) {
				IScrollInfo scrollInfo = textEditor.TextArea.TextView;
				var pos = textEditor.TextArea.TextView.GetVisualPosition(textEditor.TextArea.Caret.Position, VisualYPosition.TextBottom);
				pos = new Point(pos.X - scrollInfo.HorizontalOffset, pos.Y - scrollInfo.VerticalOffset);

				menu.HorizontalOffset = pos.X;
				menu.VerticalOffset = pos.Y;
				ContextMenuService.SetPlacement(ctrl, PlacementMode.Relative);
				ContextMenuService.SetPlacementTarget(ctrl, textEditor.TextArea.TextView);
				menu.Closed += (s, e2) => {
					ctrl.ClearValue(ContextMenuService.PlacementProperty);
					ctrl.ClearValue(ContextMenuService.PlacementTargetProperty);
				};
			}
			else {
				ctrl.ClearValue(ContextMenuService.PlacementProperty);
				ctrl.ClearValue(ContextMenuService.PlacementTargetProperty);
			}
		}
コード例 #19
0
		bool TrySetPlacement(IMenuItemContext context, ContextMenu menu) {
			if (!context.OpenedFromKeyboard)
				return false;

			double caretRight;
			if (hexView.Caret.IsValuesCaretPresent && hexView.Caret.Position.Position.ActiveColumn == HexColumnType.Values)
				caretRight = hexView.Caret.ValuesRight;
			else if (hexView.Caret.IsAsciiCaretPresent && hexView.Caret.Position.Position.ActiveColumn == HexColumnType.Ascii)
				caretRight = hexView.Caret.AsciiRight;
			else
				return false;

			var line = hexView.Caret.ContainingHexViewLine;
			menu.HorizontalOffset = Math.Min(Math.Max(0, caretRight - hexView.ViewportLeft), hexView.ViewportWidth);
			menu.VerticalOffset = Math.Min(Math.Max(0, line.TextBottom - hexView.ViewportTop), hexView.ViewportHeight);
			ContextMenuService.SetPlacement(ctrl, PlacementMode.Relative);
			ContextMenuService.SetPlacementTarget(ctrl, hexView.VisualElement);
			menu.Closed += (s, e2) => ClearPlacementProperties();
			return true;
		}
コード例 #20
0
ファイル: CtxMenuCommands.cs プロジェクト: manojdjoshi/dnSpy
		internal static IMDTokenProvider GetReference(IMenuItemContext context, Guid guid) {
			if (context.CreatorObject.Guid != guid)
				return null;

			var @ref = context.Find<TextReference>();
			if (@ref != null) {
				var realRef = @ref.Reference;
				if (realRef is Parameter)
					realRef = ((Parameter)realRef).ParamDef;
				if (realRef is IMDTokenProvider)
					return (IMDTokenProvider)realRef;
			}

			var nodes = context.Find<TreeNodeData[]>();
			if (nodes != null && nodes.Length != 0) {
				var node = nodes[0] as IMDTokenNode;
				if (node != null)
					return node.Reference;
			}

			return null;
		}
コード例 #21
0
			internal static IEnumerable<TreeNodeData> GetNodes(IMenuItemContext context, string guid) {
				if (context.CreatorObject.Guid != new Guid(guid))
					yield break;
				var nodes = context.Find<TreeNodeData[]>();
				if (nodes == null)
					yield break;
				foreach (var node in nodes) {
					var tokNode = node as IMDTokenNode;
					if (tokNode != null) {
						if (IsPublic(tokNode.Reference as IMemberRef))
							yield return node;
						continue;
					}

					var nsNode = node as NamespaceNode;
					if (nsNode != null) {
						if (!string.IsNullOrEmpty(nsNode.Name))
							yield return node;
						continue;
					}
				}
			}
コード例 #22
0
ファイル: Commands.cs プロジェクト: kulminati/dnSpy
 public override bool IsEnabled(IMenuItemContext context)
 {
     return fileTreeView.CanSortTopNodes;
 }
コード例 #23
0
 /// <inheritdoc/>
 public override bool IsEnabled(IMenuItemContext context) => GetCommandTarget(context)?.CanExecute(group, cmdId) == CommandTargetStatus.Handled;
コード例 #24
0
 public override bool IsVisible(IMenuItemContext context) => !(GetEntryPoint(documentTabService, context) is null);
コード例 #25
0
 public override void Execute(IMenuItemContext context) => action(context);
コード例 #26
0
 public override bool IsVisible(IMenuItemContext context) => context.CreatorObject.Guid == new Guid(MenuConstants.GUIDOBJ_ANALYZER_TREEVIEW_GUID);
コード例 #27
0
 IEnumerable <IMemberRef> GetMemberRefs(IMenuItemContext context)
 {
     return(FilesCommand.GetMemberRefs(context, MenuConstants.GUIDOBJ_ANALYZER_TREEVIEW_GUID, true, languageManager));
 }
コード例 #28
0
ファイル: ViewCommands.cs プロジェクト: yueding/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     fileTreeView.TreeView.CollapseUnusedNodes();
 }
コード例 #29
0
 public override void Execute(IMenuItemContext context) => analyzerSettings.SyntaxHighlight = !analyzerSettings.SyntaxHighlight;
コード例 #30
0
ファイル: Commands.cs プロジェクト: kulminati/dnSpy
 public override bool IsVisible(IMenuItemContext context)
 {
     return GetFilename(context) != null;
 }
コード例 #31
0
		public override bool IsVisible(IMenuItemContext context) {
			if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID))
				return false;
			return CanExecute(context.Find<ITextEditorUIContext>());
		}
コード例 #32
0
 public override bool IsVisible(IMenuItemContext context)
 {
     return(GetMemberRefs(context).Any());
 }
コード例 #33
0
 static IEnumerable <IMemberRef> GetMemberRefs(IMenuItemContext context)
 {
     return(CodeCommand.GetMemberRefs(context, MenuConstants.GUIDOBJ_SEARCH_GUID));
 }
コード例 #34
0
 static IEnumerable <IMemberRef> GetMemberRefs(IMenuItemContext context)
 {
     return(GetMemberRefs(context, MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID));
 }
コード例 #35
0
 /// <inheritdoc/>
 public override void Execute(IMenuItemContext context) => GetCommandTarget(context)?.Execute(group, cmdId);
コード例 #36
0
ファイル: AboutCommands.cs プロジェクト: lovebanyi/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     AboutHelpers.OpenWebPage(AboutHelpers.BUILD_URL, messageBoxManager);
 }
コード例 #37
0
 public override bool IsVisible(IMenuItemContext context) => GetReference(context) != null;
コード例 #38
0
 public override void Execute(IMenuItemContext context) => analyzerSettings.ShowToken = !analyzerSettings.ShowToken;
コード例 #39
0
 public override bool IsChecked(IMenuItemContext context) => analyzerSettings.SyntaxHighlight;
コード例 #40
0
 public override void Execute(IMenuItemContext context) => ExecuteInternal(analyzerService);
コード例 #41
0
 /// <summary>
 /// Returns the <see cref="ICommandTarget"/> or null if none
 /// </summary>
 /// <param name="context">Context</param>
 /// <returns></returns>
 protected abstract ICommandTarget GetCommandTarget(IMenuItemContext context);
コード例 #42
0
 IEnumerable <IMemberRef> GetMemberRefs(IMenuItemContext context)
 {
     return(GetMemberRefs(context, MenuConstants.GUIDOBJ_FILES_TREEVIEW_GUID, false, languageManager));
 }
コード例 #43
0
 public override bool IsChecked(IMenuItemContext context) => analyzerSettings.ShowToken;
コード例 #44
0
 public override bool IsVisible(IMenuItemContext context) => IsVisibleInternal(editCodeVMCreator, context);
コード例 #45
0
 public override bool IsEnabled(IMenuItemContext context) => CanExecuteInternal(analyzerService);
コード例 #46
0
 internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context));
コード例 #47
0
 public override bool IsChecked(IMenuItemContext context) => isChecked;
コード例 #48
0
 public override void Execute(IMenuItemContext context) => Execute(BodyCommandUtils.GetStatements(context));
コード例 #49
0
 protected sealed override DnHexBox CreateContext(IMenuItemContext context) => context.CreatorObject.Object as DnHexBox;
コード例 #50
0
ファイル: Commands.cs プロジェクト: azureidea/dnSpy-1
 public override bool IsChecked(IMenuItemContext context) => cultureService.Language.Equals(langInfo);
コード例 #51
0
 public override void Execute(IMenuItemContext context)
 {
     Analyze(mainToolWindowManager, analyzerManager, languageManager.Language, GetMemberRefs(context));
 }
コード例 #52
0
 /// <inheritdoc/>
 public override bool IsVisible(IMenuItemContext context) => GetCommandTarget(context) != null;
コード例 #53
0
ファイル: Commands.cs プロジェクト: kulminati/dnSpy
 static string GetFilename(IMenuItemContext context)
 {
     if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_FILES_TREEVIEW_GUID))
         return null;
     var nodes = context.Find<ITreeNodeData[]>();
     if (nodes == null || nodes.Length != 1)
         return null;
     var fileNode = nodes[0] as IDnSpyFileNode;
     if (fileNode == null)
         return null;
     var filename = fileNode.DnSpyFile.Filename;
     if (!File.Exists(filename))
         return null;
     return filename;
 }
コード例 #54
0
 public override bool IsVisible(IMenuItemContext context)
 {
     return(GetNodes(context) != null);
 }
コード例 #55
0
		public override void Execute(IMenuItemContext context) {
			if (context.CreatorObject.Guid == new Guid(MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID))
				Execute(context.Find<ITextEditorUIContext>(), methodAnnotations);
		}
コード例 #56
0
 public override void Execute(IMenuItemContext context)
 {
     RemoveAnalyzeCommand.DeleteNodes(GetNodes(context));
 }
コード例 #57
0
ファイル: ViewCommands.cs プロジェクト: yueding/dnSpy
 public override bool IsChecked(IMenuItemContext context)
 {
     return window.IsFullScreen;
 }
コード例 #58
0
 public override ImageReference?GetIcon(IMenuItemContext context) => editCodeVMCreator.GetIcon();
コード例 #59
0
ファイル: AboutCommands.cs プロジェクト: lovebanyi/dnSpy
 public override void Execute(IMenuItemContext context)
 {
     AboutHelpers.OpenWebPage(AboutHelpers.BASE_URL + @"issues", messageBoxManager);
 }
コード例 #60
0
 public override string GetHeader(IMenuItemContext context) => editCodeVMCreator.GetHeader();