WindowsXP-SP1/enduser/netmeeting/nmrk/setsht.cpp

759 lines
28 KiB
C++

#include "precomp.h"
#include "resource.h"
#include <algorithm>
#include "global.h"
#include "PropPg.h"
#include "SetSht.h"
#include "WndProcs.h"
#include "nmakwiz.h"
#include "nmakreg.h"
#include <common.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
// Static member vars
CSettingsSheet* CSettingsSheet::ms_pSettingsSheet = NULL;
// This is a map to keep track of the PropertyDataWindows
/* static */ map<UINT, HWND> CSettingsSheet::ms_FocusList;
/* static */ map< UINT, CPropertyDataWindow2* > CSettingsSheet::ms_PropertyWindows;
/* static */ list< UINT > CSettingsSheet::ms_CategoryIDList;
////////////////////////////////////////////////////////////////////////////////////////////////////
// Static member fns
/* static */ BOOL APIENTRY CSettingsSheet::DlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) {
BOOL bRetval;
NMHDR FAR* pnmhdr;
switch( message ) {
case WM_INITDIALOG:
ms_pSettingsSheet->m_hWndDlg = hDlg;
ms_pSettingsSheet->_InitWindows();
ms_pSettingsSheet->PrepSettings();
ms_pSettingsSheet->_SetButtons();
return TRUE;
case WM_CHAR:
case WM_KEYDOWN:
return FALSE;
case WM_NOTIFY:
pnmhdr = reinterpret_cast< NMHDR FAR* >( lParam );
switch( pnmhdr -> code ) {
case PSN_QUERYCANCEL:
SetWindowLong( hDlg, DWL_MSGRESULT, !VerifyExitMessageBox());
return TRUE;
break;
case PSN_SETACTIVE:
g_hwndActive = hDlg;
ms_pSettingsSheet->_SetButtons();
return TRUE;
break;
case PSN_WIZNEXT:
if( !ms_pSettingsSheet -> _IsDataValid() )
{
SetWindowLong( hDlg, DWL_MSGRESULT, -1);
}
return TRUE;
break;
case PSN_WIZBACK:
{
int iRet = NmrkMessageBox(MAKEINTRESOURCE(IDS_ERASE_ALL_SETTINGS),
NULL, MB_YESNO | MB_ICONQUESTION );
if( IDNO == iRet )
{
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
}
return TRUE;
break;
}
}
break;
default:
break;
}
return FALSE;
}
/* static */ bool CSettingsSheet::IsGateKeeperModeSelected(void)
{
bool bRet = false;
if( ms_pSettingsSheet )
{
if( ms_pSettingsSheet->GetCategoryCheck( IDC_SET_CALLING_OPTIONS ) )
{
if( ms_pSettingsSheet->GetCheckData( IDC_SET_CALLING_OPTIONS, IDC_RADIO_CALLMODE_GATEKEEPER ) )
{
bRet = TRUE;
}
}
}
return bRet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// Member fns
CSettingsSheet::CSettingsSheet( void )
: m_PropertySheetPage( MAKEINTRESOURCE( IDD_PROPPAGE_DEFAULT ),
( DLGPROC ) CSettingsSheet::DlgProc ),
m_uPropWndShowing( 0 )
{
if( NULL == ms_pSettingsSheet ) { ms_pSettingsSheet = this; }
}
CSettingsSheet::~CSettingsSheet( void )
{
_KillPropertyDataWindows();
}
void CSettingsSheet::SetFocus( UINT catID )
{
map< UINT, HWND >::iterator I = ms_FocusList.find( catID );
if( I != ms_FocusList.end() )
{
::SetFocus( (*I).second );
}
}
// Allocates the memory needed!!!
// User must dealloc
LPTSTR CSettingsSheet::GetStringData( UINT idCategory, UINT idEdit, LPTSTR *sz )
{
*sz = NULL;
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . find( idCategory );
if( ms_PropertyWindows . end() != I )
{
ULONG uLen = ( *I ) . second -> GetEditDataLen( idEdit );
if( !uLen )
{
return NULL;
}
*sz = new TCHAR[ uLen + 1];
( *I ) . second -> GetEditData( idEdit, *sz, uLen + 1 );
return *sz;
}
return NULL;
}
BOOL CSettingsSheet::SetCheckData( UINT idCategory, UINT idCheck, BOOL bSet )
{
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . find( idCategory );
if( ms_PropertyWindows . end() != I ) {
( *I ) . second -> SetCheck( idCheck, bSet );
return TRUE;
}
return FALSE;
}
BOOL CSettingsSheet::GetCheckData( UINT idCategory, UINT idCheck )
{
if( FALSE == m_pCategoryList -> GetCheck( idCategory ) ) {
return FALSE;
}
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . find( idCategory );
if( ms_PropertyWindows . end() != I ) {
return ( *I ) . second -> GetCheck( idCheck );
}
return FALSE;
}
void CSettingsSheet::EnableWindow( UINT idCategory, BOOL bShow )
{
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . find( idCategory );
if( ms_PropertyWindows . end() != I ) {
( *I ) . second -> EnableWindow( bShow );
}
else
{
OutputDebugString( TEXT("Error in CSettingsSheet::EnableWindow") );
}
}
BOOL CSettingsSheet::IsShowing( UINT idCategory )
{
return( idCategory == m_uPropWndShowing );
}
void CSettingsSheet::ShowWindow( UINT idCategory, BOOL bShow )
{
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . find( idCategory );
if( ms_PropertyWindows . end() != I ) {
if( 0 != m_uPropWndShowing )
{
map< UINT, CPropertyDataWindow2* >::iterator it = ms_PropertyWindows . find( m_uPropWndShowing );
(*it).second-> ShowWindow( FALSE );
SetWindowLong( GetDlgItem( m_pCategoryList->GetHwnd(), m_uPropWndShowing), GWL_USERDATA, 0 );
}
( *I ) . second -> ShowWindow( bShow );
m_uPropWndShowing = idCategory;
}
}
void CSettingsSheet::ShowWindow( HWND hWnd, BOOL bShow )
{
ShowWindow( GetWindowLong( hWnd, GWL_ID ), bShow );
}
void CSettingsSheet::_KillPropertyDataWindows( void )
{
map< UINT, CPropertyDataWindow2* >::iterator I = ms_PropertyWindows . begin();
while( I != ms_PropertyWindows . end() ) {
delete ( *I ) . second;
I++;
}
ms_PropertyWindows . erase( ms_PropertyWindows . begin(), ms_PropertyWindows . end() );
// TODO - This is being deleted else where... I should find where
// delete m_pCategoryList;
}
BOOL CSettingsSheet::_InitWindows(void)
{
int iTotal = 9;
int iFractionTop = 4;
RECT rect;
GetClientRect( m_hWndDlg, &rect );
int iWidth = rect.right - CPropertyDataWindow2::mcs_iLeft -
CPropertyDataWindow2::mcs_iBorder;
int iHeight = MulDiv( (rect.bottom - CPropertyDataWindow2::mcs_iBorder ), iFractionTop, iTotal );
m_pCategoryList = new CPropertyDataWindow2( m_hWndDlg,
IDD_CATEGORY_LIST,
TEXT("IDD_CATEGORY_LIST"),
CatListWndProc,
0,
CPropertyDataWindow2::mcs_iLeft,
CPropertyDataWindow2::mcs_iTop,
iWidth,
iHeight
);
m_pCategoryList -> ShowWindow( TRUE );
if( !_AddPropertyDataWindows( CPropertyDataWindow2::mcs_iLeft,
CPropertyDataWindow2::mcs_iTop + iHeight + CPropertyDataWindow2::mcs_iBorder,
iWidth,
MulDiv( (rect.bottom - CPropertyDataWindow2::mcs_iBorder ), iTotal - iFractionTop, iTotal ) ) )
{
return FALSE;
}
return TRUE;
}
void CSettingsSheet::PrepSettings()
{
if (g_pWiz->m_IntroSheet.GetFilePane()->OptionEnabled())
{
_ReadSettings();
}
else
{
m_pCategoryList->Reset();
for( map< UINT, CPropertyDataWindow2* >::const_iterator it = ms_PropertyWindows.begin();
it != ms_PropertyWindows.end();
it++ )
{
(*it).second->Reset();
}
}
}
void CSettingsSheet::_ReadSettings()
{
for( map< UINT, CPropertyDataWindow2* >::const_iterator it = ms_PropertyWindows.begin();
it != ms_PropertyWindows.end();
it++ )
{
(*it).second->ReadSettings();
}
m_pCategoryList->ReadSettings();
for( list< UINT >::const_iterator i = ms_CategoryIDList.begin();
i != ms_CategoryIDList.end();
i++ )
{
if( GetCategoryCheck( *i ) )
{
ms_PropertyWindows[ *i ]->EnableWindow( TRUE );
}
}
}
void CSettingsSheet::WriteSettings()
{
for( map< UINT, CPropertyDataWindow2* >::const_iterator it = ms_PropertyWindows.begin();
it != ms_PropertyWindows.end();
it++ )
{
(*it).second->WriteSettings();
}
m_pCategoryList->WriteSettings();
}
void CSettingsSheet::WriteToINF( HANDLE hFile )
{
CPropertyDataWindow2::MapControlsToRegKeys();
_INFComment( hFile, TEXT("Categories") );
m_pCategoryList->WriteToINF( hFile, TRUE );
for( map< UINT, CPropertyDataWindow2* >::const_iterator it = ms_PropertyWindows.begin();
it != ms_PropertyWindows.end();
it++ )
{
{
HWND hwnd = GetDlgItem( m_pCategoryList->GetHwnd(), (*it).first );
int iLen = Button_GetTextLength( hwnd ) + 1;
LPTSTR szButtonText = new TCHAR[ iLen ];
Button_GetText( hwnd, szButtonText, iLen );
_INFComment( hFile, szButtonText );
delete [] szButtonText;
}
(*it).second->WriteToINF( hFile, GetCategoryCheck( (*it).first ) );
}
}
BOOL CSettingsSheet::_INFComment( HANDLE hFile, LPCTSTR sz )
{
#if _NMAKUSEINFCOMMENTS
DWORD dwWritten;
WriteFile( hFile, (void *)TEXT(";;"), lstrlen( TEXT(";;") ), &dwWritten, NULL );
WriteFile( hFile, (void *)sz, lstrlen( sz ), &dwWritten, NULL );
return WriteFile( hFile, (void *)TEXT("\r\n"), lstrlen( TEXT("\r\n") ), &dwWritten, NULL );
#else
return 0;
#endif
}
BOOL CSettingsSheet::_AddPropertyDataWindows( int iX, int iY, int iWidth, int iHeight )
{
UINT ItemID;
CPropertyDataWindow2* pPropDataWnd;
_KillPropertyDataWindows();
//
// CALLING
//
////////
ItemID = IDC_SET_CALLING_OPTIONS;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_SET_CALLING_OPTIONS, TEXT("IDD_SET_CALLING_OPTIONS"),
0, iX, iY, iWidth, iHeight );
{
// Calling method radio buttons
HWND hwnd;
// DIRECT radio item is default CALLING_MODE
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_CALLMODE_DIRECT );
SetWindowLong( hwnd, GWL_USERDATA, CALLING_MODE_DIRECT );
Button_SetCheck(hwnd, BST_CHECKED);
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_CALLMODE_GATEKEEPER );
SetWindowLong( hwnd, GWL_USERDATA, CALLING_MODE_GATEKEEPER );
// Netspeed radio buttons
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_NETSPEED_144 );
SetWindowLong( hwnd, GWL_USERDATA, BW_144KBS );
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_NETSPEED_288 );
SetWindowLong( hwnd, GWL_USERDATA, BW_288KBS );
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_NETSPEED_ISDN );
SetWindowLong( hwnd, GWL_USERDATA, BW_ISDN );
// LAN radio item is default NETSPEED
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_NETSPEED_LAN );
SetWindowLong( hwnd, GWL_USERDATA, BW_MOREKBS );
Button_SetCheck(hwnd, BST_CHECKED);
pPropDataWnd->SetEnableListID( 9,
IDC_RADIO_CALLMODE_DIRECT,
IDC_RADIO_CALLMODE_GATEKEEPER,
IDC_CHECK_NOCHANGECALLMODE,
IDC_DISABLE_AUTOACCEPT,
IDC_PERSIST_AUTOACCEPT,
IDC_RADIO_NETSPEED_144,
IDC_RADIO_NETSPEED_288,
IDC_RADIO_NETSPEED_ISDN,
IDC_RADIO_NETSPEED_LAN);
}
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_CALLMODE_DIRECT );
pPropDataWnd -> EnableWindow( FALSE );
////////
ItemID = IDC_SET_SECURITY_OPTIONS;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_SECURITY, TEXT("IDD_SECURITY"),
0, iX, iY, iWidth, iHeight );
{
HWND hwnd;
// DEFAULT radio item is default SECURITY
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_SECURITY_DEFAULT );
SetWindowLong( hwnd, GWL_USERDATA, DEFAULT_POL_SECURITY);
Button_SetCheck(hwnd, BST_CHECKED);
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_SECURITY_REQUIRED );
SetWindowLong( hwnd, GWL_USERDATA, REQUIRED_POL_SECURITY);
hwnd = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_SECURITY_DISABLED );
SetWindowLong( hwnd, GWL_USERDATA, DISABLED_POL_SECURITY);
pPropDataWnd -> SetEnableListID( 5,
IDC_RADIO_SECURITY_DEFAULT,
IDC_RADIO_SECURITY_REQUIRED,
IDC_RADIO_SECURITY_DISABLED,
IDC_REQUIRE_COMPLETE_AUTHENTICATION,
IDC_SET_RDN_FOR_REQUIRED_CA
);
//
// Link Set URL checkbox with edit field
//
{
HWND hwndCond = GetDlgItem(pPropDataWnd->GetHwnd(), IDC_SET_RDN_FOR_REQUIRED_CA);
pPropDataWnd->ConnectControlsToCheck( IDC_SET_RDN_FOR_REQUIRED_CA,
1,
new CControlID(hwndCond, IDC_SET_RDN_FOR_REQUIRED_CA,
IDC_EDIT_SET_RDN_FOR_REQUIRED_CA,
CControlID::EDIT ) );
}
}
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_RADIO_SECURITY_DEFAULT );
pPropDataWnd -> EnableWindow( FALSE );
//
// A/V OPTIONS
//
//////////
ItemID = IDC_RESTRICT_THE_USE_OF_AUDIO;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_AUDIO, TEXT("IDD_AUDIO"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 7,
IDC_PREVENT_THE_USER_FROM_USING_AUDIO,
IDC_ENABLE_DIRECT_SOUND,
IDC_NOCHANGE_DIRECT_SOUND,
IDC_DISABLE_FULL_DUPLEX_AUDIO,
IDC_CREATE_AN_AUDIO_LOG_FILE,
IDC_CHECK_MUTE_SPEAKER_BY_DEFAULT,
IDC_CHECK_MUTE_MICROPHONE_BY_DEFAULT
);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(),
IDC_PREVENT_THE_USER_FROM_USING_AUDIO );
pPropDataWnd -> EnableWindow( FALSE );
//////////
ItemID = IDC_RESTRICT_THE_USE_OF_VIDEO;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_VIDEO, TEXT("IDD_VIDEO"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 2,
IDC_DISABLE_SENDING_VIDEO,
IDC_DISABLE_RECIEVING_VIDEO );
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(),
IDC_DISABLE_SENDING_VIDEO );
pPropDataWnd -> EnableWindow( FALSE );
////////
ItemID = IDC_LIMIT_AV_THROUGHPUT;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_LIMIT_AV_THROUGHPUT, TEXT("IDD_LIMIT_AV_THROUGHPUT"),
RestrictAvThroughputWndProc,
0, iX, iY, iWidth, iHeight );
{
CControlID *pControl = new CControlID( IDC_SLIDE_AV_THROUGHPUT,
CControlID::SLIDER );
pControl->SetStaticID( IDC_STATIC_MAX_AV_THROUGHPUT );
pPropDataWnd->AddControl( pControl );
}
HWND hwndTrack = GetDlgItem( pPropDataWnd -> GetHwnd(), IDC_SLIDE_AV_THROUGHPUT );
TrackBar_ClearTics(hwndTrack, FALSE);
TrackBar_SetRange(hwndTrack, FALSE, BW_ISDN_BITS / 1000, BW_SLOWLAN_BITS / 1000);
TrackBar_SetTicFreq(hwndTrack, 10, 0);
TrackBar_SetPageSize( hwndTrack, 5);
TrackBar_SetThumbLength( hwndTrack, 5);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = hwndTrack;
pPropDataWnd -> EnableWindow( FALSE );
//
// TOOLS
//
/////////
ItemID = IDC_DISABLE_CHAT;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_CHAT, TEXT("IDD_CHAT"),
0, iX, iY, iWidth, iHeight );
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
pPropDataWnd -> EnableWindow( FALSE );
//////////
ItemID = IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_FILETRANSFER, TEXT("IDD_FILETRANSFER"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 2,
IDC_PREVENT_THE_USER_FROM_SENDING_FILES,
IDC_PREVENT_THE_USER_FROM_RECEIVING_FILES
);
//
// Link max send size check box to inverse of prevent sending checkbox
//
{
HWND hwndCond = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_MAXIMUM_SIZE_OF_SENT_FILES );
pPropDataWnd -> ConnectControlsToCheck( IDC_MAXIMUM_SIZE_OF_SENT_FILES, 1,
new CControlID( hwndCond,
IDC_MAXIMUM_SIZE_OF_SENT_FILES,
IDC_EDIT_MAXIMUM_SIZE_OF_SENT_FILES,
CControlID::EDIT_NUM ) );
}
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(),
IDC_PREVENT_THE_USER_FROM_SENDING_FILES );
pPropDataWnd -> EnableWindow( FALSE );
//////////
ItemID = IDC_RESTRICT_THE_USE_OF_SHARING;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_SHARING, TEXT("IDD_SHARING"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 7,
IDC_DISABLE_ALL_SHARING_FEATURES,
IDC_PREVENT_SHARING,
IDC_PREVENT_SHARING_DESKTOP,
IDC_PREVENT_SHARING_TRUECOLOR,
IDC_PREVENT_SHARING_EXPLORER,
IDC_PREVENT_SHARING_DOS,
IDC_PREVENT_SHARING_CONTROL);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_DISABLE_ALL_SHARING_FEATURES );
pPropDataWnd -> EnableWindow( FALSE );
////////
ItemID = IDC_RESTRICT_THE_USE_OF_WHITEBOARD;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_WHITEBOARD, TEXT("IDD_WHITEBOARD"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 2,
IDC_DISABLE_2XWHITEBOARD,
IDC_DISABLE_WHITEBOARD);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_DISABLE_2XWHITEBOARD );
pPropDataWnd -> EnableWindow( FALSE );
//////////
ItemID = IDC_RESTRICT_THE_USE_OF_RDS;
m_pCategoryList->SetEnableListID(1, ItemID);
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_RDS, TEXT("IDD_RDS"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd->SetEnableListID(2,
IDC_DISABLE_RDS_ON_ALL,
IDC_DISABLE_RDS_ON_WIN9X);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_DISABLE_RDS_ON_ALL );
pPropDataWnd->EnableWindow(FALSE);
//
// MISCELLANEOUS
//
////////
ItemID = IDC_RESTRICT_USE_OF_THE_OPTIONS_DIALOG;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_OPTIONS_DIALOG, TEXT("IDD_OPTIONS_DIALOG"),
0, iX, iY, iWidth, iHeight );
pPropDataWnd -> SetEnableListID( 5,
IDC_DISABLE_THE_GENERAL_OPTIONS_PAGE,
IDC_DISABLE_THE_ADVANCED_CALLING_BUTTON,
IDC_DISABLE_THE_SECURITY_OPTIONS_PAGE,
IDC_DISABLE_THE_AUDIO_OPTIONS_PAGE,
IDC_DISABLE_THE_VIDEO_OPTIONS_PAGE
);
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(),
IDC_DISABLE_THE_GENERAL_OPTIONS_PAGE );
pPropDataWnd -> EnableWindow( FALSE );
////////
ItemID = IDC_ONLINE_SUPPORT;
m_pCategoryList->SetEnableListID( 1, ItemID );
ms_CategoryIDList.push_front( ItemID );
pPropDataWnd = new CPropertyDataWindow2( m_hWndDlg,
IDD_ONLINE_SUPPORT, TEXT("IDD_ONLINE_SUPPORT"),
0, iX, iY, iWidth, iHeight );
{
HWND hwndCond = GetDlgItem( pPropDataWnd->GetHwnd(), IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE );
pPropDataWnd -> ConnectControlsToCheck(IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE,
2,
new CControlID(
hwndCond,
IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE,
IDC_EDIT_SET_URL_FOR_INTERNAL_SUPPORT_PAGE,
CControlID::EDIT ),
new CControlID(
hwndCond,
IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE,
IDC_SHOW_THE_ONLINE_SUPPORT_PAGE_THE_FIRST_TIME_NETMEETING_STARTS,
CControlID::CHECK )
);
}
ms_PropertyWindows[ ItemID ] = pPropDataWnd;
ms_FocusList[ ItemID ] = GetDlgItem( pPropDataWnd->GetHwnd(),
IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE );
pPropDataWnd -> EnableWindow( FALSE );
return TRUE;
}
BOOL CSettingsSheet::_IsDataValid( void )
{
// Validate FT Throughput
if( GetCategoryCheck( IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER ) &&
GetCheckData( IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER, IDC_MAXIMUM_SIZE_OF_SENT_FILES ) )
{
if( 0 >= GetDlgItemInt( ms_PropertyWindows[ IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER ]->GetHwnd(),
IDC_EDIT_MAXIMUM_SIZE_OF_SENT_FILES,
NULL,
FALSE ) )
{
NmrkMessageBox(MAKEINTRESOURCE(IDS_FT_THROUGHPUT_VALUE_IS_INVALID),
MAKEINTRESOURCE(IDS_INVALID_DATA_ERROR),
MB_OK | MB_ICONEXCLAMATION);
ShowWindow( IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER, TRUE );
ms_PropertyWindows[ IDC_RESTRICT_THE_USE_OF_FILE_TRANSFER ]->SetFocus( IDC_EDIT_MAXIMUM_SIZE_OF_SENT_FILES );
return FALSE;
}
}
// Validate online support URL
if( GetCategoryCheck( IDC_ONLINE_SUPPORT ) &&
GetCheckData( IDC_ONLINE_SUPPORT, IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE ) )
{
LPTSTR sz;
GetStringData( IDC_ONLINE_SUPPORT,
IDC_EDIT_SET_URL_FOR_INTERNAL_SUPPORT_PAGE,
&sz );
if( NULL == sz )
{
delete [] sz;
NmrkMessageBox(MAKEINTRESOURCE(IDS_NETMEETING_HOMEPAGE_IS_INVALID),
MAKEINTRESOURCE(IDS_INVALID_DATA_ERROR), MB_OK | MB_ICONEXCLAMATION);
ShowWindow( IDC_ONLINE_SUPPORT, TRUE );
ms_PropertyWindows[ IDC_ONLINE_SUPPORT ]->SetFocus( IDC_SET_URL_FOR_INTERNAL_SUPPORT_PAGE );
ms_PropertyWindows[ IDC_ONLINE_SUPPORT ]->SetFocus( IDC_EDIT_SET_URL_FOR_INTERNAL_SUPPORT_PAGE );
return FALSE;
}
delete [] sz;
}
return TRUE;
}
int CSettingsSheet::SpewToListBox( HWND hwndList, int iStartLine )
{
HWND hwndCat = m_pCategoryList->GetHwnd();
map< UINT, CPropertyDataWindow2 * >::const_iterator it;
for( it = ms_PropertyWindows.begin(); it != ms_PropertyWindows.end(); it++ )
{
if( GetCategoryCheck( (*it).first ) )
{
HWND hwndButton = GetDlgItem( hwndCat, (*it).first );
int iButtonTextLen = Button_GetTextLength( hwndButton ) + 2;
LPTSTR szButtonText = new TCHAR[ iButtonTextLen ];
Button_GetText( hwndButton, szButtonText, iButtonTextLen -1 );
lstrcat( szButtonText, TEXT(":") );
ListBox_InsertString( hwndList, iStartLine, szButtonText );
iStartLine++;
iStartLine = (*it).second->Spew( hwndList, iStartLine );
}
}
return iStartLine;
}
void CSettingsSheet::_SetButtons( void )
{
DWORD dwFlags = PSWIZB_BACK;
dwFlags |= PSWIZB_NEXT;
PropSheet_SetWizButtons( GetParent( m_hWndDlg ), dwFlags );
}