[SNDVOL32] Add the small master dialog
[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 <assert.h>
14
15 #include "resources.h"
16
17 typedef enum _WINDOW_MODE
18 {
19 NORMAL_MODE,
20 SMALL_MODE,
21 TRAY_MODE
22 } WINDOW_MODE, *PWINDOW_MODE;
23
24 typedef struct _MIXER_WINDOW
25 {
26 HWND hWnd;
27 HWND hStatusBar;
28 struct _SND_MIXER *Mixer;
29 UINT SelectedLine;
30 UINT WindowCount;
31 HWND *Window;
32
33 WINDOW_MODE Mode;
34 RECT rect;
35 HFONT hFont;
36 } MIXER_WINDOW, *PMIXER_WINDOW;
37
38 extern HINSTANCE hAppInstance;
39 extern ATOM MainWindowClass;
40 extern HWND hMainWnd;
41 extern HANDLE hAppHeap;
42
43 #define SZ_APP_CLASS TEXT("Volume Control")
44
45 ULONG DbgPrint(PCH , ...);
46 #define DPRINT DbgPrint("SNDVOL32: %s:%i: ", __FILE__, __LINE__); DbgPrint
47
48
49 /*
50 * MIXER
51 */
52
53 typedef struct _SND_MIXER_CONNECTION
54 {
55 struct _SND_MIXER_CONNECTION *Next;
56 MIXERLINE Info;
57 LPMIXERCONTROL Controls;
58 UINT DisplayControls;
59 } SND_MIXER_CONNECTION, *PSND_MIXER_CONNECTION;
60
61
62 typedef struct _SND_MIXER_DESTINATION
63 {
64 struct _SND_MIXER_DESTINATION *Next;
65 MIXERLINE Info;
66 LPMIXERCONTROL Controls;
67 UINT DisplayControls;
68 PSND_MIXER_CONNECTION Connections;
69 } SND_MIXER_DESTINATION, *PSND_MIXER_DESTINATION;
70
71 typedef struct _SND_MIXER
72 {
73 UINT MixersCount;
74 HWND hWndNotification;
75 UINT MixerId;
76 HMIXER hmx;
77 MIXERCAPS Caps;
78 PSND_MIXER_DESTINATION Lines;
79 } SND_MIXER, *PSND_MIXER;
80
81 typedef struct _PREFERENCES_CONTEXT
82 {
83 PMIXER_WINDOW MixerWindow;
84 PSND_MIXER Mixer;
85 HWND hwndDlg;
86
87 UINT Selected;
88 DWORD SelectedLine;
89 DWORD PlaybackID;
90 DWORD RecordingID;
91 UINT OtherLines;
92 TCHAR DeviceName[128];
93
94 DWORD Count;
95 DWORD tmp;
96 } PREFERENCES_CONTEXT, *PPREFERENCES_CONTEXT;
97
98 typedef struct
99 {
100 WCHAR LineName[MIXER_LONG_NAME_CHARS];
101 UINT SliderPos;
102 BOOL bVertical;
103 BOOL bSwitch;
104
105 }SET_VOLUME_CONTEXT, *PSET_VOLUME_CONTEXT;
106
107 /* NOTE: do NOT modify SNDVOL_REG_LINESTATE for binary compatibility with XP! */
108 typedef struct _SNDVOL_REG_LINESTATE
109 {
110 DWORD Flags;
111 WCHAR LineName[MIXER_LONG_NAME_CHARS];
112 } SNDVOL_REG_LINESTATE, *PSNDVOL_REG_LINESTATE;
113
114
115 typedef BOOL (CALLBACK *PFNSNDMIXENUMLINES)(PSND_MIXER Mixer, LPMIXERLINE Line, UINT DisplayControls, PVOID Context);
116 typedef BOOL (CALLBACK *PFNSNDMIXENUMCONNECTIONS)(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context);
117 typedef BOOL (CALLBACK *PFNSNDMIXENUMPRODUCTS)(PSND_MIXER Mixer, UINT Id, LPCTSTR ProductName, PVOID Context);
118
119 PSND_MIXER SndMixerCreate(HWND hWndNotification);
120 VOID SndMixerDestroy(PSND_MIXER Mixer);
121 VOID SndMixerClose(PSND_MIXER Mixer);
122 BOOL SndMixerSelect(PSND_MIXER Mixer, UINT MixerId);
123 UINT SndMixerGetSelection(PSND_MIXER Mixer);
124 INT SndMixerSetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cbDetails, LPVOID paDetails);
125 INT SndMixerGetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cbDetails, LPVOID paDetails);
126 INT SndMixerGetProductName(PSND_MIXER Mixer, LPTSTR lpBuffer, UINT uSize);
127 INT SndMixerGetLineName(PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName);
128 BOOL SndMixerEnumProducts(PSND_MIXER Mixer, PFNSNDMIXENUMPRODUCTS EnumProc, PVOID Context);
129 INT SndMixerGetDestinationCount(PSND_MIXER Mixer);
130 BOOL SndMixerEnumLines(PSND_MIXER Mixer, PFNSNDMIXENUMLINES EnumProc, PVOID Context);
131 BOOL SndMixerEnumConnections(PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context);
132 BOOL SndMixerIsDisplayControl(PSND_MIXER Mixer, LPMIXERCONTROL Control);
133 BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls);
134
135 /*
136 * dialog.c
137 */
138 VOID LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext);
139 VOID UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, DWORD dwControlID, DWORD DialogID, DWORD Position);
140 VOID UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, LONG fValue);
141
142 /*
143 * MISC
144 */
145
146 extern HKEY hAppSettingsKey;
147
148 BOOL
149 InitAppConfig(VOID);
150
151 VOID
152 CloseAppConfig(VOID);
153
154 INT
155 AllocAndLoadString(OUT LPWSTR *lpTarget,
156 IN HINSTANCE hInst,
157 IN UINT uID);
158
159 DWORD
160 LoadAndFormatString(IN HINSTANCE hInstance,
161 IN UINT uID,
162 OUT LPWSTR *lpTarget,
163 ...);
164
165 BOOL
166 ReadLineConfig(IN LPTSTR szDeviceName,
167 IN LPTSTR szLineName,
168 IN LPTSTR szControlName,
169 OUT DWORD *Flags);
170
171 BOOL
172 WriteLineConfig(IN LPTSTR szDeviceName,
173 IN LPTSTR szLineName,
174 IN PSNDVOL_REG_LINESTATE LineState,
175 IN DWORD cbSize);
176
177 /* tray.c */
178
179 INT_PTR
180 CALLBACK
181 TrayDlgProc(
182 HWND hwndDlg,
183 UINT uMsg,
184 WPARAM wParam,
185 LPARAM lParam);
186
187 #endif /* __SNDVOL32_H */