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
22 static INT nBaudArray
[BAUDTICKS
] = {300, 1200, 2400, 4800, 9600, 19200};
26 SerialKeysDlgProc(HWND hwndDlg
,
31 PGLOBAL_DATA pGlobalData
;
34 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
39 pGlobalData
= (PGLOBAL_DATA
)lParam
;
40 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
42 /* Add the COM-Ports 1 - 4 to the list */
43 for (i
= 0; i
< 4; i
++)
47 _stprintf(szBuffer
, _T("COM%d"), i
+ 1);
48 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
51 /* Determine the current port */
52 if (pGlobalData
->serialKeys
.lpszActivePort
&& pGlobalData
->serialKeys
.lpszActivePort
[0])
54 i
= pGlobalData
->serialKeys
.lpszActivePort
[3] - '1';
60 /* Make COM1 the default port */
62 _tcscpy(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM1"));
65 /* Set the current port */
66 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_SETCURSEL
, i
, 0);
68 /* Determine the current baud rate */
70 for (i
= 0; i
< BAUDTICKS
; i
++)
74 _stprintf(szBuffer
, _T("%d Baud"), nBaudArray
[i
]);
75 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
77 if (pGlobalData
->serialKeys
.iBaudRate
== nBaudArray
[i
])
81 /* Set the current baud rate */
82 SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_SETCURSEL
, n
, 0);
86 switch (LOWORD(wParam
))
89 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_PORT_COMBO
, CB_GETCURSEL
, 0, 0) + 1;
90 _stprintf(pGlobalData
->serialKeys
.lpszActivePort
, _T("COM%d"), i
);
92 i
= SendDlgItemMessage(hwndDlg
, IDC_SERIAL_BAUD_COMBO
, CB_GETCURSEL
, 0, 0);
93 pGlobalData
->serialKeys
.iBaudRate
= nBaudArray
[i
];
95 EndDialog(hwndDlg
, TRUE
);
99 EndDialog(hwndDlg
, FALSE
);
113 FillResetComboBox(HWND hwnd
)
119 if (LoadString(hApplet
, IDS_MINUTES
, szMinutes
, 20) == 0)
120 lstrcpy(szMinutes
, L
"Minutes");
122 for (i
= 0; i
< 6; i
++)
124 _stprintf(szBuffer
, _T("%u %s"), (i
+ 1) * 5, szMinutes
);
134 WriteGlobalData(PGLOBAL_DATA pGlobalData
)
140 SystemParametersInfo(SPI_SETACCESSTIMEOUT
,
141 sizeof(ACCESSTIMEOUT
),
142 &pGlobalData
->accessTimeout
,
143 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
145 SystemParametersInfo(SPI_SETSERIALKEYS
,
147 &pGlobalData
->serialKeys
,
148 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
150 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
151 _T("Control Panel\\Accessibility"),
154 REG_OPTION_NON_VOLATILE
,
159 if (lError
!= ERROR_SUCCESS
)
163 _T("Warning Sounds"),
166 (LPBYTE
)&pGlobalData
->bWarningSounds
,
170 _T("Sound On Activation"),
173 (LPBYTE
)pGlobalData
->bSoundOnActivation
,
180 /* Property page dialog callback */
182 GeneralPageProc(HWND hwndDlg
,
187 PGLOBAL_DATA pGlobalData
;
190 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
195 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
196 if (pGlobalData
== NULL
)
199 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
201 /* Set access timeout info */
202 CheckDlgButton(hwndDlg
,
204 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? BST_CHECKED
: BST_UNCHECKED
);
205 FillResetComboBox(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
));
206 SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_SETCURSEL
,
207 (pGlobalData
->accessTimeout
.iTimeOutMSec
/ 300000) - 1, 0);
208 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
209 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
211 CheckDlgButton(hwndDlg
,
212 IDC_NOTIFICATION_MESSAGE
,
213 pGlobalData
->bWarningSounds
? BST_CHECKED
: BST_UNCHECKED
);
215 CheckDlgButton(hwndDlg
,
216 IDC_NOTIFICATION_SOUND
,
217 pGlobalData
->bSoundOnActivation
? BST_CHECKED
: BST_UNCHECKED
);
219 /* Set serial keys info */
220 CheckDlgButton(hwndDlg
,
222 pGlobalData
->serialKeys
.dwFlags
& SERKF_SERIALKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
223 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BOX
),
224 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
225 EnableWindow(GetDlgItem(hwndDlg
, IDC_SERIAL_BUTTON
),
226 pGlobalData
->serialKeys
.dwFlags
& SERKF_AVAILABLE
? TRUE
: FALSE
);
231 switch (LOWORD(wParam
))
234 pGlobalData
->accessTimeout
.dwFlags
^= ATF_TIMEOUTON
;
235 EnableWindow(GetDlgItem(hwndDlg
, IDC_RESET_COMBO
),
236 pGlobalData
->accessTimeout
.dwFlags
& ATF_TIMEOUTON
? TRUE
: FALSE
);
237 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
240 case IDC_RESET_COMBO
:
241 if (HIWORD(wParam
) == CBN_CLOSEUP
)
244 nSel
= SendDlgItemMessage(hwndDlg
, IDC_RESET_COMBO
, CB_GETCURSEL
, 0, 0);
245 pGlobalData
->accessTimeout
.iTimeOutMSec
= (ULONG
)((nSel
+ 1) * 300000);
246 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
250 case IDC_NOTIFICATION_MESSAGE
:
251 pGlobalData
->bWarningSounds
= !pGlobalData
->bWarningSounds
;
252 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
255 case IDC_NOTIFICATION_SOUND
:
256 pGlobalData
->bSoundOnActivation
= !pGlobalData
->bSoundOnActivation
;
257 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
261 pGlobalData
->serialKeys
.dwFlags
^= SERKF_SERIALKEYSON
;
262 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
265 case IDC_SERIAL_BUTTON
:
266 if (DialogBoxParam(hApplet
,
267 MAKEINTRESOURCE(IDD_SERIALKEYSOPTIONS
),
269 (DLGPROC
)SerialKeysDlgProc
,
270 (LPARAM
)pGlobalData
))
271 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
274 case IDC_ADMIN_LOGON_BOX
:
277 case IDC_ADMIN_USERS_BOX
:
286 lppsn
= (LPPSHNOTIFY
)lParam
;
287 if (lppsn
->hdr
.code
== PSN_APPLY
)
289 WriteGlobalData(pGlobalData
);