2 * PROJECT: ReactOS Accessibility Control Panel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/access/general.c
5 * PURPOSE: General accessibility settings
6 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
7 * Copyright 2007 Eric Kohl
14 static UINT nBaudArray
[BAUDTICKS
] = {300, 1200, 2400, 4800, 9600, 19200};
18 SerialKeysDlgProc(HWND hwndDlg
,
23 PGLOBAL_DATA pGlobalData
;
26 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
31 pGlobalData
= (PGLOBAL_DATA
)lParam
;
32 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
34 /* Add the COM-Ports 1 - 4 to the list */
35 for (i
= 0; i
< 4; i
++)
39 _stprintf(szBuffer
, _T("COM%d"), i
+ 1);
40 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
43 /* Determine the current port */
44 if (pGlobalData
->serialKeys
.lpszActivePort
&& pGlobalData
->serialKeys
.lpszActivePort
[0])
46 i
= pGlobalData
->serialKeys
.lpszActivePort
[3] - '1';
52 /* Make COM1 the default port */
54 _tcscpy(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM1"));
57 /* Set the current port */
58 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_SETCURSEL
, i
, 0);
60 /* Determine the current baud rate */
62 for (i
= 0; i
< BAUDTICKS
; i
++)
66 _stprintf(szBuffer
, _T("%d Baud"), nBaudArray
[i
]);
67 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
69 if (pGlobalData
->serialKeys
.iBaudRate
== nBaudArray
[i
])
73 /* Set the current baud rate */
74 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_SETCURSEL
, n
, 0);
78 switch (LOWORD(wParam
))
81 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_GETCURSEL
, 0, 0) + 1;
82 _stprintf(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM%d"), i
);
84 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_GETCURSEL
, 0, 0);
85 pGlobalData
->serialKeys
.iBaudRate
= nBaudArray
[i
];
87 EndDialog(hwndDlg
, TRUE
);
91 EndDialog(hwndDlg
, FALSE
);
105 FillResetComboBox(HWND hwnd
)
111 if (LoadString(hApplet
, IDS_MINUTES
, szMinutes
, 20) == 0)
112 lstrcpy(szMinutes
, L
"Minutes");
114 for (i
= 0; i
< 6; i
++)
116 _stprintf(szBuffer
, _T("%u %s"), (i
+ 1) * 5, szMinutes
);
126 WriteGlobalData(PGLOBAL_DATA pGlobalData
)
132 SystemParametersInfo(SPI_SETACCESSTIMEOUT
,
133 sizeof(ACCESSTIMEOUT
),
134 &pGlobalData
->accessTimeout
,
135 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
137 SystemParametersInfo(SPI_SETSERIALKEYS
,
139 &pGlobalData
->serialKeys
,
140 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
142 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
143 _T("Control Panel\\Accessibility"),
146 REG_OPTION_NON_VOLATILE
,
151 if (lError
!= ERROR_SUCCESS
)
155 _T("Warning Sounds"),
158 (LPBYTE
)&pGlobalData
->bWarningSounds
,
162 _T("Sound On Activation"),
165 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
172 /* Property page dialog callback */
174 GeneralPageProc(HWND hwndDlg
,
179 PGLOBAL_DATA pGlobalData
;
182 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
187 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
188 if (pGlobalData
== NULL
)
191 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
193 /* Set access timeout info */
194 CheckDlgButton(hwndDlg
,
196 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? BST_CHECKED
: BST_UNCHECKED
);
197 FillResetComboBox(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
));
198 SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_SETCURSEL
,
199 (pGlobalData
->accessTimeout
.iTimeOutMSec
/ 300000) - 1, 0);
200 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
201 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
203 CheckDlgButton(hwndDlg
,
204 IDC_NOTIFICATION_MESSAGE
,
205 pGlobalData
->bWarningSounds
? BST_CHECKED
: BST_UNCHECKED
);
207 CheckDlgButton(hwndDlg
,
208 IDC_NOTIFICATION_SOUND
,
209 pGlobalData
->bSoundOnActivation
? BST_CHECKED
: BST_UNCHECKED
);
211 /* Set serial keys info */
212 CheckDlgButton(hwndDlg
,
214 pGlobalData
->serialKeys
.dwFlags
& SERKF_SERIALKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
215 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BOX
),
216 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
217 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BUTTON
),
218 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
223 switch (LOWORD(wParam
))
226 pGlobalData
->accessTimeout
.dwFlags
^= ATF_TIMEOUTON
;
227 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
228 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
229 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
232 case IDC_RESET_COMBO
:
233 if (HIWORD(wParam
) == CBN_CLOSEUP
)
236 nSel
= SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_GETCURSEL
, 0, 0);
237 pGlobalData
->accessTimeout
.iTimeOutMSec
= (ULONG
)((nSel
+ 1) * 300000);
238 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
242 case IDC_NOTIFICATION_MESSAGE
:
243 pGlobalData
->bWarningSounds
= !pGlobalData
->bWarningSounds
;
244 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
247 case IDC_NOTIFICATION_SOUND
:
248 pGlobalData
->bSoundOnActivation
= !pGlobalData
->bSoundOnActivation
;
249 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
253 pGlobalData
->serialKeys
.dwFlags
^= SERKF_SERIALKEYSON
;
254 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
257 case IDC_SERIAL_BUTTON
:
258 if (DialogBoxParam(hApplet
,
259 MAKEINTRESOURCE(IDD_SERIALKEYSOPTIONS
),
261 (DLGPROC
)SerialKeysDlgProc
,
262 (LPARAM
)pGlobalData
))
263 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
266 case IDC_ADMIN_LOGON_BOX
:
269 case IDC_ADMIN_USERS_BOX
:
278 lppsn
= (LPPSHNOTIFY
)lParam
;
279 if (lppsn
->hdr
.code
== PSN_APPLY
)
281 WriteGlobalData(pGlobalData
);