[SNDVOL32] Move the advanced controls dialog to a separate file and update its title...
[reactos.git] / base / applications / sndvol32 / sndvol32.h
1 #ifndef __SNDVOL32_H
2 #define __SNDVOL32_H
3
4 #include <stdarg.h>
5
6 #include <windef.h>
7 #include <winbase.h>
8 #include <wingdi.h>
9 #include <winuser.h>
10 #include <mmsystem.h>
11 #include <commctrl.h>
12 #include <tchar.h>
13 #include <strsafe.h>
14 #include <assert.h>
15
16 #include "resources.h"
17
18 #define VOLUME_MIN 0
19 #define VOLUME_MAX 500
20 #define VOLUME_TICKS 5
21 #define VOLUME_PAGE_SIZE 100
22 #define BALANCE_LEFT 0
23 #define BALANCE_CENTER 32
24 #define BALANCE_RIGHT 64
25 #define BALANCE_STEPS 64
26 #define BALANCE_TICKS 1
27 #define BALANCE_PAGE_SIZE 12
28
29 #define PLAY_MIXER 0
30 #define RECORD_MIXER 1
31
32 #define ADVANCED_BUTTON_HEIGHT 16
33
34 typedef enum _WINDOW_MODE
35 {
36 NORMAL_MODE,
37 SMALL_MODE,
38 TRAY_MODE
39 } WINDOW_MODE, *PWINDOW_MODE;
40
41 typedef struct _MIXER_WINDOW
42 {
43 HWND hWnd;
44 HWND hStatusBar;
45 struct _SND_MIXER *Mixer;
46 UINT SelectedLine;
47 UINT WindowCount;
48 HWND *Window;
49 UINT DialogCount;
50
51 WINDOW_MODE Mode;
52 UINT MixerId;
53 BOOL bHasExtendedControls;
54 BOOL bShowExtendedControls;
55 RECT rect;
56 HFONT hFont;
57 SIZE baseUnit;
58 } MIXER_WINDOW, *PMIXER_WINDOW;
59
60 extern HINSTANCE hAppInstance;
61 extern ATOM MainWindowClass;
62 extern HWND hMainWnd;
63 extern HANDLE hAppHeap;
64
65 #define SZ_APP_CLASS TEXT("Volume Control")
66
67 ULONG DbgPrint(PCH , ...);
68 #define DPRINT DbgPrint("SNDVOL32: %s:%i: ", __FILE__, __LINE__); DbgPrint
69
70
71 /*
72 * MIXER
73 */
74
75 typedef struct _SND_MIXER_CONNECTION
76 {
77 struct _SND_MIXER_CONNECTION *Next;
78 MIXERLINE Info;
79 LPMIXERCONTROL Controls;
80 UINT DisplayControls;
81 } SND_MIXER_CONNECTION, *PSND_MIXER_CONNECTION;
82
83
84 typedef struct _SND_MIXER_DESTINATION
85 {
86 struct _SND_MIXER_DESTINATION *Next;
87 MIXERLINE Info;
88 LPMIXERCONTROL Controls;
89 UINT DisplayControls;
90 PSND_MIXER_CONNECTION Connections;
91 } SND_MIXER_DESTINATION, *PSND_MIXER_DESTINATION;
92
93 typedef struct _SND_MIXER
94 {
95 UINT MixersCount;
96 HWND hWndNotification;
97 UINT MixerId;
98 HMIXER hmx;
99 MIXERCAPS Caps;
100 PSND_MIXER_DESTINATION Lines;
101 } SND_MIXER, *PSND_MIXER;
102
103 typedef struct _PREFERENCES_CONTEXT
104 {
105 PMIXER_WINDOW MixerWindow;
106 PSND_MIXER Mixer;
107 HWND hwndDlg;
108
109 UINT Selected;
110 DWORD SelectedLine;
111 DWORD PlaybackID;
112 DWORD RecordingID;
113 UINT OtherLines;
114 TCHAR DeviceName[128];
115
116 DWORD tmp;
117 } PREFERENCES_CONTEXT, *PPREFERENCES_CONTEXT;
118
119 typedef struct _SET_VOLUME_CONTEXT
120 {
121 WCHAR LineName[MIXER_LONG_NAME_CHARS];
122 UINT SliderPos;
123 BOOL bVertical;
124 BOOL bSwitch;
125 } SET_VOLUME_CONTEXT, *PSET_VOLUME_CONTEXT;
126
127 typedef struct _ADVANCED_CONTEXT
128 {
129 WCHAR LineName[MIXER_LONG_NAME_CHARS];
130 PSND_MIXER Mixer;
131 LPMIXERLINE Line;
132 } ADVANCED_CONTEXT, *PADVANCED_CONTEXT;
133
134
135 /* NOTE: do NOT modify SNDVOL_REG_LINESTATE for binary compatibility with XP! */
136 typedef struct _SNDVOL_REG_LINESTATE
137 {
138 DWORD Flags;
139 WCHAR LineName[MIXER_LONG_NAME_CHARS];
140 } SNDVOL_REG_LINESTATE, *PSNDVOL_REG_LINESTATE;
141
142
143 typedef BOOL (CALLBACK *PFNSNDMIXENUMLINES)(PSND_MIXER Mixer, LPMIXERLINE Line, UINT DisplayControls, PVOID Context);
144 typedef BOOL (CALLBACK *PFNSNDMIXENUMCONNECTIONS)(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context);
145 typedef BOOL (CALLBACK *PFNSNDMIXENUMPRODUCTS)(PSND_MIXER Mixer, UINT Id, LPCTSTR ProductName, PVOID Context);
146
147 PSND_MIXER SndMixerCreate(HWND hWndNotification, UINT MixerId);
148 VOID SndMixerDestroy(PSND_MIXER Mixer);
149 VOID SndMixerClose(PSND_MIXER Mixer);
150 BOOL SndMixerSelect(PSND_MIXER Mixer, UINT MixerId);
151 UINT SndMixerGetSelection(PSND_MIXER Mixer);
152 INT SndMixerSetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails);
153 INT SndMixerGetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails);
154 INT SndMixerGetProductName(PSND_MIXER Mixer, LPTSTR lpBuffer, UINT uSize);
155 INT SndMixerGetLineName(PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName);
156 BOOL SndMixerEnumProducts(PSND_MIXER Mixer, PFNSNDMIXENUMPRODUCTS EnumProc, PVOID Context);
157 INT SndMixerGetDestinationCount(PSND_MIXER Mixer);
158 BOOL SndMixerEnumLines(PSND_MIXER Mixer, PFNSNDMIXENUMLINES EnumProc, PVOID Context);
159 BOOL SndMixerEnumConnections(PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context);
160 BOOL SndMixerIsDisplayControl(PSND_MIXER Mixer, LPMIXERCONTROL Control);
161 BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls);
162 LPMIXERLINE SndMixerGetLineByName(PSND_MIXER Mixer, DWORD LineID, LPWSTR LineName);
163
164 /* advanced.c */
165
166 INT_PTR
167 CALLBACK
168 AdvancedDlgProc(
169 HWND hwndDlg,
170 UINT uMsg,
171 WPARAM wParam,
172 LPARAM lParam);
173
174
175 /*
176 * dialog.c
177 */
178 VOID LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext);
179 VOID UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, DWORD DialogID, DWORD Position);
180 VOID UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, LONG fValue);
181
182 /*
183 * MISC
184 */
185
186 extern HKEY hAppSettingsKey;
187
188 BOOL
189 InitAppConfig(VOID);
190
191 VOID
192 CloseAppConfig(VOID);
193
194 INT
195 AllocAndLoadString(OUT LPWSTR *lpTarget,
196 IN HINSTANCE hInst,
197 IN UINT uID);
198
199 DWORD
200 LoadAndFormatString(IN HINSTANCE hInstance,
201 IN UINT uID,
202 OUT LPWSTR *lpTarget,
203 ...);
204
205 BOOL
206 ReadLineConfig(IN LPTSTR szDeviceName,
207 IN LPTSTR szLineName,
208 IN LPTSTR szControlName,
209 OUT DWORD *Flags);
210
211 BOOL
212 WriteLineConfig(IN LPTSTR szDeviceName,
213 IN LPTSTR szLineName,
214 IN PSNDVOL_REG_LINESTATE LineState,
215 IN DWORD cbSize);
216
217 DWORD
218 GetStyleValue(VOID);
219
220 /* tray.c */
221
222 INT_PTR
223 CALLBACK
224 TrayDlgProc(
225 HWND hwndDlg,
226 UINT uMsg,
227 WPARAM wParam,
228 LPARAM lParam);
229
230 #endif /* __SNDVOL32_H */