aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Speech/ISpeechProvider.cs
blob: eb31bdc39e7b7fd0236e69e509874ead8e3ffc85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tango.MachineStudio.Common.Speech
{
    /// <summary>
    /// Represents a text to speech engine.
    /// </summary>
    public interface ISpeechProvider
    {
        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="ISpeechProvider"/> is mute.
        /// </summary>
        bool Mute { get; set; }

        /// <summary>
        /// Speaks the specified text associated with an information sound.
        /// </summary>
        /// <param name="text">The text.</param>
        void SpeakInfo(String text);

        /// <summary>
        /// Speaks the specified text associated with an error sound.
        /// </summary>
        /// <param name="text">The text.</param>
        void SpeakError(String text);
    }
}
> /// AbstractMargin derives from FrameworkElement, so if you don't want to handle visual children and rendering /// on your own, choose another base class for your margin! /// </summary> public abstract class AbstractMargin : FrameworkElement, ITextViewConnect { /// <summary> /// TextView property. /// </summary> public static readonly DependencyProperty TextViewProperty = DependencyProperty.Register("TextView", typeof(TextView), typeof(AbstractMargin), new FrameworkPropertyMetadata(OnTextViewChanged)); /// <summary> /// Gets/sets the text view for which line numbers are displayed. /// </summary> /// <remarks>Adding a margin to <see cref="TextArea.LeftMargins"/> will automatically set this property to the text area's TextView.</remarks> public TextView TextView { get { return (TextView)GetValue(TextViewProperty); } set { SetValue(TextViewProperty, value); } } static void OnTextViewChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e) { AbstractMargin margin = (AbstractMargin)dp; margin.wasAutoAddedToTextView = false; margin.OnTextViewChanged((TextView)e.OldValue, (TextView)e.NewValue); } // automatically set/unset TextView property using ITextViewConnect bool wasAutoAddedToTextView; void ITextViewConnect.AddToTextView(TextView textView) { if (this.TextView == null) { this.TextView = textView; wasAutoAddedToTextView = true; } else if (this.TextView != textView) { throw new InvalidOperationException("This margin belongs to a different TextView."); } } void ITextViewConnect.RemoveFromTextView(TextView textView) { if (wasAutoAddedToTextView && this.TextView == textView) { this.TextView = null; Debug.Assert(!wasAutoAddedToTextView); // setting this.TextView should have unset this flag } } TextDocument document; /// <summary> /// Gets the document associated with the margin. /// </summary> public TextDocument Document { get { return document; } } /// <summary> /// Called when the <see cref="TextView"/> is changing. /// </summary> protected virtual void OnTextViewChanged(TextView oldTextView, TextView newTextView) { if (oldTextView != null) { oldTextView.DocumentChanged -= TextViewDocumentChanged; } if (newTextView != null) { newTextView.DocumentChanged += TextViewDocumentChanged; } TextViewDocumentChanged(null, null); } void TextViewDocumentChanged(object sender, EventArgs e) { OnDocumentChanged(document, TextView != null ? TextView.Document : null); } /// <summary> /// Called when the <see cref="Document"/> is changing. /// </summary> protected virtual void OnDocumentChanged(TextDocument oldDocument, TextDocument newDocument) { document = newDocument; } } }