263 lines
9.5 KiB
C++
263 lines
9.5 KiB
C++
|
/****************************************************************************
|
||
|
* TTSPropertiesDialog.cpp
|
||
|
*
|
||
|
* TTS Engine Advanced Properties Dialog handler
|
||
|
*
|
||
|
* Owner: aaronhal
|
||
|
*
|
||
|
* Copyright (c) 1999 Microsoft Corporation All Rights Reserved.
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "ms_entropicengine.h"
|
||
|
#include "resource.h"
|
||
|
#include "sphelper.h"
|
||
|
#include "TTSPropertiesDialog.h"
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* CTTSPropertiesDialog::CTTSPropertiesDialog *
|
||
|
*--------------------------------------------*
|
||
|
*
|
||
|
* Description: Constructor
|
||
|
*
|
||
|
***************************************************************** aaronhal ***/
|
||
|
CTTSPropertiesDialog::CTTSPropertiesDialog( HINSTANCE hInstance, HWND hwndParent )
|
||
|
{
|
||
|
m_hInstance = hInstance;
|
||
|
m_hwndParent = hwndParent;
|
||
|
m_dwSeparatorAndDecimal = 0;
|
||
|
m_dwShortDateOrder = 0;
|
||
|
} /* CTTSPropertiesDialog */
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* CTTSPropertiesDialog::Run *
|
||
|
*---------------------------*
|
||
|
*
|
||
|
* Description: Launches the dialog associated with this object
|
||
|
*
|
||
|
* Return: S_OK if values accepted,
|
||
|
* S_FALSE if cancelled,
|
||
|
*
|
||
|
***************************************************************** aaronhal ***/
|
||
|
HRESULT CTTSPropertiesDialog::Run()
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if ( SUCCEEDED( hr ) )
|
||
|
{
|
||
|
hr = (HRESULT) g_Unicode.DialogBoxParam( m_hInstance, (LPCWSTR) MAKEINTRESOURCE( IDD_TTS_ADV ), m_hwndParent,
|
||
|
DlgProc, (LPARAM) this );
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
} /* Run */
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* CTTSPropertiesDialog::InitDialog *
|
||
|
*----------------------------------*
|
||
|
*
|
||
|
* Description: Static member function which handles the WM_INITDIALOG
|
||
|
* message. Set windows up, cache this pointer, etc.
|
||
|
*
|
||
|
* Return: TRUE
|
||
|
*
|
||
|
***************************************************************** aaronhal ***/
|
||
|
HRESULT CTTSPropertiesDialog::InitDialog( HWND hDlg, LPARAM lParam )
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
//--- Cache the 'this' pointer
|
||
|
g_Unicode.SetWindowLongPtr(hDlg, GWLP_USERDATA, lParam);
|
||
|
|
||
|
//--- Retrieve the current settings from the registry
|
||
|
CSpDynamicString dstrTokenKeyName;
|
||
|
|
||
|
hr = StringFromCLSID( CLSID_MSE_TTSEngine, &dstrTokenKeyName );
|
||
|
if ( SUCCEEDED( hr ) )
|
||
|
{
|
||
|
hr = SpCreateNewToken( L"HKEY_CURRENT_USER\\Software\\Microsoft\\Speech\\Voices", dstrTokenKeyName,
|
||
|
&This(hDlg)->m_cpEngineToken );
|
||
|
}
|
||
|
|
||
|
if ( SUCCEEDED( hr ) )
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->GetDWORD( L"SeparatorAndDecimal",
|
||
|
&This(hDlg)->m_dwSeparatorAndDecimal );
|
||
|
This(hDlg)->m_cpEngineToken->GetDWORD( L"ShortDateOrder", &This(hDlg)->m_dwShortDateOrder );
|
||
|
|
||
|
//--- Set the state of the dialog
|
||
|
if ( This(hDlg)->m_dwSeparatorAndDecimal & (DWORD) PERIOD_COMMA )
|
||
|
{
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//--- Default is comma separator, period decimal point
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
}
|
||
|
|
||
|
if ( This(hDlg)->m_dwShortDateOrder & (DWORD) YEAR_MONTH_DAY )
|
||
|
{
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
}
|
||
|
else if ( This(hDlg)->m_dwShortDateOrder & (DWORD) DAY_MONTH_YEAR )
|
||
|
{
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//--- Default is month day year
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
} /* InitDialog */
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* CTTSPropertiesDialog::DlgProc *
|
||
|
*-------------------------------*
|
||
|
*
|
||
|
* Description: Static member for Windows callback.
|
||
|
*
|
||
|
* Return: TRUE if message was handled, FALSE otherwise
|
||
|
*
|
||
|
***************************************************************** aaronhal ***/
|
||
|
INT_PTR CALLBACK CTTSPropertiesDialog::DlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
BOOL fProcessed = FALSE;
|
||
|
|
||
|
switch (message)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
fProcessed = SUCCEEDED( InitDialog( hDlg, lParam ) );
|
||
|
break;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
switch ( LOWORD(wParam) )
|
||
|
{
|
||
|
case IDC_COMMA_PERIOD:
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
fProcessed = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDC_PERIOD_COMMA:
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
fProcessed = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDC_MDY:
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
fProcessed = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDC_DMY:
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
fProcessed = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDC_YMD:
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
fProcessed = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDRESTORE:
|
||
|
{
|
||
|
//--- Default is comma separator, period decimal point
|
||
|
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
//--- Default is month day year
|
||
|
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDCANCEL:
|
||
|
EndDialog( hDlg, (int)S_FALSE );
|
||
|
fProcessed = TRUE;
|
||
|
break;
|
||
|
|
||
|
case IDOK:
|
||
|
This(hDlg)->UpdateValues( hDlg );
|
||
|
EndDialog( hDlg, (int)S_OK );
|
||
|
fProcessed = TRUE;
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return int(fProcessed);
|
||
|
} /* DlgProc */
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* CTTSPropertiesDialog::Update *
|
||
|
*------------------------------*
|
||
|
*
|
||
|
* Description: Write new parameters to the registry.
|
||
|
*
|
||
|
* Return: Nothing.
|
||
|
*
|
||
|
***************************************************************** aaronhal ***/
|
||
|
void CTTSPropertiesDialog::UpdateValues( HWND hDlg )
|
||
|
{
|
||
|
LRESULT lrValue = 0;
|
||
|
|
||
|
//--- Set short date format
|
||
|
lrValue = SendDlgItemMessage( hDlg, IDC_MDY, BM_GETCHECK, 0, 0 );
|
||
|
if ( lrValue == BST_CHECKED )
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) MONTH_DAY_YEAR );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
lrValue = SendDlgItemMessage( hDlg, IDC_DMY, BM_GETCHECK, 0, 0 );
|
||
|
if ( lrValue == BST_CHECKED )
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) DAY_MONTH_YEAR );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) YEAR_MONTH_DAY );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//--- Set number separator and decimal point
|
||
|
lrValue = SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_GETCHECK, 0, 0 );
|
||
|
if ( lrValue == BST_CHECKED )
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->SetDWORD( L"SeparatorAndDecimal", (DWORD) PERIOD_COMMA );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
This(hDlg)->m_cpEngineToken->SetDWORD( L"SeparatorAndDecimal", (DWORD) COMMA_PERIOD );
|
||
|
}
|
||
|
} /* Update */
|