windows-nt/Source/XPSP1/NT/shell/osshell/accessib/accwiz/pgextras.h
2020-09-26 16:20:57 +08:00

520 lines
14 KiB
C++

//Copyright (c) 1997-2000 Microsoft Corporation
#ifndef _INC_PGEXTRAS_H
#define _INC_PGEXTRAS_H
#include "pgbase.h"
#include "Select.h"
class CYesNoPg : public WizardPage
{
public:
CYesNoPg(LPPROPSHEETPAGE ppsp, int nIdTitle, int nIdSubTitle, int nPageId)
: WizardPage(ppsp, nIdTitle, nIdSubTitle)
{
m_dwPageId = nPageId;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
}
protected:
virtual BOOL IsOptionSet() = 0;
virtual void SetOptions(BOOL bOn) = 0;
virtual int GetSettingsPage() {return 0;} // Default is no next page
LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
// Make sure the controls exist
_ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOYES));
_ASSERTE(GetDlgItem(m_hwnd, IDC_RADIONO));
// Set Yes/No buttons
Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES), IsOptionSet());
Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIONO), !IsOptionSet());
return 1;
}
LRESULT OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = 1;
SetOptions(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES)));
g_Options.ApplyPreview();
return lResult;
}
LRESULT OnPSN_WizNext(HWND hwnd, INT idCtl, LPPSHNOTIFY pnmh)
{
DWORD dwTemp = GetSettingsPage();
if(dwTemp)
{
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES)))
sm_WizPageOrder.AddPages(m_dwPageId, &dwTemp, 1);
else
sm_WizPageOrder.RemovePages(&dwTemp, 1);
}
return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh);
}
};
class CSoundSentryPg : public CYesNoPg
{
public:
CSoundSentryPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_SNDWIZSENTRYTITLE, IDS_SNDWIZSENTRYSUBTITLE, IDD_SNDWIZSENTRYSHOWSOUNDS) {}
protected:
BOOL IsOptionSet()
{
return (g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags & SSF_SOUNDSENTRYON);
}
void SetOptions(BOOL bOn)
{
if(bOn)
{
g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags |= SSF_SOUNDSENTRYON;
g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags &= SSF_VALID;
// Hard code to flash 'Window' if we are setting this option
g_Options.m_schemePreview.m_SOUNDSENTRY.iWindowsEffect = SSWF_WINDOW;
// For NT: The other options are not supported. a-anilk
g_Options.m_schemePreview.m_SOUNDSENTRY.iFSTextEffect = 0;
g_Options.m_schemePreview.m_SOUNDSENTRY.iFSGrafEffect = 0;
}
else
g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags &= ~SSF_SOUNDSENTRYON;
}
};
class CShowSoundsPg : public CYesNoPg
{
public:
CShowSoundsPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_SNDWIZSHOWSOUNDSTITLE, IDS_SNDWIZSHOWSOUNDSSUBTITLE, IDD_SNDWIZSENTRYSHOWSOUNDS2) {}
protected:
BOOL IsOptionSet()
{
return (g_Options.m_schemePreview.m_bShowSounds);
}
void SetOptions(BOOL bOn)
{
g_Options.m_schemePreview.m_bShowSounds = bOn;
}
};
class CFilterKeysPg : public CYesNoPg
{
public:
CFilterKeysPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_WIZFILTERKEYSTITLE, IDS_WIZFILTERKEYSSUBTITLE, IDD_KBDWIZFILTERKEYS1) {}
protected:
BOOL IsOptionSet()
{
// Return TRUE if filterkeys is ON
return (g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_FILTERKEYSON);
}
void SetOptions(BOOL bOn)
{
if(bOn)
{
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_FILTERKEYSON;
// this code only sets iBounceMSec and doesn't let users set the
// other filter key options so init the other values to zero
g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec = 0;
g_Options.m_schemePreview.m_FILTERKEYS.iDelayMSec = 0;
g_Options.m_schemePreview.m_FILTERKEYS.iRepeatMSec = 0;
}
else
{
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_FILTERKEYSON;
}
}
int GetSettingsPage() {return IDD_KBDWIZFILTERKEYS2;}
};
/***************************************/
//
// Times are in milliseconds
//
#define BOUNCESIZE 5
UINT BounceTable[BOUNCESIZE] = {
{ 500 },
{ 700 },
{ 1000 },
{ 1500 },
{ 2000 }
};
class CFilterKeysSettingsPg : public WizardPage
{
public:
CFilterKeysSettingsPg(LPPROPSHEETPAGE ppsp)
: WizardPage(ppsp, IDS_WIZFILTERKEYSETTING, IDS_WIZFILTERKEYSSUBTITLE)
{
m_dwPageId = IDD_KBDWIZFILTERKEYS2;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
}
protected:
void UpdateTime()
{
INT_PTR nBounceRate = SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_GETPOS, 0,0);
if(nBounceRate < 1 || nBounceRate > BOUNCESIZE)
nBounceRate = 1;
// Look up in table
nBounceRate = BounceTable[nBounceRate - 1];
TCHAR buf[10], buf2[20];
wsprintf(buf,__TEXT("%d.%d"),nBounceRate/1000, (nBounceRate%1000)/100);
GetNumberFormat(LOCALE_USER_DEFAULT, 0, buf, NULL, buf2, 20);
SetDlgItemText(m_hwnd, IDC_BK_TIME, buf2);
}
LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
_ASSERTE(g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec);
_ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES));
_ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOBEEPNO));
Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES), (g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_CLICKON));
Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPNO), !(g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_CLICKON));
// Set slider for bounce rate
SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_SETRANGE,
TRUE,MAKELONG(1,BOUNCESIZE));
// Figure out initial settings
// Make sure initial slider settings is not SMALLER than current setting
int nIndex = 0;
for(int i=BOUNCESIZE - 1;i>=0;i--)
{
if(BounceTable[i] >= g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec)
nIndex = i;
else
break;
}
SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_SETPOS, TRUE, nIndex+1);
UpdateTime();
return 1;
}
LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_HSCROLL:
{
UpdateTime();
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES)))
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_CLICKON;
else
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_CLICKON;
// Bounce Keys
INT_PTR nIndex = SendDlgItemMessage(m_hwnd, IDC_BK_BOUNCERATE, TBM_GETPOS, 0, 0);
// this code only sets iBounceMSec and doesn't let users set the
// other filter key options so init the other values to zero
g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec = 0;
g_Options.m_schemePreview.m_FILTERKEYS.iDelayMSec = 0;
g_Options.m_schemePreview.m_FILTERKEYS.iRepeatMSec = 0;
g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec = BounceTable[nIndex - 1];
g_Options.ApplyPreview();
}
break;
default:
break;
}
return 0;
}
// Handle Next> and make sure you transfer all settings as the user may not
// always change bounce repeat rate : a-anilk
LRESULT OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = 1;
WORD wNotifyCode = HIWORD(wParam);
WORD wCtlID = LOWORD(wParam);
HWND hwndCtl = (HWND)lParam;
switch(wCtlID)
{
case IDC_RADIOBEEPYES:
case IDC_RADIOBEEPNO:
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES)))
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_CLICKON;
else
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_CLICKON;
g_Options.ApplyPreview();
lResult = 0;
break;
default:
break;
}
return lResult;
}
};
////////////////////////////////////////////////////////////////////
// Mouse Keys
class CMouseKeysPg : public CYesNoPg
{
public:
CMouseKeysPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_MSEWIZMOUSEKEYSTITLE, IDS_MSEWIZMOUSEKEYSSUBTITLE, IDD_MSEWIZMOUSEKEYS) {}
protected:
BOOL IsOptionSet()
{
return (g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_MOUSEKEYSON);
}
void SetOptions(BOOL bOn)
{
if(bOn)
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MOUSEKEYSON;
else
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_MOUSEKEYSON;
}
int GetSettingsPage() {return IDD_MSEWIZMOUSEKEYS1;}
};
static UINT g_nSpeedTable[] = { 10, 20, 30, 40, 60, 80, 120, 180, 360 };
static UINT g_nAccelTable[] = { 5000, 4500, 4000, 3500, 3000, 2500, 2000, 1500, 1000 };
class CMouseKeysSettingsPg : public WizardPage
{
public:
CMouseKeysSettingsPg(LPPROPSHEETPAGE ppsp)
: WizardPage(ppsp, IDS_MSEWIZMOUSEKEYSETTING, IDS_MSEWIZMOUSEKEYSSUBTITLE)
{
m_dwPageId = IDD_MSEWIZMOUSEKEYS1;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
}
protected:
LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
// ALWAYS use modifiers
// Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_USEMODKEYS), g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_MODIFIERS);
if(g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_REPLACENUMBERS)
Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_NLON), TRUE);
else
Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_NLOFF), TRUE);
SendDlgItemMessage(m_hwnd,IDC_MK_TOPSPEED, TBM_SETRANGE, TRUE,MAKELONG(0,8));
SendDlgItemMessage(m_hwnd,IDC_MK_ACCEL, TBM_SETRANGE, TRUE,MAKELONG(0,8));
int nIndex = 0;
for(int i=8;i>=0;i--)
{
if(g_nSpeedTable[i] >= g_Options.m_schemePreview.m_MOUSEKEYS.iMaxSpeed)
nIndex = i;
else
break;
}
SendDlgItemMessage(m_hwnd,IDC_MK_TOPSPEED, TBM_SETPOS, TRUE, nIndex);
for(i=8;i>=0;i--)
{
if(g_nAccelTable[i] <= g_Options.m_schemePreview.m_MOUSEKEYS.iTimeToMaxSpeed)
nIndex = i;
else
break;
}
SendDlgItemMessage(m_hwnd,IDC_MK_ACCEL, TBM_SETPOS, TRUE, nIndex);
return 1;
}
void GetSettingsFromControls()
{
INT_PTR nIndex;
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MOUSEKEYSON;
if(TRUE/*Button_GetCheck(GetDlgItem(m_hwnd, IDC_MK_USEMODKEYS))*/) // NOTE: ALWAYS use modifiers
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MODIFIERS;
else
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_MODIFIERS;
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_MK_NLON)))
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_REPLACENUMBERS;
else
g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_REPLACENUMBERS;
nIndex = SendDlgItemMessage(m_hwnd, IDC_MK_TOPSPEED, TBM_GETPOS, 0, 0);
g_Options.m_schemePreview.m_MOUSEKEYS.iMaxSpeed = g_nSpeedTable[nIndex];
nIndex = SendDlgItemMessage(m_hwnd, IDC_MK_ACCEL, TBM_GETPOS, 0, 0);
g_Options.m_schemePreview.m_MOUSEKEYS.iTimeToMaxSpeed = g_nAccelTable[nIndex];
#pragma message("Handle THis!")
// 3/15/95 -
// Always init the control speed to 1/8 of the screen width/
// g_mk.iCtrlSpeed = GetSystemMetrics(SM_CXSCREEN) / 16;
g_Options.ApplyPreview();
}
LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_HSCROLL:
GetSettingsFromControls();
break;
default:
break;
}
return 0;
}
LRESULT OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = 1;
WORD wNotifyCode = HIWORD(wParam);
WORD wCtlID = LOWORD(wParam);
HWND hwndCtl = (HWND)lParam;
switch(wCtlID)
{
case IDC_MK_NLON:
case IDC_MK_NLOFF:
GetSettingsFromControls();
lResult = 0;
break;
default:
break;
}
return lResult;
}
};
//
////////////////////////////////////////////////////////////////////
class CStickyKeysPg : public CYesNoPg
{
public:
CStickyKeysPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_WIZSTICKYKEYSTITLE, IDS_WIZSTICKYKEYSSUBTITLE, IDD_KBDWIZSTICKYKEYS) {}
protected:
BOOL IsOptionSet()
{
return g_Options.m_schemePreview.m_STICKYKEYS.dwFlags & SKF_STICKYKEYSON;
}
void SetOptions(BOOL bOn)
{
if(bOn)
{
g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_STICKYKEYSON;
// Turn selected flags on
g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_TRISTATE;
g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_TWOKEYSOFF;
g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_AUDIBLEFEEDBACK;
}
else
g_Options.m_schemePreview.m_STICKYKEYS.dwFlags &= ~SKF_STICKYKEYSON;
}
};
class CToggleKeysPg : public CYesNoPg
{
public:
CToggleKeysPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_WIZTOGGLEKEYSTITLE, IDS_WIZTOGGLEKEYSSUBTITLE, IDD_KBDWIZTOGGLEKEYS) {}
protected:
BOOL IsOptionSet()
{
return g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags & TKF_TOGGLEKEYSON;
}
void SetOptions(BOOL bOn)
{
if(bOn)
g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags |= TKF_TOGGLEKEYSON;
else
g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags &= ~TKF_TOGGLEKEYSON;
}
};
class CShowKeyboardHelpPg : public CYesNoPg
{
public:
CShowKeyboardHelpPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_WIZSHOWEXTRAKEYBOARDHELPTITLE, IDS_WIZSHOWEXTRAKEYBOARDHELPSUBTITLE, IDD_KBDWIZSHOWEXTRAKEYBOARDHELP) {}
protected:
BOOL IsOptionSet()
{
return g_Options.m_schemePreview.m_bShowExtraKeyboardHelp;
}
void SetOptions(BOOL bOn)
{
g_Options.m_schemePreview.m_bShowExtraKeyboardHelp = bOn;
}
};
class CMouseSpeedPg : public WizardPage
{
public:
CMouseSpeedPg(LPPROPSHEETPAGE ppsp)
: WizardPage(ppsp, IDS_MSEWIZMOUSESPEEDTITLE, IDS_MSEWIZMOUSESPEEDSUBTITLE)
{
m_dwPageId = IDD_MSEWIZMOUSESPEED;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
}
protected:
LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
// Set slider for mouse speed, (limit 1 to 20), and set its initial value
SendDlgItemMessage(m_hwnd,IDC_SLIDER1, TBM_SETRANGE, TRUE,MAKELONG(1,20));
SendDlgItemMessage(m_hwnd,IDC_SLIDER1, TBM_SETPOS, TRUE, min(20, max(1, g_Options.m_schemePreview.m_nMouseSpeed)));
return 1;
}
LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_HSCROLL:
g_Options.m_schemePreview.m_nMouseSpeed = (UINT)SendDlgItemMessage(m_hwnd, IDC_SLIDER1, TBM_GETPOS, 0, 0);
g_Options.ApplyPreview();
break;
default:
break;
}
return 0;
}
};
class CMouseTrailsPg : public CYesNoPg
{
public:
CMouseTrailsPg(LPPROPSHEETPAGE ppsp)
: CYesNoPg(ppsp, IDS_MSEWIZMOUSETRAILSTITLE, IDS_MSEWIZMOUSETRAILSSUBTITLE, IDD_MSEWIZMOUSETRAILS) {}
protected:
BOOL IsOptionSet()
{
return (g_Options.m_schemePreview.m_nMouseTrails > 1);
}
void SetOptions(BOOL bOn)
{
g_Options.m_schemePreview.m_nMouseTrails = bOn?7:0;
}
};
#endif // _INC_PGEXTRAS_H