/// <summary> /// Start the searching /// </summary> /// <param name="searchWithInResults">true for searching within current results, false starts a new search</param> /// <history> /// [Curtis_Beard] 10/17/2005 Created /// [Curtis_Beard] 07/03/2006 FIX: 1516775, Remove trim on the search expression /// [Curtis_Beard] 07/12/2006 CHG: moved thread actions to grep class /// [Curtis_Beard] 11/22/2006 CHG: Remove use of browse in combobox /// [Curtis_Beard] 08/07/2007 ADD: 1741735, better search error handling /// [Curtis_Beard] 08/21/2007 FIX: 1778467, make sure file pattern is correct if a '\' is present /// [Curtis_Beard] 01/31/2012 CHG: 3424154/1816655, allow multiple starting directories /// [Curtis_Beard] 02/07/2012 CHG: 1741735, report full error message /// [Curtis_Beard] 02/24/2012 CHG: 3488322, use hand cursor for results view to signal click /// [Curtis_Beard] 10/30/2012 ADD: 28, search within results /// [Curtis_Beard] 12/01/2014 ADD: support for encoding detection event /// [Curtis_Beard] 12/17/2014 ADD: support for Win7+ taskbar progress /// [Curtis_Beard] 02/24/2015 CHG: remove isSearching check so that you can view selected file during a search /// [Curtis_Beard] 05/26/2015 CHG: add stop search messsage to log with time /// </history> private void StartSearch(bool searchWithInResults) { try { string path = cboFilePath.Text.Trim(); string[] filePaths = null; if (searchWithInResults) { // get currently listed file paths from ListView filePaths = new string[lstFileNames.Items.Count]; for (int i = 0; i < lstFileNames.Items.Count; i++) { filePaths[i] = Path.Combine(lstFileNames.Items[i].SubItems[Constants.COLUMN_INDEX_DIRECTORY].Text, lstFileNames.Items[i].SubItems[Constants.COLUMN_INDEX_FILE].Text); } } // update combo selections AddComboSelection(cboSearchForText, cboSearchForText.Text); AddComboSelection(cboFileName, cboFileName.Text); AddComboSelection(cboFilePath, path); SetWindowText(); // disable gui SetSearchState(false); // reset display LogItems.Clear(); SetStatusBarMessage(string.Empty); SetStatusBarEncoding(string.Empty); SetStatusBarTotalCount(0); SetStatusBarFileCount(0); SetStatusBarFilterCount(0); SetStatusBarErrorCount(0); ClearItems(); txtHits.LineNumbers = null; txtHits.Clear(); // setup structs to pass to grep var fileFilterSpec = GetFilterSpecFromUI(); var searchSpec = GetSearchSpecFromUI(path, fileFilterSpec.FileFilter, filePaths); // create new grep instance __Grep = new Grep(searchSpec, fileFilterSpec); // add plugins __Grep.Plugins = Core.PluginManager.Items; // attach events __Grep.FileHit += ReceiveFileHit; __Grep.LineHit += ReceiveLineHit; __Grep.SearchCancel += ReceiveSearchCancel; __Grep.SearchComplete += ReceiveSearchComplete; __Grep.SearchError += ReceiveSearchError; __Grep.SearchingFile += ReceiveSearchingFile; __Grep.FileFiltered += ReceiveFileFiltered; __Grep.DirectoryFiltered += ReceiveDirectoryFiltered; __Grep.SearchingFileByPlugin += ReceiveSearchingFileByPlugin; __Grep.FileEncodingDetected += ReceiveFileEncodingDetected; API.TaskbarProgress.SetState(this.Handle, API.TaskbarProgress.TaskbarStates.Indeterminate); LogItems.Add(new LogItem(LogItem.LogItemTypes.Status, "SearchStarted")); LogStartSearchMessage(searchSpec, fileFilterSpec); StartingTime = Stopwatch.GetTimestamp(); __Grep.BeginExecute(); } catch (Exception ex) { LogStopSearchMessage("error"); RestoreTaskBarProgress(); LogItems.Add(new LogItem(LogItem.LogItemTypes.Error, "SearchGenericError", string.Format("{0}||{1}", string.Empty, ex.Message))); LogClient.Instance.Logger.Error("Unhandled search error: {0}", LogClient.GetAllExceptions(ex)); string message = string.Format(Language.GetGenericText("SearchGenericError"), ex.Message); MessageBox.Show(this, message, ProductInformation.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Error); SetStatusBarMessage(message); SetSearchState(true); CalculateTotalCount(); } }