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 (johannes.anderwald@reactos.org)
7 * Copyright 2007 Eric Kohl
13 static UINT nBaudArray
[BAUDTICKS
] = {300, 1200, 2400, 4800, 9600, 19200};
17 SerialKeysDlgProc(HWND hwndDlg
,
22 PGLOBAL_DATA pGlobalData
;
25 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
30 pGlobalData
= (PGLOBAL_DATA
)lParam
;
31 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
33 /* Add the COM-Ports 1 - 4 to the list */
34 for (i
= 0; i
< 4; i
++)
38 _stprintf(szBuffer
, _T("COM%d"), i
+ 1);
39 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
42 /* Determine the current port */
43 if (pGlobalData
->serialKeys
.lpszActivePort
&& pGlobalData
->serialKeys
.lpszActivePort
[0])
45 i
= pGlobalData
->serialKeys
.lpszActivePort
[3] - '1';
51 /* Make COM1 the default port */
53 _tcscpy(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM1"));
56 /* Set the current port */
57 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_SETCURSEL
, i
, 0);
59 /* Determine the current baud rate */
61 for (i
= 0; i
< BAUDTICKS
; i
++)
65 _stprintf(szBuffer
, _T("%d Baud"), nBaudArray
[i
]);
66 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
68 if (pGlobalData
->serialKeys
.iBaudRate
== nBaudArray
[i
])
72 /* Set the current baud rate */
73 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_SETCURSEL
, n
, 0);
77 switch (LOWORD(wParam
))
80 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_GETCURSEL
, 0, 0) + 1;
81 _stprintf(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM%d"), i
);
83 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_GETCURSEL
, 0, 0);
84 pGlobalData
->serialKeys
.iBaudRate
= nBaudArray
[i
];
86 EndDialog(hwndDlg
, TRUE
);
90 EndDialog(hwndDlg
, FALSE
);
104 FillResetComboBox(HWND hwnd
)
110 if (LoadString(hApplet
, IDS_MINUTES
, szMinutes
, 20) == 0)
111 lstrcpy(szMinutes
, L
"Minutes");
113 for (i
= 0; i
< 6; i
++)
115 _stprintf(szBuffer
, _T("%u %s"), (i
+ 1) * 5, szMinutes
);
125 WriteGlobalData(PGLOBAL_DATA pGlobalData
)
131 SystemParametersInfo(SPI_SETACCESSTIMEOUT
,
132 sizeof(ACCESSTIMEOUT
),
133 &pGlobalData
->accessTimeout
,
134 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
136 SystemParametersInfo(SPI_SETSERIALKEYS
,
138 &pGlobalData
->serialKeys
,
139 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
141 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
142 _T("Control Panel\\Accessibility"),
145 REG_OPTION_NON_VOLATILE
,
150 if (lError
!= ERROR_SUCCESS
)
154 _T("Warning Sounds"),
157 (LPBYTE
)&pGlobalData
->bWarningSounds
,
161 _T("Sound On Activation"),
164 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
171 /* Property page dialog callback */
173 GeneralPageProc(HWND hwndDlg
,
178 PGLOBAL_DATA pGlobalData
;
181 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
186 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
187 if (pGlobalData
== NULL
)
190 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
192 /* Set access timeout info */
193 CheckDlgButton(hwndDlg
,
195 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? BST_CHECKED
: BST_UNCHECKED
);
196 FillResetComboBox(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
));
197 SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_SETCURSEL
,
198 (pGlobalData
->accessTimeout
.iTimeOutMSec
/ 300000) - 1, 0);
199 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
200 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
202 CheckDlgButton(hwndDlg
,
203 IDC_NOTIFICATION_MESSAGE
,
204 pGlobalData
->bWarningSounds
? BST_CHECKED
: BST_UNCHECKED
);
206 CheckDlgButton(hwndDlg
,
207 IDC_NOTIFICATION_SOUND
,
208 pGlobalData
->bSoundOnActivation
? BST_CHECKED
: BST_UNCHECKED
);
210 /* Set serial keys info */
211 CheckDlgButton(hwndDlg
,
213 pGlobalData
->serialKeys
.dwFlags
& SERKF_SERIALKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
214 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BOX
),
215 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
216 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BUTTON
),
217 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
222 switch (LOWORD(wParam
))
225 pGlobalData
->accessTimeout
.dwFlags
^= ATF_TIMEOUTON
;
226 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
227 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
228 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
231 case IDC_RESET_COMBO
:
232 if (HIWORD(wParam
) == CBN_CLOSEUP
)
235 nSel
= SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_GETCURSEL
, 0, 0);
236 pGlobalData
->accessTimeout
.iTimeOutMSec
= (ULONG
)((nSel
+ 1) * 300000);
237 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
241 case IDC_NOTIFICATION_MESSAGE
:
242 pGlobalData
->bWarningSounds
= !pGlobalData
->bWarningSounds
;
243 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
246 case IDC_NOTIFICATION_SOUND
:
247 pGlobalData
->bSoundOnActivation
= !pGlobalData
->bSoundOnActivation
;
248 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
252 pGlobalData
->serialKeys
.dwFlags
^= SERKF_SERIALKEYSON
;
253 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
256 case IDC_SERIAL_BUTTON
:
257 if (DialogBoxParam(hApplet
,
258 MAKEINTRESOURCE(IDD_SERIALKEYSOPTIONS
),
260 (DLGPROC
)SerialKeysDlgProc
,
261 (LPARAM
)pGlobalData
))
262 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
265 case IDC_ADMIN_LOGON_BOX
:
268 case IDC_ADMIN_USERS_BOX
:
277 lppsn
= (LPPSHNOTIFY
)lParam
;
278 if (lppsn
->hdr
.code
== PSN_APPLY
)
280 WriteGlobalData(pGlobalData
);