/// <summary>
        /// When the text in the editTextBox changes, fire off the query to populate the statement completion popup.
        /// </summary>
        private void DoStatementCompletion()
        {
            if (DisableCompletion)
            {
                return;
            }

            String searchText = TextBox.Text;

            if (searchText.Length == 0)
            {
                HideStatementCompletionForm();
                return;
            }
            if (_proteinMatcherLast != null)
            {
                //if (_proteinMatcherLast.Settings.SearchText == searchText)
                //{
                //    // Query is already executing for the text that the user typed: no work to do now.
                //    return;
                //}
                if (searchText.StartsWith(_proteinMatcherLast.Settings.SearchText))
                {
                    // If the new text is just longer than the previous text, see if we can just refine the results
                    // of the previous query.
                    var results    = _proteinMatcherLast.GetMatches();
                    var newResults = new List <ProteinMatch>();
                    if (results != null)
                    {
                        var oldSettings = _proteinMatcherLast.Settings;
                        var newSettings = new ProteinMatchSettings(oldSettings.ProteomeDbPath, oldSettings.Protease, MatchTypes, searchText);
                        newResults.AddRange(RefineMatches(results, newSettings));
                    }
                    if (newResults.Count == 0)
                    {
                        // Nothing from the previous query matches: hide the statement completion form.
                        HideStatementCompletionForm();
                        _proteinMatcherLast = null;
                    }
                    else
                    {
                        // Display the refined results: we'll still fire off another query to see if we get better results.
                        DisplayResultsNow(newResults, _proteinMatcherLast.MaxResults);
                    }
                }
            }

            if (_proteinMatcher != null)
            {
                _proteinMatcher.Cancel();
                _proteinMatcher = null;
            }
            var settings = CreateProteinMatchSettings(_documentUiContainer.DocumentUI, MatchTypes, searchText);

            if (settings != null)
            {
                _proteinMatcher = new ProteinMatchQuery(settings);
                _proteinMatcher.BeginExecute(DisplayResults);
            }
        }
 /// <summary>
 /// Updates the StatementCompletion popup to show the list of matching results.
 /// </summary>
 private void DisplayResultsNow(ProteinMatchQuery proteinMatchQuery)
 {
     if (proteinMatchQuery != _proteinMatcher)
     {
         return;
     }
     DisplayResultsNow(proteinMatchQuery.GetMatches(), proteinMatchQuery.MaxResults);
     _proteinMatcherLast = proteinMatchQuery;
 }