262 lines
7.1 KiB
C++
262 lines
7.1 KiB
C++
#include "pch.hxx" // pch
|
|
#pragma hdrstop
|
|
|
|
#include "resource.h"
|
|
#include "pgFltKey.h"
|
|
|
|
|
|
|
|
/***/
|
|
|
|
|
|
// Times are in milliseconds
|
|
|
|
#define BOUNCESIZE 5
|
|
UINT BounceTable[BOUNCESIZE] = {
|
|
{ 500 },
|
|
{ 700 },
|
|
{ 1000 },
|
|
{ 1500 },
|
|
{ 2000 }
|
|
};
|
|
|
|
/***/
|
|
|
|
|
|
// Times are in milliseconds
|
|
|
|
#define ACCEPTSIZE 7
|
|
UINT AcceptTable[ACCEPTSIZE] = {
|
|
{ 0 },
|
|
{ 300 },
|
|
{ 500 },
|
|
{ 700 },
|
|
{ 1000 },
|
|
{ 1400 },
|
|
{ 2000 },
|
|
};
|
|
|
|
|
|
|
|
|
|
CFilterKeysPg::CFilterKeysPg(
|
|
LPPROPSHEETPAGE ppsp
|
|
) : WizardPage(ppsp, IDS_WIZFILTERKEYSTITLE, IDS_WIZFILTERKEYSSUBTITLE)
|
|
{
|
|
m_dwPageId = IDD_KBDWIZFILTERKEYS;
|
|
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
|
|
}
|
|
|
|
|
|
CFilterKeysPg::~CFilterKeysPg(
|
|
VOID
|
|
)
|
|
{
|
|
}
|
|
|
|
LRESULT
|
|
CFilterKeysPg::OnInitDialog(
|
|
HWND hwnd,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
Button_SetCheck(GetDlgItem(m_hwnd, IDC_FK_ENABLE), g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_FILTERKEYSON);
|
|
Button_SetCheck(GetDlgItem(m_hwnd, IDC_FK_SOUND), g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_CLICKON);
|
|
|
|
if(g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec)
|
|
Button_SetCheck(GetDlgItem(m_hwnd, IDC_FK_BOUNCE), TRUE);
|
|
else
|
|
Button_SetCheck(GetDlgItem(m_hwnd, IDC_FK_REPEAT), TRUE);
|
|
|
|
|
|
|
|
// Set slider for bounce rate
|
|
SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_SETRANGE,
|
|
TRUE,MAKELONG(1,BOUNCESIZE));
|
|
|
|
// Set slider for accept rate
|
|
SendDlgItemMessage(m_hwnd,IDC_RK_ACCEPTRATE, TBM_SETRANGE,
|
|
TRUE,MAKELONG(1,ACCEPTSIZE));
|
|
|
|
// 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);
|
|
|
|
for(i=ACCEPTSIZE - 1;i>=0;i--)
|
|
{
|
|
if(AcceptTable[i] >= g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec)
|
|
nIndex = i;
|
|
else
|
|
break;
|
|
}
|
|
SendDlgItemMessage(m_hwnd,IDC_RK_ACCEPTRATE, TBM_SETPOS, TRUE, nIndex+1);
|
|
|
|
|
|
UpdateControls();
|
|
UpdateSliders();
|
|
return 1;
|
|
}
|
|
|
|
|
|
void CFilterKeysPg::UpdateControls()
|
|
{
|
|
BOOL bUseFilterKeys = Button_GetCheck(GetDlgItem(m_hwnd, IDC_FK_ENABLE));
|
|
BOOL bUseBounce = Button_GetCheck(GetDlgItem(m_hwnd, IDC_FK_BOUNCE));
|
|
|
|
// Bounce Keys
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_FK_BOUNCE), bUseFilterKeys);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_BK_TIME), bUseFilterKeys && bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_BK_TIME_LBL2), bUseFilterKeys && bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_BK_TIME_LBL_SHORT), bUseFilterKeys && bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_BK_BOUNCERATE), bUseFilterKeys && bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_BK_TIME_LBL_LONG), bUseFilterKeys && bUseBounce);
|
|
|
|
// Repeat Keys
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_FK_REPEAT), bUseFilterKeys);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RK_WAITTIME), bUseFilterKeys && !bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RK_WAITTIME_LBL2), bUseFilterKeys && !bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RK_WAITTIME_LBL_SHORT), bUseFilterKeys && !bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RK_ACCEPTRATE), bUseFilterKeys && !bUseBounce);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RK_WAITTIME_LBL_LONG), bUseFilterKeys && !bUseBounce);
|
|
|
|
// Other Controls
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_FK_SOUND), bUseFilterKeys);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_FK_LBL_TESTBOX), bUseFilterKeys);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_FK_TESTBOX), bUseFilterKeys);
|
|
|
|
}
|
|
|
|
|
|
LRESULT
|
|
CFilterKeysPg::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_FK_ENABLE:
|
|
case IDC_FK_BOUNCE:
|
|
case IDC_FK_REPEAT:
|
|
// These commands require us to re-enable/disable the appropriate controls
|
|
UpdateControls();
|
|
lResult = 0;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return lResult;
|
|
}
|
|
|
|
void
|
|
CFilterKeysPg::UpdateSliders()
|
|
{
|
|
int nBounceRate = SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_GETPOS, 0,0);
|
|
int nAcceptRate = SendDlgItemMessage(m_hwnd,IDC_RK_ACCEPTRATE, TBM_GETPOS, 0,0);
|
|
if(nBounceRate < 1 || nBounceRate > BOUNCESIZE)
|
|
nBounceRate = 1;
|
|
if(nAcceptRate < 1 || nAcceptRate > ACCEPTSIZE)
|
|
nAcceptRate = 1;
|
|
|
|
// Look up in table
|
|
nBounceRate = BounceTable[nBounceRate - 1];
|
|
nAcceptRate = AcceptTable[nAcceptRate - 1];
|
|
|
|
TCHAR buf[10], buf2[10];
|
|
wsprintf(buf,__TEXT("%d.%d"),nBounceRate/1000, (nBounceRate%1000)/100);
|
|
GetNumberFormat(LOCALE_USER_DEFAULT,0,buf,NULL,buf2,6);
|
|
SetDlgItemText(m_hwnd, IDC_BK_TIME, buf2);
|
|
|
|
wsprintf(buf,__TEXT("%d.%d"),nAcceptRate/1000, (nAcceptRate%1000)/100);
|
|
GetNumberFormat(LOCALE_USER_DEFAULT,0,buf,NULL,buf2,6);
|
|
SetDlgItemText(m_hwnd, IDC_RK_WAITTIME, buf2);
|
|
}
|
|
|
|
LRESULT
|
|
CFilterKeysPg::HandleMsg(
|
|
HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
switch(uMsg)
|
|
{
|
|
case WM_HSCROLL:
|
|
UpdateSliders();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
LRESULT
|
|
CFilterKeysPg::OnPSN_WizNext(
|
|
HWND hwnd,
|
|
INT idCtl,
|
|
LPPSHNOTIFY pnmh
|
|
)
|
|
{
|
|
BOOL bUseFilterKeys = Button_GetCheck(GetDlgItem(m_hwnd, IDC_FK_ENABLE));
|
|
|
|
|
|
if(bUseFilterKeys)
|
|
{
|
|
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_FILTERKEYSON;
|
|
BOOL bClick = Button_GetCheck(GetDlgItem(m_hwnd, IDC_FK_SOUND));
|
|
|
|
if(bClick)
|
|
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_CLICKON;
|
|
else
|
|
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_CLICKON;
|
|
|
|
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_FK_BOUNCE)))
|
|
{
|
|
// Bounce Keys
|
|
int nIndex = SendDlgItemMessage(m_hwnd, IDC_BK_BOUNCERATE, TBM_GETPOS, 0, 0);
|
|
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];
|
|
}
|
|
else
|
|
{
|
|
// Repeat Keys
|
|
int nIndex = SendDlgItemMessage(m_hwnd, IDC_RK_ACCEPTRATE, TBM_GETPOS, 0, 0);
|
|
#pragma message("HACK - Don't Hard Code Delay and Repeat rate")
|
|
g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec = AcceptTable[nIndex - 1];
|
|
g_Options.m_schemePreview.m_FILTERKEYS.iDelayMSec = 1000;
|
|
g_Options.m_schemePreview.m_FILTERKEYS.iRepeatMSec = 500;
|
|
g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec = 0;
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_FILTERKEYSON;
|
|
|
|
g_Options.ApplyPreview();
|
|
|
|
return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh);
|
|
}
|
|
|