206 lines
7.9 KiB
C
206 lines
7.9 KiB
C
|
/*******************************************************************************
|
||
|
* SRDlg.h *
|
||
|
*------------*
|
||
|
* Description:
|
||
|
* This is the header file for the default voice dialog.
|
||
|
*-------------------------------------------------------------------------------
|
||
|
* Created By: MIKEAR Date: 11/17/98
|
||
|
* Copyright (C) 1998 Microsoft Corporation
|
||
|
* All Rights Reserved
|
||
|
*
|
||
|
*-------------------------------------------------------------------------------
|
||
|
* Revisions:
|
||
|
* BRENTMID 11/29/1999 - Redesigned UI to match functional spec.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
#ifndef _SRDlg_h
|
||
|
#define _SRDlg_h
|
||
|
|
||
|
#include "audiodlg.h"
|
||
|
|
||
|
// External Declarations
|
||
|
class CEnvrDlg;
|
||
|
class CEnvrPropDlg;
|
||
|
#define IDH_NOHELP -1
|
||
|
#define CPL_HELPFILE L"sapicpl.hlp"
|
||
|
#define WM_RECOEVENT WM_APP // Window message used for recognition events
|
||
|
|
||
|
// Constant Declarations
|
||
|
const int iMaxColLength_c = 255;
|
||
|
const int iMaxAddedProfiles_c = 100; // maximum number of profiles a user can add
|
||
|
// in one session
|
||
|
const int iMaxDeletedProfiles_c = 100; // maximum number of profiles a user can delete
|
||
|
// and rollback in one session
|
||
|
// Typedefs
|
||
|
typedef enum EPD_RETURN_VALUE
|
||
|
{
|
||
|
EPD_OK,
|
||
|
EPD_DUP,
|
||
|
EPD_EMPTY_NAME,
|
||
|
EPD_FAILED
|
||
|
} EPD_RETURN_VALUE;
|
||
|
|
||
|
|
||
|
typedef enum SRDLGUPDATEFLAGS
|
||
|
{
|
||
|
SRDLGF_RECOGNIZER = 0x01,
|
||
|
SRDLGF_AUDIOINPUT = 0x02,
|
||
|
SRDLGF_ALL =0x03
|
||
|
} SRDLGUPDATEFLAGS;
|
||
|
|
||
|
|
||
|
// Class Declarations
|
||
|
class CSRDlg
|
||
|
{
|
||
|
private:
|
||
|
|
||
|
HACCEL m_hAccelTable;
|
||
|
HWND m_hDlg;
|
||
|
HWND m_hSRCombo; // engine selection combobox
|
||
|
HWND m_hUserList; // user selection window
|
||
|
BOOL m_fDontDelete;
|
||
|
BOOL m_bInitEngine; // has the default engine been initialized
|
||
|
BOOL m_bPreferredDevice;
|
||
|
|
||
|
CComPtr<ISpRecognizer> m_cpRecoEngine;
|
||
|
CComPtr<ISpRecoContext> m_cpRecoCtxt; // Recognition context
|
||
|
CAudioDlg *m_pAudioDlg;
|
||
|
ISpObjectToken *m_pCurRecoToken; // holds the token for the currently selected engine
|
||
|
CSpDynamicString m_dstrOldUserTokenId;
|
||
|
// the original user token ID - need to revert to this on Cancel
|
||
|
|
||
|
ISpObjectToken* m_aDeletedTokens[iMaxDeletedProfiles_c];
|
||
|
// array holding the tokens
|
||
|
int m_iDeletedTokens; // holds the number of currently deleted tokens
|
||
|
|
||
|
CSpDynamicString m_aAddedTokens[ iMaxAddedProfiles_c ];
|
||
|
int m_iAddedTokens;
|
||
|
|
||
|
int m_iLastSelected; // index of the previously selected item
|
||
|
WCHAR m_szCaption[ MAX_LOADSTRING ];
|
||
|
|
||
|
HRESULT CreateRecoContext(BOOL *pfContextInitialized = NULL, BOOL fInitialize = FALSE, ULONG ulFlags = SRDLGF_ALL);
|
||
|
void RecoEvent();
|
||
|
|
||
|
void PopulateList(); // Populates the list
|
||
|
void InitUserList(HWND hWnd); // initializes user profile list
|
||
|
void ProfileProperties(); // Modifies the profile properties through engine UI
|
||
|
void DrawItemColumn(HDC hdc, WCHAR* lpsz, LPRECT prcClip);
|
||
|
CSpDynamicString CalcStringEllipsis(HDC hdc, CSpDynamicString lpszString, int cchMax, UINT uColWidth);
|
||
|
void SetCheckmark( HWND hList, int iIndex, bool bCheck );
|
||
|
|
||
|
HRESULT UserPropDlg( ISpObjectToken * pToken); // user wants to add a new profile
|
||
|
|
||
|
public:
|
||
|
CSRDlg() :
|
||
|
m_hAccelTable( NULL ),
|
||
|
m_hDlg( NULL ),
|
||
|
m_hSRCombo( NULL ),
|
||
|
m_hUserList( NULL ),
|
||
|
m_fDontDelete( FALSE ),
|
||
|
m_bInitEngine( FALSE ),
|
||
|
m_bPreferredDevice( TRUE ),
|
||
|
m_cpRecoEngine( NULL ),
|
||
|
m_cpRecoCtxt( NULL ),
|
||
|
m_pAudioDlg(NULL),
|
||
|
m_pCurRecoToken( NULL ),
|
||
|
m_dstrOldUserTokenId( (WCHAR *) NULL ),
|
||
|
m_iDeletedTokens( 0 ),
|
||
|
m_iAddedTokens( 0 ),
|
||
|
m_pCurUserToken( NULL ),
|
||
|
m_pDefaultRecToken( NULL )
|
||
|
{
|
||
|
::memset( m_aAddedTokens, 0, sizeof( CSpDynamicString ) * iMaxAddedProfiles_c );
|
||
|
}
|
||
|
|
||
|
~CSRDlg()
|
||
|
{
|
||
|
if ( m_pAudioDlg )
|
||
|
{
|
||
|
delete m_pAudioDlg;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ISpObjectToken *m_pCurUserToken; // currently selected user token
|
||
|
ISpObjectToken *m_pDefaultRecToken; // current default recognizer token.
|
||
|
// This is the token of the engine that is
|
||
|
// currently running (except for temporary switches
|
||
|
// in order to train non-default engines.
|
||
|
void CreateNewUser(); // Adds a new speech user profile to the registry
|
||
|
void DeleteCurrentUser(); // Deletes the current user
|
||
|
void OnCancel(); // Handles undoing the changes to the settings
|
||
|
void UserSelChange( int iSelIndex);
|
||
|
// Handles a new selection
|
||
|
void OnDrawItem( HWND hWnd, const DRAWITEMSTRUCT * pDrawStruct ); // handles item drawing
|
||
|
void OnApply();
|
||
|
void OnDestroy();
|
||
|
void OnInitDialog(HWND hWnd);
|
||
|
void ChangeDefaultUser(); // Changes the default user in the registry
|
||
|
void ShutDown(); // Shuts off the engine
|
||
|
void EngineSelChange(BOOL fInitialize = FALSE);
|
||
|
HRESULT IsCurRecoEngineAndCurRecoTokenMatch( bool *pfMatch );
|
||
|
HRESULT TrySwitchDefaultEngine( bool fShowErrorMessages = false );
|
||
|
HRESULT ResetDefaultEngine( bool fShowErrorMessages = true);
|
||
|
bool IsRecoTokenCurrentlyBeingUsed( ISpObjectToken *pRecoToken );
|
||
|
bool HasRecognizerChanged();
|
||
|
void KickCPLUI(); // Looks at the current requested defaults
|
||
|
// and decides if "Apply" needs to be enabled
|
||
|
void RecoContextError( BOOL fRecoContextExists = FALSE, BOOL fGiveErrorMessage = TRUE,
|
||
|
HRESULT hrRelevantError = E_FAIL );
|
||
|
UINT HRESULTToErrorID( HRESULT hr );
|
||
|
bool IsProfileNameInvisible( WCHAR *pwszProfile );
|
||
|
|
||
|
HWND GetHDlg() { return m_hDlg; }
|
||
|
ISpRecognizer *GetRecognizer() { return m_cpRecoEngine; }
|
||
|
ISpRecoContext *GetRecoContext() { return m_cpRecoCtxt; }
|
||
|
BOOL IsPreferredDevice() { return m_bPreferredDevice; }
|
||
|
void SetPreferredDevice( BOOL b ) { m_bPreferredDevice = b; }
|
||
|
|
||
|
friend INT_PTR CALLBACK SRDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
friend CEnvrPropDlg;
|
||
|
};
|
||
|
|
||
|
// Function Declarations
|
||
|
INT_PTR CALLBACK SRDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
class CEnvrPropDlg
|
||
|
{
|
||
|
public:
|
||
|
CSRDlg * m_pParent;
|
||
|
HWND m_hDlg;
|
||
|
CComPtr<ISpObjectToken> m_cpToken;
|
||
|
int m_isModify; // is this a new profile or a modify of an old profile
|
||
|
|
||
|
CEnvrPropDlg(CSRDlg * pParent, ISpObjectToken * pToken) :
|
||
|
m_cpToken(pToken),
|
||
|
m_pParent(pParent)
|
||
|
{
|
||
|
CSpUnicodeSupport unicode;
|
||
|
m_hinstRichEdit = unicode.LoadLibrary(L"riched20.dll");
|
||
|
m_hDlg = NULL;
|
||
|
m_isModify = 0;
|
||
|
}
|
||
|
|
||
|
~CEnvrPropDlg()
|
||
|
{
|
||
|
FreeLibrary(m_hinstRichEdit);
|
||
|
}
|
||
|
|
||
|
BOOL InitDialog(HWND hDlg);
|
||
|
EPD_RETURN_VALUE ApplyChanges();
|
||
|
static INT_PTR CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
private:
|
||
|
HINSTANCE m_hinstRichEdit; // used to allow rich edit controls
|
||
|
};
|
||
|
|
||
|
// Function Declarations
|
||
|
// Callback function to handle windows messages
|
||
|
INT_PTR CALLBACK EnvrDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
// Globals
|
||
|
extern CSRDlg *g_pSRDlg;
|
||
|
extern CEnvrDlg *g_pEnvrDlg;
|
||
|
|
||
|
#endif
|