コード例 #1
0
        public override void Execute(object parameter)
        {
            SearchForIssuesDialog dlg = new SearchForIssuesDialog();

            dlg.Owner = SD.Workbench.MainWindow;
            if (dlg.ShowDialog() == true)
            {
                string title     = "Issue Search";
                var    providers = dlg.SelectedProviders.ToList();
                var    fileNames = GetFilesToSearch(dlg.Target).ToList();
                if (dlg.FixIssues)
                {
                    int fixedIssueCount = 0;
                    IReadOnlyList <SearchResultMatch> remainingIssues = null;
                    AsynchronousWaitDialog.RunInCancellableWaitDialog(
                        title, null,
                        monitor => {
                        remainingIssues = FindAndFixIssues(fileNames, providers, monitor, out fixedIssueCount);
                    });
                    if (remainingIssues == null)
                    {
                        return;                         // can happen if issue search is cancelled
                    }
                    string message = string.Format(
                        "{0} issues were fixed automatically." +
                        "{1} issues are remaining (no automatic fix available).",
                        fixedIssueCount, remainingIssues.Count);
                    SearchResultsPad.Instance.ShowSearchResults(title, remainingIssues);
                    MessageService.ShowMessage(message, title);
                }
                else if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Shift))
                {
                    // Ctrl+Alt+Shift => run issue search on main thread,
                    // this helps debugging as exceptions don't get caught and passed from one thread to another
                    List <SearchResultMatch> issues = new List <SearchResultMatch>();
                    AsynchronousWaitDialog.RunInCancellableWaitDialog(
                        title, null,
                        monitor => SearchForIssues(fileNames, providers, f => issues.AddRange(f.Matches), monitor)
                        );
                    SearchResultsPad.Instance.ShowSearchResults(title, issues);
                }
                else
                {
                    var monitor    = SD.StatusBar.CreateProgressMonitor();
                    var observable = ReactiveExtensions.CreateObservable <SearchedFile>(
                        (m, c) => SearchForIssuesAsync(fileNames, providers, c, m),
                        monitor);
                    SearchResultsPad.Instance.ShowSearchResults(title, observable);
                }
            }
        }
コード例 #2
0
		public override void Execute(object parameter)
		{
			SearchForIssuesDialog dlg = new SearchForIssuesDialog();
			dlg.Owner = SD.Workbench.MainWindow;
			if (dlg.ShowDialog() == true) {
				string title = "Issue Search";
				var providers = dlg.SelectedProviders.ToList();
				var fileNames = GetFilesToSearch(dlg.Target).ToList();
				if (dlg.FixIssues) {
					int fixedIssueCount = 0;
					IReadOnlyList<SearchResultMatch> remainingIssues = null;
					AsynchronousWaitDialog.RunInCancellableWaitDialog(
						title, null,
						monitor => {
							remainingIssues = FindAndFixIssues(fileNames, providers, monitor, out fixedIssueCount);
						});
					if (remainingIssues == null)
						return; // can happen if issue search is cancelled
					string message = string.Format(
						"{0} issues were fixed automatically." +
						"{1} issues are remaining (no automatic fix available).",
						fixedIssueCount, remainingIssues.Count);
					SearchResultsPad.Instance.ShowSearchResults(title, remainingIssues);
					MessageService.ShowMessage(message, title);
				} else if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Shift)) {
					// Ctrl+Alt+Shift => run issue search on main thread,
					// this helps debugging as exceptions don't get caught and passed from one thread to another
					List<SearchResultMatch> issues = new List<SearchResultMatch>();
					AsynchronousWaitDialog.RunInCancellableWaitDialog(
						title, null,
						monitor => SearchForIssues(fileNames, providers, f => issues.AddRange(f.Matches), monitor)
					);
					SearchResultsPad.Instance.ShowSearchResults(title, issues);
				} else {
					var monitor = SD.StatusBar.CreateProgressMonitor();
					var observable = ReactiveExtensions.CreateObservable<SearchedFile>(
						(m, c) => SearchForIssuesAsync(fileNames, providers, c, m),
						monitor);
					SearchResultsPad.Instance.ShowSearchResults(title, observable);
				}
			}
		}