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