204 lines
5.6 KiB
C++
204 lines
5.6 KiB
C++
/****************************************************************************\
|
|
*
|
|
* introdlg.cpp
|
|
*
|
|
* Created: William Taylor (wtaylor) 01/22/01
|
|
*
|
|
* MS Ratings Introduction Property Page
|
|
*
|
|
\****************************************************************************/
|
|
|
|
#include "msrating.h"
|
|
#include "mslubase.h"
|
|
#include "parselbl.h"
|
|
#include "picsrule.h"
|
|
#include "introdlg.h" // CIntroDialog
|
|
#include "toffdlg.h" // CTurnOffDialog
|
|
#include "hint.h" // CHint
|
|
#include "debug.h" // TraceMsg()
|
|
#include <contxids.h> // Help Context ID's
|
|
#include <mluisupp.h> // SHWinHelpOnDemandWrap() and MLLoadStringA()
|
|
|
|
extern INT_PTR DoPasswordConfirm(HWND hDlg);
|
|
extern BOOL PicsOptionsDialog( HWND hwnd, PicsRatingSystemInfo * pPRSI, PicsUser * pPU );
|
|
|
|
const UINT PASSCONFIRM_FAIL = 0;
|
|
const UINT PASSCONFIRM_OK = 1;
|
|
const UINT PASSCONFIRM_NEW = 2;
|
|
|
|
DWORD CIntroDialog::aIds[] = {
|
|
IDC_SET_RATINGS, IDH_RATINGS_SET_RATINGS_BUTTON,
|
|
IDC_STATIC1, IDH_IGNORE,
|
|
IDC_TURN_ONOFF, IDH_RATINGS_TURNON_BUTTON,
|
|
IDC_INTRO_TEXT, IDH_IGNORE,
|
|
0,0
|
|
};
|
|
|
|
CIntroDialog::CIntroDialog()
|
|
{
|
|
// Add Construction Here...
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
CheckGlobalInfoRev();
|
|
EnableDlgItems();
|
|
|
|
bHandled = FALSE;
|
|
return 1L; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnSetRatings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
HWND hDlg = m_hWnd;
|
|
|
|
UINT_PTR passConfirm = DoPasswordConfirm(hDlg);
|
|
if (passConfirm == PASSCONFIRM_FAIL)
|
|
{
|
|
TraceMsg( TF_WARNING, "CIntroDialog::OnSetRatings() - DoPasswordConfirm() failed." );
|
|
return 0L;
|
|
}
|
|
|
|
if (!gPRSI->fRatingInstalled)
|
|
{
|
|
gPRSI->FreshInstall();
|
|
if ( ! PicsOptionsDialog( hDlg, gPRSI, GetUserObject() ) )
|
|
{
|
|
if (passConfirm == PASSCONFIRM_NEW)
|
|
{
|
|
RemoveSupervisorPassword();
|
|
}
|
|
}
|
|
MarkChanged();
|
|
}
|
|
else
|
|
{
|
|
if ( PicsOptionsDialog( hDlg, gPRSI, GetUserObject() ) )
|
|
{
|
|
MarkChanged();
|
|
}
|
|
}
|
|
|
|
EnableDlgItems();
|
|
|
|
return 1L;
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnTurnOnOff(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
HWND hDlg = m_hWnd;
|
|
|
|
if ( DoPasswordConfirm( hDlg ) )
|
|
{
|
|
PicsUser *pUser = ::GetUserObject();
|
|
if (pUser != NULL)
|
|
{
|
|
pUser->fEnabled = !pUser->fEnabled;
|
|
if (pUser->fEnabled)
|
|
{
|
|
MyMessageBox(hDlg, IDS_NOW_ON, IDS_ENABLE_WARNING,
|
|
IDS_GENERIC, MB_OK);
|
|
}
|
|
else
|
|
{
|
|
CRegKey keyRatings;
|
|
|
|
if ( keyRatings.Open( HKEY_LOCAL_MACHINE, szRATINGS ) == ERROR_SUCCESS )
|
|
{
|
|
DWORD dwFlag;
|
|
|
|
// $REVIEW - Should we call RemoveSupervisorPassword() or not delete the Key at all?
|
|
|
|
// Delete the supervisor key so that we don't load
|
|
// ratings by other components and we "quick" know it is off.
|
|
|
|
keyRatings.DeleteValue( szRatingsSupervisorKeyName );
|
|
|
|
if ( keyRatings.QueryValue( dwFlag, szTURNOFF ) == ERROR_SUCCESS )
|
|
{
|
|
if ( dwFlag != 1 )
|
|
{
|
|
CTurnOffDialog turnOffDialog;
|
|
|
|
turnOffDialog.DoModal( hDlg );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CTurnOffDialog turnOffDialog;
|
|
|
|
turnOffDialog.DoModal( hDlg );
|
|
}
|
|
}
|
|
}
|
|
|
|
EnableDlgItems();
|
|
}
|
|
}
|
|
|
|
return 1L;
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
ASSERT( gPRSI );
|
|
|
|
if ( gPRSI )
|
|
{
|
|
gPRSI->fSettingsValid = TRUE;
|
|
gPRSI->SaveRatingSystemInfo();
|
|
}
|
|
|
|
return PSNRET_NOERROR;
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds);
|
|
|
|
return 0L;
|
|
}
|
|
|
|
LRESULT CIntroDialog::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU,
|
|
(DWORD_PTR)(LPVOID)aIds);
|
|
|
|
return 0L;
|
|
}
|
|
|
|
void CIntroDialog::EnableDlgItems( void )
|
|
{
|
|
CHAR pszBuf[MAXPATHLEN];
|
|
PicsUser *pUser = ::GetUserObject();
|
|
|
|
if (!gPRSI->fRatingInstalled)
|
|
{
|
|
MLLoadStringA(IDS_RATING_NEW, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_INTRO_TEXT, pszBuf);
|
|
|
|
MLLoadStringA(IDS_TURN_ONOFF, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_TURN_ONOFF, pszBuf);
|
|
::EnableWindow(GetDlgItem( IDC_TURN_ONOFF), FALSE);
|
|
}
|
|
else if (pUser && pUser->fEnabled)
|
|
{
|
|
MLLoadStringA(IDS_RATING_ON, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_INTRO_TEXT, pszBuf);
|
|
|
|
MLLoadStringA(IDS_TURN_OFF, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_TURN_ONOFF, pszBuf);
|
|
::EnableWindow(GetDlgItem( IDC_TURN_ONOFF), TRUE);
|
|
}
|
|
else
|
|
{
|
|
MLLoadStringA(IDS_RATING_OFF, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_INTRO_TEXT, pszBuf);
|
|
|
|
MLLoadStringA(IDS_TURN_ON, pszBuf, sizeof(pszBuf));
|
|
SetDlgItemText( IDC_TURN_ONOFF, pszBuf);
|
|
::EnableWindow(GetDlgItem( IDC_TURN_ONOFF), TRUE);
|
|
}
|
|
}
|