127 lines
3.2 KiB
C++
127 lines
3.2 KiB
C++
// File: CplMain.cpp
|
||
|
||
#include "precomp.h"
|
||
#include "resource.h"
|
||
#include "Conf.h"
|
||
#include "ConfCpl.h"
|
||
#include "confwnd.h"
|
||
#include "ConfPolicies.h"
|
||
|
||
//*** Global Data *****************************************************
|
||
|
||
// Global flag keeps setting that changed for windows msg broadcast
|
||
DWORD g_dwChangedSettings = 0;
|
||
|
||
BOOL g_fInOptionsDialog = FALSE;
|
||
|
||
static const int nMaxPropPages = 7;
|
||
|
||
INT_PTR CreatePropSheet(HWND hwndOwner, HINSTANCE hInst, int nStartPage)
|
||
{
|
||
int pageMap[nMaxPropPages];
|
||
ZeroMemory(&pageMap, sizeof(pageMap));
|
||
|
||
PROPSHEETPAGE psp[nMaxPropPages];
|
||
ZeroMemory(&psp, sizeof(psp));
|
||
|
||
RegEntry rePol(POLICIES_KEY, HKEY_CURRENT_USER);
|
||
RegEntry reAudio(AUDIO_KEY, HKEY_CURRENT_USER);
|
||
|
||
ASSERT(nStartPage < nMaxPropPages);
|
||
|
||
int nPages = 0;
|
||
|
||
if (!rePol.GetNumber( REGVAL_POL_NO_GENERALPAGE,
|
||
DEFAULT_POL_NO_GENERALPAGE ))
|
||
{
|
||
pageMap[OPTIONS_GENERAL_PAGE] = nPages;
|
||
FillInPropertyPage(&psp[nPages++], IDD_OPT_GENERAL,
|
||
UserDlgProc);
|
||
ASSERT(nPages <= nMaxPropPages);
|
||
}
|
||
if (!rePol.GetNumber( REGVAL_POL_NO_SECURITYPAGE,
|
||
DEFAULT_POL_NO_SECURITYPAGE ))
|
||
{
|
||
pageMap[OPTIONS_SECURITY_PAGE] = nPages;
|
||
FillInPropertyPage(&psp[nPages++], IDD_SECURITY,
|
||
SecurityDlgProc);
|
||
ASSERT(nPages <= nMaxPropPages);
|
||
|
||
}
|
||
if (!rePol.GetNumber( REGVAL_POL_NO_AUDIOPAGE,
|
||
DEFAULT_POL_NO_AUDIOPAGE ) &&
|
||
!rePol.GetNumber( REGVAL_POL_NO_AUDIO,
|
||
DEFAULT_POL_NO_AUDIO) &&
|
||
ISSOUNDCARDPRESENT(reAudio.GetNumber( REGVAL_SOUNDCARDCAPS,
|
||
SOUNDCARD_NONE)) )
|
||
{
|
||
pageMap[OPTIONS_AUDIO_PAGE] = nPages;
|
||
FillInPropertyPage(&psp[nPages++], IDD_AUDIO,
|
||
AudioDlgProc);
|
||
ASSERT(nPages <= nMaxPropPages);
|
||
}
|
||
if (!rePol.GetNumber( REGVAL_POL_NO_VIDEOPAGE,
|
||
DEFAULT_POL_NO_VIDEOPAGE ) &&
|
||
(!rePol.GetNumber( REGVAL_POL_NO_VIDEO_SEND,
|
||
DEFAULT_POL_NO_VIDEO_SEND) ||
|
||
!rePol.GetNumber( REGVAL_POL_NO_VIDEO_RECEIVE,
|
||
DEFAULT_POL_NO_VIDEO_RECEIVE)))
|
||
{
|
||
pageMap[OPTIONS_VIDEO_PAGE] = nPages;
|
||
FillInPropertyPage(&psp[nPages++], IDD_VIDEO,
|
||
VideoDlgProc);
|
||
ASSERT(nPages <= nMaxPropPages);
|
||
}
|
||
|
||
// If no pages are allowed, tell the user and get out
|
||
if ( !nPages ) {
|
||
ConfMsgBox ( hwndOwner, (LPCTSTR)IDS_ALLPAGESDISABLED );
|
||
return 0;
|
||
}
|
||
|
||
PROPSHEETHEADER psh;
|
||
InitStruct(&psh);
|
||
|
||
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
|
||
psh.hwndParent = hwndOwner;
|
||
psh.hInstance = hInst;
|
||
ASSERT(NULL == psh.hIcon);
|
||
psh.pszCaption = (LPSTR)IDS_CPLNAME;
|
||
psh.nPages = nPages;
|
||
psh.nStartPage = pageMap[nStartPage];
|
||
psh.ppsp = (LPCPROPSHEETPAGE) &psp;
|
||
|
||
return (PropertySheet(&psh));
|
||
}
|
||
|
||
|
||
/* L A U N C H C O N F C P L */
|
||
/*-------------------------------------------------------------------------
|
||
%%Function: LaunchConfCpl
|
||
|
||
-------------------------------------------------------------------------*/
|
||
VOID LaunchConfCpl(HWND hwnd, int nStartPage)
|
||
{
|
||
|
||
if (g_fInOptionsDialog)
|
||
{
|
||
return;
|
||
}
|
||
|
||
g_fInOptionsDialog = TRUE;
|
||
CreatePropSheet(hwnd, GetInstanceHandle(), nStartPage);
|
||
g_fInOptionsDialog = FALSE;
|
||
|
||
// Broadcast change notification if anything changed
|
||
if (g_dwChangedSettings)
|
||
{
|
||
HandleConfSettingsChange(g_dwChangedSettings);
|
||
g_dwChangedSettings = 0;
|
||
}
|
||
}
|
||
|
||
BOOL CanLaunchConfCpl()
|
||
{
|
||
return !g_fInOptionsDialog;
|
||
}
|
||
|