File: src\Framework\System\Windows\Documents\SpellerError.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
//---------------------------------------------------------------------------
//
// File: SpellerError.cs
//
// Description: A misspelled word in a TextBox or RichTextBox.
//
//---------------------------------------------------------------------------
 
namespace System.Windows.Controls
{
    using System.Collections;
    using System.Collections.Generic;
    using System.Windows.Documents;
    using MS.Internal;
 
    /// <summary>
    /// A misspelled word in a TextBox or RichTextBox.
    /// </summary>
    public class SpellingError
    {
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------
 
        #region Constructors
 
        // Creates a new instance.
        internal SpellingError(Speller speller, ITextPointer start, ITextPointer end)
        {
            Invariant.Assert(start.CompareTo(end) < 0);
 
            _speller = speller;
            _start = start.GetFrozenPointer(LogicalDirection.Forward);
            _end = end.GetFrozenPointer(LogicalDirection.Backward);
        }
 
        #endregion Constructors
 
        //------------------------------------------------------
        //
        //  Public Methods
        //
        //------------------------------------------------------
 
        #region Public Methods
 
        /// <summary>
        /// Replaces the spelling error text with a specificed correction.
        /// </summary>
        /// <param name="correctedText">
        /// Text to replace the error.
        /// </param>
        /// <remarks>
        /// This method repositions the caret to the position immediately
        /// following the corrected text.
        /// </remarks>
        public void Correct(string correctedText)
        {
            if (correctedText == null)
            {
                correctedText = String.Empty; // Parity with TextBox.Text.
            }
 
            ITextRange range = new TextRange(_start, _end);
            range.Text = correctedText;
        }
 
        /// <summary>
        /// Instructs the control to ignore this error and any duplicates for
        /// the remainder of its lifetime.
        /// </summary>
        public void IgnoreAll()
        {
            _speller.IgnoreAll(TextRangeBase.GetTextInternal(_start, _end));
        }
 
        #endregion Public methods
 
        //------------------------------------------------------
        //
        //  Public Properties
        //
        //------------------------------------------------------
 
        #region Public Properties
 
        /// <summary>
        /// A list of suggested replaced for the misspelled text.
        /// </summary>
        /// <remarks>
        /// May be empty, meaning no suggestions are available.
        /// </remarks>
        public IEnumerable<string> Suggestions
        {
            get
            {
                IList suggestions = _speller.GetSuggestionsForError(this);
 
                for (int i=0; i<suggestions.Count; i++)
                {
                    yield return (string)suggestions[i];
                }
            }
        }
 
        #endregion Public Properties
 
        //------------------------------------------------------
        //
        //  Internal Properties
        //
        //------------------------------------------------------
 
        #region Internal Properties
 
        /// <summary>
        /// Start position of the misspelled text.
        /// </summary>
        internal ITextPointer Start
        {
            get
            {
                return _start;
            }
        }
 
        /// <summary>
        /// End position of the misspelled text.
        /// </summary>
        internal ITextPointer End
        {
            get
            {
                return _end;
            }
        }
 
        #endregion Internal Properties
 
        //------------------------------------------------------
        //
        //  Private Fields
        //
        //------------------------------------------------------
 
        #region Private Fields
 
        // Speller associated with this error.
        private readonly Speller _speller;
 
        // Start position of the error text.
        private readonly ITextPointer _start;
 
        // End position of the error text.
        private readonly ITextPointer _end;
 
        #endregion Private Fields
    }
}