Synchronize with trunk revision 59781.
[reactos.git] / dll / cpl / access / sound.c
1 /*
2 * PROJECT: ReactOS Accessibility Control Panel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/access/sound.c
5 * PURPOSE: Sound-related acessibility settings
6 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
7 * Copyright 2007 Eric Kohl
8 */
9
10 #include "access.h"
11
12
13 static VOID
14 OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
15 {
16 TCHAR szBuffer[256];
17 UINT i;
18
19 /* Add strings to the combo-box */
20 for (i = 0; i < 4; i++)
21 {
22 LoadString(hApplet, IDS_SENTRY_NONE + i, szBuffer, 256);
23 SendDlgItemMessage(hwndDlg, IDC_SENTRY_COMBO, CB_ADDSTRING, 0, (LPARAM)szBuffer);
24 }
25
26 /* Select a combo-box item */
27 SendDlgItemMessage(hwndDlg, IDC_SENTRY_COMBO, CB_SETCURSEL, pGlobalData->ssSoundSentry.iWindowsEffect, 0);
28
29 /* Initialize SoundSentry settings */
30 if (!(pGlobalData->ssSoundSentry.dwFlags & SSF_AVAILABLE))
31 {
32 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_BOX), FALSE);
33 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_TEXT), FALSE);
34 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_COMBO), FALSE);
35 }
36 else
37 {
38 if (pGlobalData->ssSoundSentry.dwFlags & SSF_SOUNDSENTRYON)
39 {
40 CheckDlgButton(hwndDlg, IDC_SENTRY_BOX, BST_CHECKED);
41 }
42 else
43 {
44 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_TEXT), FALSE);
45 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_COMBO), FALSE);
46 }
47 }
48
49 /* Initialize ShowSounds settings */
50 if (pGlobalData->bShowSounds)
51 CheckDlgButton(hwndDlg, IDC_SSHOW_BOX, BST_CHECKED);
52 }
53
54
55 /* Property page dialog callback */
56 INT_PTR CALLBACK
57 SoundPageProc(HWND hwndDlg,
58 UINT uMsg,
59 WPARAM wParam,
60 LPARAM lParam)
61 {
62 PGLOBAL_DATA pGlobalData;
63
64 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
65
66 switch (uMsg)
67 {
68 case WM_INITDIALOG:
69 pGlobalData = (PGLOBAL_DATA)((LPPROPSHEETPAGE)lParam)->lParam;
70
71 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
72
73 OnInitDialog(hwndDlg, pGlobalData);
74 break;
75
76 case WM_COMMAND:
77 switch (LOWORD(wParam))
78 {
79 case IDC_SENTRY_BOX:
80 pGlobalData->ssSoundSentry.dwFlags ^= SSF_SOUNDSENTRYON;
81 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_TEXT), (pGlobalData->ssSoundSentry.dwFlags & SSF_SOUNDSENTRYON)?TRUE:FALSE);
82 EnableWindow(GetDlgItem(hwndDlg, IDC_SENTRY_COMBO), (pGlobalData->ssSoundSentry.dwFlags & SSF_SOUNDSENTRYON)?TRUE:FALSE);
83 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
84 break;
85
86 case IDC_SENTRY_COMBO:
87 if (HIWORD(wParam) == CBN_SELENDOK)
88 {
89 pGlobalData->ssSoundSentry.iWindowsEffect =
90 (DWORD)SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
91 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
92 }
93 break;
94
95 case IDC_SSHOW_BOX:
96 pGlobalData->bShowSounds = !pGlobalData->bShowSounds;
97 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
98 break;
99
100 default:
101 break;
102 }
103 break;
104
105 case WM_NOTIFY:
106 switch (((LPNMHDR)lParam)->code)
107 {
108 case PSN_APPLY:
109 SystemParametersInfo(SPI_SETSOUNDSENTRY,
110 sizeof(SOUNDSENTRY),
111 &pGlobalData->ssSoundSentry,
112 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
113 SystemParametersInfo(SPI_SETSHOWSOUNDS,
114 pGlobalData->bShowSounds,
115 0,
116 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
117 return TRUE;
118
119 default:
120 break;
121 }
122 break;
123 }
124
125 return FALSE;
126 }