public void SuggestUsing(SuggestionBase suggestion)
        {
            if (suggestion == null)
            {
                throw new ArgumentNullException(nameof(suggestion));
            }

            AssertCanSuggest();

            SuggestToken token;

            switch (suggestion)
            {
            case SuggestionWithTerm term:
                token = SuggestToken.Create(term.Field, AddQueryParameter(term.Term), GetOptionsParameterName(term.Options));
                break;

            case SuggestionWithTerms terms:
                token = SuggestToken.Create(terms.Field, AddQueryParameter(terms.Terms), GetOptionsParameterName(terms.Options));
                break;

            default:
                throw new NotSupportedException($"Unknown type of suggestion '{suggestion.GetType()}'");
            }

            SelectTokens.AddLast(token);
        }
        private void AssertCanSuggest(SuggestionBase suggestion)
        {
            if (WhereTokens.Count > 0)
            {
                throw new InvalidOperationException("Cannot add suggest when WHERE statements are present.");
            }

            if (SelectTokens.Count > 0)
            {
                if (SelectTokens.Last.Value is SuggestToken st)
                {
                    if (st.FieldName == suggestion.Field)
                    {
                        throw new InvalidOperationException("Cannot add suggest for the same field again.");
                    }
                }
                else
                {
                    throw new InvalidOperationException("Cannot add suggest when SELECT statements are present.");
                }
            }

            if (OrderByTokens.Count > 0)
            {
                throw new InvalidOperationException("Cannot add suggest when ORDER BY statements are present.");
            }
        }
        void CreateMenuItems(RichEditPopupMenu menu, DocumentRange range, string word)
        {
            SuggestionCollection suggestions = this.spellChecker1.GetSuggestions(word);
            int count = suggestions.Count;

            if (count > 0)
            {
                int lastIndex = Math.Min(count - 1, 5);
                for (int i = lastIndex; i >= 0; i--)
                {
                    SuggestionBase     suggestion = suggestions[i];
                    SuggestionMenuItem item       =
                        new SuggestionMenuItem(rtControl.Document, suggestion.Suggestion, range);
                    menu.Items.Insert(0, item);
                }
            }
            else
            {
                DXMenuItem emptyItem = new DXMenuItem("no spelling suggestions");
                emptyItem.Enabled = false;
                menu.Items.Insert(0, emptyItem);
            }
        }
 IAsyncSuggestionDocumentQuery <T> IAsyncDocumentQuery <T> .SuggestUsing(SuggestionBase suggestion)
 {
     SuggestUsing(suggestion);
     return(new AsyncSuggestionDocumentQuery <T>(this));
 }