private void AddSingleFileResult(List <UDT_DLL.udtPatternMatch> results, List <DemoInfo> demos) { uint patternBits = 0; foreach (var result in results) { patternBits |= result.Patterns; } var copyMenuItem = new MenuItem(); copyMenuItem.Header = App.CreateContextMenuHeader("Copy to Clipboard", "(Ctrl+C)"); copyMenuItem.Command = _fileCopyCommand.RoutedCommand; var cutMenuItem = new MenuItem(); cutMenuItem.Header = "Apply Cut(s)"; cutMenuItem.Command = _fileCutCommand.RoutedCommand; var revealMenuItem = new MenuItem(); revealMenuItem.Header = "Reveal in File Explorer"; revealMenuItem.Command = _fileRevealCommand.RoutedCommand; var selectMenuItem = new MenuItem(); selectMenuItem.Header = "Select in Demo List"; selectMenuItem.Command = _fileSelectCommand.RoutedCommand; var contextMenu = new ContextMenu(); contextMenu.Items.Add(copyMenuItem); contextMenu.Items.Add(selectMenuItem); contextMenu.Items.Add(cutMenuItem); contextMenu.Items.Add(new Separator()); contextMenu.Items.Add(revealMenuItem); var fileIndex = results[0].DemoInputIndex; var demo = demos[(int)fileIndex]; var fileName = Path.GetFileNameWithoutExtension(demo.FilePath); var matches = results.Count.ToString(); var patterns = FormatPatterns(patternBits); var cutResult = new SearchResultFileDisplayInfo(fileName, matches, patterns, fileIndex, demo); var fileItem = new ListViewItem(); fileItem.Content = cutResult; fileItem.ContextMenu = contextMenu; _fileResultsListView.Items.Add(fileItem); }
public void UpdateResults(List <UDT_DLL.udtPatternMatch> results, List <DemoInfo> demos) { _cutResultsListView.Items.Clear(); _fileResultsListView.Items.Clear(); results.Sort((a, b) => a.StartTimeMs.CompareTo(b.StartTimeMs)); results.StableSort((a, b) => a.GameStateIndex.CompareTo(b.GameStateIndex)); results.StableSort((a, b) => a.DemoInputIndex.CompareTo(b.DemoInputIndex)); _results = results; _resultDemos = demos; foreach (var result in results) { var index = result.DemoInputIndex; if (index >= demos.Count) { continue; } var copyMenuItem = new MenuItem(); copyMenuItem.Header = App.CreateContextMenuHeader("Copy to Clipboard", "(Ctrl+C)"); copyMenuItem.Command = _cutCopyCommand.RoutedCommand; var cutMenuItem = new MenuItem(); cutMenuItem.Header = "Apply Cut(s)"; cutMenuItem.Command = _cutCutCommand.RoutedCommand; var revealMenuItem = new MenuItem(); revealMenuItem.Header = "Reveal in File Explorer"; revealMenuItem.Command = _cutRevealCommand.RoutedCommand; var selectMenuItem = new MenuItem(); selectMenuItem.Header = "Select in Demo List"; selectMenuItem.Command = _cutSelectCommand.RoutedCommand; var contextMenu = new ContextMenu(); contextMenu.Items.Add(copyMenuItem); contextMenu.Items.Add(selectMenuItem); contextMenu.Items.Add(cutMenuItem); contextMenu.Items.Add(new Separator()); contextMenu.Items.Add(revealMenuItem); var demo = demos[(int)index]; var fileName = Path.GetFileNameWithoutExtension(demo.FilePath); var gs = result.GameStateIndex.ToString(); var start = App.FormatMinutesSeconds(result.StartTimeMs / 1000); var end = App.FormatMinutesSeconds(result.EndTimeMs / 1000); var patterns = FormatPatterns(result.Patterns); var cutResult = new SearchResultCutDisplayInfo(fileName, gs, start, end, patterns, result, demo); var cutItem = new ListViewItem(); cutItem.Content = cutResult; cutItem.ContextMenu = contextMenu; _cutResultsListView.Items.Add(cutItem); } uint currentFileIndex = uint.MaxValue; var fileResults = new List <UDT_DLL.udtPatternMatch>(); foreach (var result in results) { var index = result.DemoInputIndex; if (index >= demos.Count) { continue; } if (currentFileIndex != index) { if (fileResults.Count > 0) { AddSingleFileResult(fileResults, demos); fileResults.Clear(); } } fileResults.Add(result); currentFileIndex = index; } if (fileResults.Count > 0) { AddSingleFileResult(fileResults, demos); } var cutCount = _cutResultsListView.Items.Count; var fileCount = _fileResultsListView.Items.Count; _resultsTextBlock.Text = string.Format("Found {0} match{1} in {2} demo file{3}.", cutCount, cutCount > 1 ? "es" : "", fileCount, fileCount > 1 ? "s" : ""); var fileMode = _displayFilesRadioButton.IsChecked ?? false; if (fileMode) { OnFileModeChecked(); } else { OnCutModeChecked(); } }