File: Core\CSharp\System\Windows\Input\InputMethodStateTypeInfo.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
//---------------------------------------------------------------------------
//
// <copyright file=InputMethodStateTypeInfo.cs company=Microsoft>
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// 
// Description: The information for the compartments.
//
// History:  
//  07/30/2003 : yutakas - Ported from .net tree.
//
//---------------------------------------------------------------------------
 
using System.Runtime.InteropServices;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.Security.Permissions;
using System.Windows.Threading;
using System.Windows;
using MS.Internal; //TextServicesInterop
using MS.Utility;
using MS.Win32;
 
using System;
 
namespace System.Windows.Input 
{
    //------------------------------------------------------
    //
    //  InputMethodStateType enum
    //
    //------------------------------------------------------
 
    /// <summary>
    /// This is an internal.
    /// This enum identifies the type of input method event.
    /// </summary>
    internal enum InputMethodStateType
    {
        Invalid,
        ImeState,
        MicrophoneState,
        HandwritingState,
        SpeechMode,
        ImeConversionModeValues,
        ImeSentenceModeValues,
    }
 
    internal enum CompartmentScope
    {
        Invalid,
        Thread,
        Global,
    }
 
    //------------------------------------------------------
    //
    //  InputMethodEventTypeInfo class
    //
    //------------------------------------------------------
 
    /// <summary>
    /// This is an internal.
    /// This is a holder of compartment type information.
    /// </summary>
    internal class InputMethodEventTypeInfo
    {
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------
 
        internal InputMethodEventTypeInfo(
                                 InputMethodStateType type, 
                                 Guid guid, 
                                 CompartmentScope scope)
        {
            _inputmethodstatetype = type;
            _guid = guid;
            _scope = scope;
        }
 
        //------------------------------------------------------
        //
        //  Internal Methods
        //
        //------------------------------------------------------
        
        #region Internal Methods
 
        /// <summary>
        ///    This converts from GUID for ITfCompartment to InputMethodStateType.
        /// </summary>
        internal static InputMethodStateType ToType(ref Guid rguid)
        {
             for (int i = 0; i < _iminfo.Length; i++)
             {
                 InputMethodEventTypeInfo im = _iminfo[i];
 
                 if (rguid == im._guid)
                     return im._inputmethodstatetype;
             }
 
             Debug.Assert(false, "The guid does not match.");
             return InputMethodStateType.Invalid;
        }
 
        #endregion Internal Methods
 
        //------------------------------------------------------
        //
        //  Internal Properties
        //
        //------------------------------------------------------
        
        #region Internal Properties
 
        internal InputMethodStateType Type {get{return _inputmethodstatetype;}}
        internal Guid Guid {get{return _guid;}}
        internal CompartmentScope Scope {get{return _scope;}}
        internal static InputMethodEventTypeInfo[] InfoList {get{return _iminfo;}}
 
        #endregion Internal Properties
 
        //------------------------------------------------------
        //
        //  Private Fields
        //
        //------------------------------------------------------
                
        #region Private Fields
 
        private static readonly InputMethodEventTypeInfo _iminfoImeState = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.ImeState,
                     UnsafeNativeMethods.GUID_COMPARTMENT_KEYBOARD_OPENCLOSE,
                     CompartmentScope.Thread);
 
        private static readonly InputMethodEventTypeInfo _iminfoHandwritingState = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.HandwritingState,
                     UnsafeNativeMethods.GUID_COMPARTMENT_HANDWRITING_OPENCLOSE,
                     CompartmentScope.Thread);
 
        private static readonly InputMethodEventTypeInfo _iminfoMicrophoneState = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.MicrophoneState,
                     UnsafeNativeMethods.GUID_COMPARTMENT_SPEECH_OPENCLOSE,
                     CompartmentScope.Global);
 
        private static readonly InputMethodEventTypeInfo _iminfoSpeechMode = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.SpeechMode,
                     UnsafeNativeMethods.GUID_COMPARTMENT_SPEECH_GLOBALSTATE,
                     CompartmentScope.Global);
 
        private static readonly InputMethodEventTypeInfo _iminfoImeConversionMode = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.ImeConversionModeValues,
                     UnsafeNativeMethods.GUID_COMPARTMENT_KEYBOARD_INPUTMODE_CONVERSION,
                     CompartmentScope.Thread);
 
        private static readonly InputMethodEventTypeInfo _iminfoImeSentenceMode = 
             new InputMethodEventTypeInfo(
                     InputMethodStateType.ImeSentenceModeValues,
                     UnsafeNativeMethods.GUID_COMPARTMENT_KEYBOARD_INPUTMODE_SENTENCE,
                     CompartmentScope.Thread);
 
        private static readonly InputMethodEventTypeInfo[] _iminfo = 
            new InputMethodEventTypeInfo[] {
                    _iminfoImeState, 
                    _iminfoHandwritingState, 
                    _iminfoMicrophoneState, 
                    _iminfoSpeechMode,
                    _iminfoImeConversionMode,
                    _iminfoImeSentenceMode};
 
        private InputMethodStateType _inputmethodstatetype;
        private Guid _guid;
        private CompartmentScope _scope;
 
        #endregion Private Fields
 
    }
}