Browse Source

add group by project and file in SearchResults

pull/59/merge
Siegfried Pammer 12 years ago
parent
commit
d549367395
  1. 5
      src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs
  2. 5
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchFileNode.cs
  3. 23
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs

5
src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs

@ -82,10 +82,15 @@ namespace SearchAndReplace
perProjectItem.SetValueToExtension(MenuItem.HeaderProperty, new LocalizeExtension("MainWindow.Windows.SearchResultPanel.PerProject")); perProjectItem.SetValueToExtension(MenuItem.HeaderProperty, new LocalizeExtension("MainWindow.Windows.SearchResultPanel.PerProject"));
perProjectItem.Click += delegate { SetResultGrouping(SearchResultGroupingKind.PerProject); }; perProjectItem.Click += delegate { SetResultGrouping(SearchResultGroupingKind.PerProject); };
MenuItem perProjectAndFileItem = new MenuItem();
perProjectAndFileItem.SetValueToExtension(MenuItem.HeaderProperty, new LocalizeExtension("MainWindow.Windows.SearchResultPanel.PerProjectAndFile"));
perProjectAndFileItem.Click += delegate { SetResultGrouping(SearchResultGroupingKind.PerProjectAndFile); };
perFileDropDown.DropDownMenu = new ContextMenu(); perFileDropDown.DropDownMenu = new ContextMenu();
perFileDropDown.DropDownMenu.Items.Add(flatItem); perFileDropDown.DropDownMenu.Items.Add(flatItem);
perFileDropDown.DropDownMenu.Items.Add(perFileItem); perFileDropDown.DropDownMenu.Items.Add(perFileItem);
perFileDropDown.DropDownMenu.Items.Add(perProjectItem); perFileDropDown.DropDownMenu.Items.Add(perProjectItem);
perFileDropDown.DropDownMenu.Items.Add(perProjectAndFileItem);
toolbarItems.Add(perFileDropDown); toolbarItems.Add(perFileDropDown);
toolbarItems.Add(new Separator()); toolbarItems.Add(new Separator());

5
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchFileNode.cs

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Documents; using System.Windows.Documents;
@ -16,7 +17,7 @@ namespace SearchAndReplace
{ {
public FileName FileName { get; private set; } public FileName FileName { get; private set; }
public SearchFileNode(FileName fileName, System.Collections.Generic.List<SearchResultNode> resultNodes) public SearchFileNode(FileName fileName, IList<SearchResultNode> resultNodes)
{ {
this.FileName = fileName; this.FileName = fileName;
this.Children = resultNodes; this.Children = resultNodes;
@ -43,7 +44,7 @@ namespace SearchAndReplace
{ {
public IProject Project { get; private set; } public IProject Project { get; private set; }
public SearchProjectNode(IProject project, System.Collections.Generic.List<SearchResultNode> resultNodes) public SearchProjectNode(IProject project, IList<SearchNode> resultNodes)
{ {
this.Project = project; this.Project = project;
this.Children = resultNodes; this.Children = resultNodes;

23
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs

@ -18,7 +18,7 @@ namespace SearchAndReplace
ObservableCollection<SearchResultNode> resultNodes; ObservableCollection<SearchResultNode> resultNodes;
ObservableCollection<SearchFileNode> fileNodes; ObservableCollection<SearchFileNode> fileNodes;
ObservableCollection<SearchProjectNode> projectNodes; ObservableCollection<SearchProjectNode> projectNodes;
ObservableCollection<SearchFileNode> projectAndFileNodes; ObservableCollection<SearchProjectNode> projectAndFileNodes;
public string Title { get; private set; } public string Title { get; private set; }
public bool WasCancelled { get; set; } public bool WasCancelled { get; set; }
@ -33,7 +33,11 @@ namespace SearchAndReplace
); );
this.projectNodes = new ObservableCollection<SearchProjectNode>( this.projectNodes = new ObservableCollection<SearchProjectNode>(
resultNodes.GroupBy(r => SD.ProjectService.FindProjectContainingFile(r.FileName)) resultNodes.GroupBy(r => SD.ProjectService.FindProjectContainingFile(r.FileName))
.Select(g => new SearchProjectNode(g.Key, g.ToList())) .Select(g => new SearchProjectNode(g.Key, g.OfType<SearchNode>().ToList()))
);
this.projectAndFileNodes = new ObservableCollection<SearchProjectNode>(
resultNodes.GroupBy(r => SD.ProjectService.FindProjectContainingFile(r.FileName))
.Select(g => new SearchProjectNode(g.Key, g.GroupBy(r => r.FileName).Select(g2 => new SearchFileNode(g2.Key, g2.ToList())).OfType<SearchNode>().ToList()))
); );
this.IsExpanded = true; this.IsExpanded = true;
} }
@ -45,11 +49,24 @@ namespace SearchAndReplace
this.fileNodes.Add(new SearchFileNode(searchedFile.FileName, results)); this.fileNodes.Add(new SearchFileNode(searchedFile.FileName, results));
foreach (var g in results.GroupBy(r => SD.ProjectService.FindProjectContainingFile(r.FileName))) { foreach (var g in results.GroupBy(r => SD.ProjectService.FindProjectContainingFile(r.FileName))) {
var p = projectNodes.FirstOrDefault(n => n.Project == g.Key); var p = projectNodes.FirstOrDefault(n => n.Project == g.Key);
var p2 = projectAndFileNodes.FirstOrDefault(n => n.Project == g.Key);
if (p == null) { if (p == null) {
projectNodes.Add(new SearchProjectNode(g.Key, g.ToList())); projectNodes.Add(new SearchProjectNode(g.Key, g.OfType<SearchNode>().ToList()));
} else { } else {
p.Children = new List<SearchNode>(p.Children.Concat(g.AsEnumerable())); p.Children = new List<SearchNode>(p.Children.Concat(g.AsEnumerable()));
} }
if (p2 == null) {
projectAndFileNodes.Add(new SearchProjectNode(g.Key, g.GroupBy(r => r.FileName).Select(g2 => new SearchFileNode(g2.Key, g2.ToList())).OfType<SearchNode>().ToList()));
} else {
var f = p2.Children.OfType<SearchFileNode>().FirstOrDefault(n => n.FileName == searchedFile.FileName);
if (f == null) {
var list = new List<SearchNode>(p2.Children);
list.Add(new SearchFileNode(searchedFile.FileName, g.ToList()));
p2.Children = list;
} else {
f.Children = new List<SearchNode>(f.Children.Concat(g.AsEnumerable()));
}
}
} }
InvalidateText(); InvalidateText();
} }

Loading…
Cancel
Save