Browse Source

Cancel currently running search when a new search is started.

pull/297/head
Daniel Grunwald 12 years ago
parent
commit
99d94fdfd3
  1. 6
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
  2. 9
      src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs
  3. 7
      src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs
  4. 12
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs
  5. 6
      src/Main/Base/Project/Editor/Search/ISearchResult.cs
  6. 15
      src/Main/Base/Project/Editor/Search/SearchResultsPad.cs

6
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs

@ -78,7 +78,13 @@ namespace CSharpBinding
CancellationToken = cancellationToken CancellationToken = cancellationToken
}, },
delegate (string fileName) { delegate (string fileName) {
try {
FindReferencesInFile(args, searchScope, FileName.Create(fileName), callback, cancellationToken); FindReferencesInFile(args, searchScope, FileName.Create(fileName), callback, cancellationToken);
} catch (OperationCanceledException) {
throw;
} catch (Exception ex) {
throw new ApplicationException("Error searching in file '" + fileName + "'", ex);
}
lock (progressLock) lock (progressLock)
args.ProgressMonitor.Progress += workAmountInverse; args.ProgressMonitor.Progress += workAmountInverse;
}); });

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

@ -54,7 +54,11 @@ namespace SearchAndReplace
return resultsTreeViewInstance; return resultsTreeViewInstance;
} }
static IList toolbarItems; public virtual void OnDeactivate()
{
}
static IList<object> toolbarItems;
public virtual IList GetToolbarItems() public virtual IList GetToolbarItems()
{ {
@ -122,7 +126,8 @@ namespace SearchAndReplace
collapseAll.Click += delegate { ExpandCollapseAll(false); }; collapseAll.Click += delegate { ExpandCollapseAll(false); };
toolbarItems.Add(collapseAll); toolbarItems.Add(collapseAll);
} }
return toolbarItems; // Copy the list to avoid modifications to the static list
return new List<object>(toolbarItems);
} }
static void SetCheckedItem(MenuItem newTarget, ContextMenu menu) static void SetCheckedItem(MenuItem newTarget, ContextMenu menu)

7
src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs

@ -37,6 +37,13 @@ namespace SearchAndReplace
return resultsTreeViewInstance; return resultsTreeViewInstance;
} }
public override void OnDeactivate()
{
if (!finished)
StopButtonClick(null, null);
base.OnDeactivate();
}
public override IList GetToolbarItems() public override IList GetToolbarItems()
{ {
var items = base.GetToolbarItems(); var items = base.GetToolbarItems();

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

@ -19,9 +19,19 @@ namespace SearchAndReplace
ObservableCollection<SearchFileNode> fileNodes; ObservableCollection<SearchFileNode> fileNodes;
ObservableCollection<SearchProjectNode> projectNodes; ObservableCollection<SearchProjectNode> projectNodes;
ObservableCollection<SearchProjectNode> projectAndFileNodes; ObservableCollection<SearchProjectNode> projectAndFileNodes;
bool wasCancelled;
public string Title { get; private set; } public string Title { get; private set; }
public bool WasCancelled { get; set; }
public bool WasCancelled {
get {
return wasCancelled;
}
set {
wasCancelled = value;
InvalidateText();
}
}
public SearchRootNode(string title, IList<SearchResultMatch> results) public SearchRootNode(string title, IList<SearchResultMatch> results)
{ {

6
src/Main/Base/Project/Editor/Search/ISearchResult.cs

@ -26,6 +26,12 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
/// </summary> /// </summary>
object GetControl(); object GetControl();
/// <summary>
/// Notifies the search that it is no longer active (another search result will be activated in the search results pad).
/// GetControl() will be called if the search result is activated again.
/// </summary>
void OnDeactivate();
/// <summary> /// <summary>
/// Gets the items for the toolbar that are visible only for this search result. /// Gets the items for the toolbar that are visible only for this search result.
/// </summary> /// </summary>

15
src/Main/Base/Project/Editor/Search/SearchResultsPad.cs

@ -66,6 +66,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
} }
} }
ISearchResult activeSearchResult;
List<ISearchResult> lastSearches = new List<ISearchResult>(); List<ISearchResult> lastSearches = new List<ISearchResult>();
public IEnumerable<ISearchResult> LastSearches { public IEnumerable<ISearchResult> LastSearches {
@ -75,6 +76,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public void ClearLastSearchesList() public void ClearLastSearchesList()
{ {
lastSearches.Clear(); lastSearches.Clear();
if (activeSearchResult != null) {
activeSearchResult.OnDeactivate();
activeSearchResult = null;
}
SD.WinForms.SetContent(contentPlaceholder, null); SD.WinForms.SetContent(contentPlaceholder, null);
} }
@ -95,6 +100,12 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
while (lastSearches.Count > 15) while (lastSearches.Count > 15)
lastSearches.RemoveAt(15); lastSearches.RemoveAt(15);
if (activeSearchResult != result) {
if (activeSearchResult != null) {
activeSearchResult.OnDeactivate();
}
activeSearchResult = result;
}
SD.WinForms.SetContent(contentPlaceholder, result.GetControl()); SD.WinForms.SetContent(contentPlaceholder, result.GetControl());
toolBar.Items.Clear(); toolBar.Items.Clear();
@ -206,6 +217,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
{ {
return null; return null;
} }
public void OnDeactivate()
{
}
} }
} }
} }

Loading…
Cancel
Save