1 /* $Id: general.c 29112 2007-09-19 21:31:49Z ekohl $
3 * PROJECT: ReactOS Accessibility Control Panel
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/access/general.c
6 * PURPOSE: General accessibility settings
7 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
8 * Copyright 2007 Eric Kohl
15 static UINT nBaudArray
[BAUDTICKS
] = {300, 1200, 2400, 4800, 9600, 19200};
19 SerialKeysDlgProc(HWND hwndDlg
,
24 PGLOBAL_DATA pGlobalData
;
27 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
32 pGlobalData
= (PGLOBAL_DATA
)lParam
;
33 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
35 /* Add the COM-Ports 1 - 4 to the list */
36 for (i
= 0; i
< 4; i
++)
40 _stprintf(szBuffer
, _T("COM%d"), i
+ 1);
41 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
44 /* Determine the current port */
45 if (pGlobalData
->serialKeys
.lpszActivePort
&& pGlobalData
->serialKeys
.lpszActivePort
[0])
47 i
= pGlobalData
->serialKeys
.lpszActivePort
[3] - '1';
53 /* Make COM1 the default port */
55 _tcscpy(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM1"));
58 /* Set the current port */
59 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_SETCURSEL
, i
, 0);
61 /* Determine the current baud rate */
63 for (i
= 0; i
< BAUDTICKS
; i
++)
67 _stprintf(szBuffer
, _T("%d Baud"), nBaudArray
[i
]);
68 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
70 if (pGlobalData
->serialKeys
.iBaudRate
== nBaudArray
[i
])
74 /* Set the current baud rate */
75 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_SETCURSEL
, n
, 0);
79 switch (LOWORD(wParam
))
82 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_GETCURSEL
, 0, 0) + 1;
83 _stprintf(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM%d"), i
);
85 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_GETCURSEL
, 0, 0);
86 pGlobalData
->serialKeys
.iBaudRate
= nBaudArray
[i
];
88 EndDialog(hwndDlg
, TRUE
);
92 EndDialog(hwndDlg
, FALSE
);
106 FillResetComboBox(HWND hwnd
)
112 if (LoadString(hApplet
, IDS_MINUTES
, szMinutes
, 20) == 0)
113 lstrcpy(szMinutes
, L
"Minutes");
115 for (i
= 0; i
< 6; i
++)
117 _stprintf(szBuffer
, _T("%u %s"), (i
+ 1) * 5, szMinutes
);
127 WriteGlobalData(PGLOBAL_DATA pGlobalData
)
133 SystemParametersInfo(SPI_SETACCESSTIMEOUT
,
134 sizeof(ACCESSTIMEOUT
),
135 &pGlobalData
->accessTimeout
,
136 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
138 SystemParametersInfo(SPI_SETSERIALKEYS
,
140 &pGlobalData
->serialKeys
,
141 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
143 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
144 _T("Control Panel\\Accessibility"),
147 REG_OPTION_NON_VOLATILE
,
152 if (lError
!= ERROR_SUCCESS
)
156 _T("Warning Sounds"),
159 (LPBYTE
)&pGlobalData
->bWarningSounds
,
163 _T("Sound On Activation"),
166 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
173 /* Property page dialog callback */
175 GeneralPageProc(HWND hwndDlg
,
180 PGLOBAL_DATA pGlobalData
;
183 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
188 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
189 if (pGlobalData
== NULL
)
192 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
194 /* Set access timeout info */
195 CheckDlgButton(hwndDlg
,
197 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? BST_CHECKED
: BST_UNCHECKED
);
198 FillResetComboBox(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
));
199 SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_SETCURSEL
,
200 (pGlobalData
->accessTimeout
.iTimeOutMSec
/ 300000) - 1, 0);
201 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
202 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
204 CheckDlgButton(hwndDlg
,
205 IDC_NOTIFICATION_MESSAGE
,
206 pGlobalData
->bWarningSounds
? BST_CHECKED
: BST_UNCHECKED
);
208 CheckDlgButton(hwndDlg
,
209 IDC_NOTIFICATION_SOUND
,
210 pGlobalData
->bSoundOnActivation
? BST_CHECKED
: BST_UNCHECKED
);
212 /* Set serial keys info */
213 CheckDlgButton(hwndDlg
,
215 pGlobalData
->serialKeys
.dwFlags
& SERKF_SERIALKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
216 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BOX
),
217 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
218 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BUTTON
),
219 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
224 switch (LOWORD(wParam
))
227 pGlobalData
->accessTimeout
.dwFlags
^= ATF_TIMEOUTON
;
228 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
229 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
230 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
233 case IDC_RESET_COMBO
:
234 if (HIWORD(wParam
) == CBN_CLOSEUP
)
237 nSel
= SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_GETCURSEL
, 0, 0);
238 pGlobalData
->accessTimeout
.iTimeOutMSec
= (ULONG
)((nSel
+ 1) * 300000);
239 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
243 case IDC_NOTIFICATION_MESSAGE
:
244 pGlobalData
->bWarningSounds
= !pGlobalData
->bWarningSounds
;
245 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
248 case IDC_NOTIFICATION_SOUND
:
249 pGlobalData
->bSoundOnActivation
= !pGlobalData
->bSoundOnActivation
;
250 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
254 pGlobalData
->serialKeys
.dwFlags
^= SERKF_SERIALKEYSON
;
255 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
258 case IDC_SERIAL_BUTTON
:
259 if (DialogBoxParam(hApplet
,
260 MAKEINTRESOURCE(IDD_SERIALKEYSOPTIONS
),
262 (DLGPROC
)SerialKeysDlgProc
,
263 (LPARAM
)pGlobalData
))
264 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
267 case IDC_ADMIN_LOGON_BOX
:
270 case IDC_ADMIN_USERS_BOX
:
279 lppsn
= (LPPSHNOTIFY
)lParam
;
280 if (lppsn
->hdr
.code
== PSN_APPLY
)
282 WriteGlobalData(pGlobalData
);