Mercurial > hg > apm2s
comparison app_wrapper/app_dialog.cpp @ 0:4606bd505630 tip
first import
author | Fiore Martin <f.martin@qmul.ac.uk> |
---|---|
date | Sat, 13 Jun 2015 15:08:10 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4606bd505630 |
---|---|
1 #include "app_main.h" | |
2 | |
3 #ifdef OS_WIN | |
4 #include "asio.h" | |
5 #endif | |
6 | |
7 const int kNumIOVSOptions = 9; | |
8 const int kNumSIGVSOptions = 7; | |
9 | |
10 const std::string kIOVSOptions[kNumIOVSOptions] = {"32", "64", "128", "256", "512", "1024", "2048", "4096", "8192" }; | |
11 const std::string kSIGVSOptions[kNumSIGVSOptions] = {"16", "32", "64", "128", "256", "512", "1024" }; | |
12 | |
13 // check the input and output devices, find matching srs | |
14 void PopulateSampleRateList(HWND hwndDlg, RtAudio::DeviceInfo* inputDevInfo, RtAudio::DeviceInfo* outputDevInfo) | |
15 { | |
16 char buf[20]; | |
17 | |
18 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_RESETCONTENT,0,0); | |
19 | |
20 std::vector<int> matchedSRs; | |
21 | |
22 for (int i=0; i<inputDevInfo->sampleRates.size(); i++) | |
23 { | |
24 for (int j=0; j<outputDevInfo->sampleRates.size(); j++) | |
25 { | |
26 if(inputDevInfo->sampleRates[i] == outputDevInfo->sampleRates[j]) | |
27 matchedSRs.push_back(inputDevInfo->sampleRates[i]); | |
28 } | |
29 } | |
30 | |
31 for (int k=0; k<matchedSRs.size(); k++) | |
32 { | |
33 wsprintf(buf,"%i",matchedSRs[k]); | |
34 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_ADDSTRING,0,(LPARAM)buf); | |
35 } | |
36 | |
37 LRESULT sridx = SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioSR); | |
38 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_SETCURSEL, sridx, 0); | |
39 } | |
40 | |
41 void PopulateAudioInputList(HWND hwndDlg, RtAudio::DeviceInfo* info) | |
42 { | |
43 char buf[20]; | |
44 | |
45 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_RESETCONTENT,0,0); | |
46 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_RESETCONTENT,0,0); | |
47 | |
48 int i; | |
49 | |
50 for (i=0; i<info->inputChannels -1; i++) | |
51 { | |
52 // for (int i=0; i<info.inputChannels; i++) { | |
53 wsprintf(buf,"%i",i+1); | |
54 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_ADDSTRING,0,(LPARAM)buf); | |
55 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_ADDSTRING,0,(LPARAM)buf); | |
56 } | |
57 | |
58 // TEMP | |
59 wsprintf(buf,"%i",i+1); | |
60 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_ADDSTRING,0,(LPARAM)buf); | |
61 | |
62 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_SETCURSEL, gState->mAudioInChanL - 1, 0); | |
63 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); | |
64 } | |
65 | |
66 void PopulateAudioOutputList(HWND hwndDlg, RtAudio::DeviceInfo* info) | |
67 { | |
68 char buf[20]; | |
69 | |
70 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_RESETCONTENT,0,0); | |
71 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_RESETCONTENT,0,0); | |
72 | |
73 int i; | |
74 | |
75 // for (int i=0; i<info.outputChannels; i++) { | |
76 for (i=0; i<info->outputChannels -1; i++) | |
77 { | |
78 | |
79 wsprintf(buf,"%i",i+1); | |
80 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_ADDSTRING,0,(LPARAM)buf); | |
81 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_ADDSTRING,0,(LPARAM)buf); | |
82 } | |
83 | |
84 // TEMP | |
85 wsprintf(buf,"%i",i+1); | |
86 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_ADDSTRING,0,(LPARAM)buf); | |
87 | |
88 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_SETCURSEL, gState->mAudioOutChanL - 1, 0); | |
89 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); | |
90 } | |
91 | |
92 // This has to get called after any change to audio driver/in dev/out dev | |
93 void PopulateDriverSpecificControls(HWND hwndDlg) | |
94 { | |
95 #ifdef OS_WIN | |
96 int driverType = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); | |
97 if(driverType) //ASIO | |
98 { | |
99 ComboBox_Enable(GetDlgItem(hwndDlg, IDC_COMBO_AUDIO_IN_DEV), FALSE); | |
100 Button_Enable(GetDlgItem(hwndDlg, IDC_BUTTON_ASIO), TRUE); | |
101 } | |
102 else | |
103 { | |
104 ComboBox_Enable(GetDlgItem(hwndDlg, IDC_COMBO_AUDIO_IN_DEV), TRUE); | |
105 Button_Enable(GetDlgItem(hwndDlg, IDC_BUTTON_ASIO), FALSE); | |
106 } | |
107 #endif | |
108 | |
109 int indevidx = 0; | |
110 int outdevidx = 0; | |
111 | |
112 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_RESETCONTENT,0,0); | |
113 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_RESETCONTENT,0,0); | |
114 | |
115 for (int i = 0; i<gAudioInputDevs.size(); i++) | |
116 { | |
117 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_ADDSTRING,0,(LPARAM)GetAudioDeviceName(gAudioInputDevs[i]).c_str()); | |
118 | |
119 if(!strcmp(GetAudioDeviceName(gAudioInputDevs[i]).c_str(), gState->mAudioInDev)) | |
120 indevidx = i; | |
121 } | |
122 | |
123 for (int i = 0; i<gAudioOutputDevs.size(); i++) | |
124 { | |
125 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_ADDSTRING,0,(LPARAM)GetAudioDeviceName(gAudioOutputDevs[i]).c_str()); | |
126 | |
127 if(!strcmp(GetAudioDeviceName(gAudioOutputDevs[i]).c_str(), gState->mAudioOutDev)) | |
128 outdevidx = i; | |
129 } | |
130 | |
131 #ifdef OS_WIN | |
132 if(driverType) | |
133 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_SETCURSEL, outdevidx, 0); | |
134 else | |
135 #endif | |
136 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_SETCURSEL, indevidx, 0); | |
137 | |
138 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_SETCURSEL, outdevidx, 0); | |
139 | |
140 RtAudio::DeviceInfo inputDevInfo = gDAC->getDeviceInfo(gAudioInputDevs[indevidx]); | |
141 RtAudio::DeviceInfo outputDevInfo = gDAC->getDeviceInfo(gAudioOutputDevs[outdevidx]); | |
142 | |
143 PopulateAudioInputList(hwndDlg, &inputDevInfo); | |
144 PopulateAudioOutputList(hwndDlg, &outputDevInfo); | |
145 PopulateSampleRateList(hwndDlg, &inputDevInfo, &outputDevInfo); | |
146 } | |
147 | |
148 void PopulateAudioDialogs(HWND hwndDlg) | |
149 { | |
150 PopulateDriverSpecificControls(hwndDlg); | |
151 | |
152 if (gState->mAudioInIsMono) | |
153 { | |
154 SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT,BM_SETCHECK, BST_CHECKED,0); | |
155 } | |
156 else | |
157 { | |
158 SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT,BM_SETCHECK, BST_UNCHECKED,0); | |
159 } | |
160 | |
161 //Populate IOVS combobox | |
162 for (int i = 0; i< kNumIOVSOptions; i++) | |
163 { | |
164 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IOVS,CB_ADDSTRING,0,(LPARAM)kIOVSOptions[i].c_str()); | |
165 } | |
166 | |
167 LRESULT iovsidx = SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioIOVS); | |
168 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_SETCURSEL, iovsidx, 0); | |
169 | |
170 //Populate SIGVS combobox | |
171 for (int i = 0; i< kNumSIGVSOptions; i++) | |
172 { | |
173 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SIGVS,CB_ADDSTRING,0,(LPARAM)kSIGVSOptions[i].c_str()); | |
174 } | |
175 | |
176 LRESULT sigvsidx = SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioSigVS); | |
177 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_SETCURSEL, sigvsidx, 0); | |
178 } | |
179 | |
180 bool PopulateMidiDialogs(HWND hwndDlg) | |
181 { | |
182 if ( !gMidiIn || !gMidiOut ) | |
183 return false; | |
184 else | |
185 { | |
186 for (int i=0; i<gMIDIInputDevNames.size(); i++ ) | |
187 { | |
188 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_ADDSTRING,0,(LPARAM)gMIDIInputDevNames[i].c_str()); | |
189 } | |
190 | |
191 LRESULT indevidx = SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mMidiInDev); | |
192 | |
193 // if the midi port name wasn't found update the ini file, and set to off | |
194 if(indevidx == -1) | |
195 { | |
196 strcpy(gState->mMidiInDev, "off"); | |
197 UpdateINI(); | |
198 indevidx = 0; | |
199 } | |
200 | |
201 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_SETCURSEL, indevidx, 0); | |
202 | |
203 for (int i=0; i<gMIDIOutputDevNames.size(); i++ ) | |
204 { | |
205 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_ADDSTRING,0,(LPARAM)gMIDIOutputDevNames[i].c_str()); | |
206 } | |
207 | |
208 LRESULT outdevidx = SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mMidiOutDev); | |
209 | |
210 // if the midi port name wasn't found update the ini file, and set to off | |
211 if(outdevidx == -1) | |
212 { | |
213 strcpy(gState->mMidiOutDev, "off"); | |
214 UpdateINI(); | |
215 outdevidx = 0; | |
216 } | |
217 | |
218 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_SETCURSEL, outdevidx, 0); | |
219 | |
220 // Populate MIDI channel dialogs | |
221 | |
222 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_ADDSTRING,0,(LPARAM)"all"); | |
223 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_ADDSTRING,0,(LPARAM)"all"); | |
224 | |
225 char buf[20]; | |
226 | |
227 for (int i=0; i<16; i++) | |
228 { | |
229 wsprintf(buf,"%i",i+1); | |
230 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_ADDSTRING,0,(LPARAM)buf); | |
231 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_ADDSTRING,0,(LPARAM)buf); | |
232 } | |
233 | |
234 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_SETCURSEL, (LPARAM)gState->mMidiInChan, 0); | |
235 SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_SETCURSEL, (LPARAM)gState->mMidiOutChan, 0); | |
236 | |
237 return true; | |
238 } | |
239 } | |
240 | |
241 #ifdef OS_WIN | |
242 void PopulatePreferencesDialog(HWND hwndDlg) | |
243 { | |
244 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"DirectSound"); | |
245 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"ASIO"); | |
246 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_SETCURSEL, gState->mAudioDriverType, 0); | |
247 | |
248 PopulateAudioDialogs(hwndDlg); | |
249 PopulateMidiDialogs(hwndDlg); | |
250 } | |
251 | |
252 #else if defined OS_OSX | |
253 void PopulatePreferencesDialog(HWND hwndDlg) | |
254 { | |
255 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"CoreAudio"); | |
256 //SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"Jack"); | |
257 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_SETCURSEL, gState->mAudioDriverType, 0); | |
258 | |
259 PopulateAudioDialogs(hwndDlg); | |
260 PopulateMidiDialogs(hwndDlg); | |
261 } | |
262 #endif | |
263 | |
264 WDL_DLGRET PreferencesDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) | |
265 { | |
266 int v = 0; | |
267 switch(uMsg) | |
268 { | |
269 case WM_INITDIALOG: | |
270 | |
271 PopulatePreferencesDialog(hwndDlg); | |
272 memcpy(gTempState, gState, sizeof(AppState)); // copy state to temp state | |
273 | |
274 return TRUE; | |
275 | |
276 case WM_COMMAND: | |
277 switch (LOWORD(wParam)) | |
278 { | |
279 case IDOK: | |
280 if(memcmp(gActiveState, gState, sizeof(AppState)) != 0) // if state is different try to change audio | |
281 { | |
282 TryToChangeAudio(); | |
283 } | |
284 EndDialog(hwndDlg, IDOK); // INI file will be changed see MainDialogProc | |
285 break; | |
286 case IDAPPLY: | |
287 TryToChangeAudio(); | |
288 break; | |
289 case IDCANCEL: | |
290 EndDialog(hwndDlg, IDCANCEL); | |
291 | |
292 // if state has been changed reset to previous state, INI file won't be changed | |
293 if (!AudioSettingsInStateAreEqual(gState, gTempState) | |
294 || !MIDISettingsInStateAreEqual(gState, gTempState)) | |
295 { | |
296 memcpy(gState, gTempState, sizeof(AppState)); | |
297 | |
298 TryToChangeAudioDriverType(); | |
299 ProbeAudioIO(); | |
300 TryToChangeAudio(); | |
301 } | |
302 | |
303 break; | |
304 | |
305 case IDC_COMBO_AUDIO_DRIVER: | |
306 if (HIWORD(wParam) == CBN_SELCHANGE) | |
307 { | |
308 | |
309 v = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); | |
310 | |
311 if(v != gState->mAudioDriverType) | |
312 { | |
313 gState->mAudioDriverType = v; | |
314 | |
315 TryToChangeAudioDriverType(); | |
316 ProbeAudioIO(); | |
317 | |
318 strcpy(gState->mAudioInDev,GetAudioDeviceName(gAudioInputDevs[0]).c_str()); | |
319 strcpy(gState->mAudioOutDev,GetAudioDeviceName(gAudioOutputDevs[0]).c_str()); | |
320 | |
321 // Reset IO | |
322 gState->mAudioOutChanL = 1; | |
323 gState->mAudioOutChanR = 2; | |
324 | |
325 PopulateAudioDialogs(hwndDlg); | |
326 } | |
327 } | |
328 break; | |
329 | |
330 case IDC_COMBO_AUDIO_IN_DEV: | |
331 if (HIWORD(wParam) == CBN_SELCHANGE) | |
332 { | |
333 int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETCURSEL, 0, 0); | |
334 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioInDev); | |
335 | |
336 // Reset IO | |
337 gState->mAudioInChanL = 1; | |
338 gState->mAudioInChanR = 2; | |
339 | |
340 PopulateDriverSpecificControls(hwndDlg); | |
341 } | |
342 break; | |
343 | |
344 case IDC_COMBO_AUDIO_OUT_DEV: | |
345 if (HIWORD(wParam) == CBN_SELCHANGE) | |
346 { | |
347 int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETCURSEL, 0, 0); | |
348 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioOutDev); | |
349 | |
350 // Reset IO | |
351 gState->mAudioOutChanL = 1; | |
352 gState->mAudioOutChanR = 2; | |
353 | |
354 PopulateDriverSpecificControls(hwndDlg); | |
355 } | |
356 break; | |
357 | |
358 case IDC_COMBO_AUDIO_IN_L: | |
359 if (HIWORD(wParam) == CBN_SELCHANGE) | |
360 { | |
361 gState->mAudioInChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_L, CB_GETCURSEL, 0, 0) + 1; | |
362 | |
363 //TEMP | |
364 gState->mAudioInChanR = gState->mAudioInChanL + 1; | |
365 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); | |
366 // | |
367 } | |
368 break; | |
369 | |
370 case IDC_COMBO_AUDIO_IN_R: | |
371 if (HIWORD(wParam) == CBN_SELCHANGE) | |
372 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); // TEMP | |
373 // gState->mAudioInChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_R, CB_GETCURSEL, 0, 0); | |
374 break; | |
375 | |
376 case IDC_COMBO_AUDIO_OUT_L: | |
377 if (HIWORD(wParam) == CBN_SELCHANGE) | |
378 { | |
379 gState->mAudioOutChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_L, CB_GETCURSEL, 0, 0) + 1; | |
380 | |
381 //TEMP | |
382 gState->mAudioOutChanR = gState->mAudioOutChanL + 1; | |
383 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); | |
384 // | |
385 } | |
386 break; | |
387 | |
388 case IDC_COMBO_AUDIO_OUT_R: | |
389 if (HIWORD(wParam) == CBN_SELCHANGE) | |
390 SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); // TEMP | |
391 // gState->mAudioOutChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_R, CB_GETCURSEL, 0, 0); | |
392 break; | |
393 | |
394 case IDC_CB_MONO_INPUT: | |
395 if (SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT, BM_GETCHECK, 0, 0) == BST_CHECKED) | |
396 gState->mAudioInIsMono = 1; | |
397 else | |
398 gState->mAudioInIsMono = 0; | |
399 break; | |
400 | |
401 case IDC_COMBO_AUDIO_IOVS: // follow through | |
402 case IDC_COMBO_AUDIO_SIGVS: | |
403 //TODO: FIX | |
404 if (HIWORD(wParam) == CBN_SELCHANGE) | |
405 { | |
406 int iovsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETCURSEL, 0, 0); | |
407 int sigvsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETCURSEL, 0, 0); | |
408 | |
409 if (atoi(kIOVSOptions[iovsidx].c_str()) < atoi(kSIGVSOptions[sigvsidx].c_str())) // if iovs < sigvs | |
410 { | |
411 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); | |
412 strcpy(gState->mAudioSigVS, kSIGVSOptions[0].c_str()); // set sigvs to minimum | |
413 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_SETCURSEL, -1, 0); | |
414 } | |
415 else | |
416 { | |
417 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); | |
418 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETLBTEXT, sigvsidx, (LPARAM) gState->mAudioSigVS); | |
419 } | |
420 } | |
421 break; | |
422 case IDC_COMBO_AUDIO_SR: | |
423 if (HIWORD(wParam) == CBN_SELCHANGE) | |
424 { | |
425 int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETCURSEL, 0, 0); | |
426 SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioSR); | |
427 } | |
428 break; | |
429 | |
430 case IDC_BUTTON_ASIO: | |
431 if (HIWORD(wParam) == BN_CLICKED) | |
432 #ifdef OS_OSX | |
433 system("open \"/Applications/Utilities/Audio MIDI Setup.app\""); | |
434 #elif defined OS_WIN | |
435 if( gState->mAudioDriverType == DAC_ASIO && gDAC->isStreamRunning()) // TODO: still not right | |
436 ASIOControlPanel(); | |
437 #endif | |
438 break; | |
439 | |
440 case IDC_COMBO_MIDI_IN_DEV: | |
441 if (HIWORD(wParam) == CBN_SELCHANGE) | |
442 { | |
443 int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETCURSEL, 0, 0); | |
444 SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiInDev); | |
445 ChooseMidiInput( gState->mMidiInDev ); | |
446 } | |
447 break; | |
448 | |
449 case IDC_COMBO_MIDI_OUT_DEV: | |
450 if (HIWORD(wParam) == CBN_SELCHANGE) | |
451 { | |
452 int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETCURSEL, 0, 0); | |
453 SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiOutDev); | |
454 ChooseMidiOutput( gState->mMidiOutDev ); | |
455 } | |
456 break; | |
457 | |
458 case IDC_COMBO_MIDI_IN_CHAN: | |
459 if (HIWORD(wParam) == CBN_SELCHANGE) | |
460 gState->mMidiInChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_CHAN, CB_GETCURSEL, 0, 0); | |
461 break; | |
462 | |
463 case IDC_COMBO_MIDI_OUT_CHAN: | |
464 if (HIWORD(wParam) == CBN_SELCHANGE) | |
465 gState->mMidiOutChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_CHAN, CB_GETCURSEL, 0, 0); | |
466 break; | |
467 | |
468 default: | |
469 break; | |
470 } | |
471 break; | |
472 default: | |
473 return FALSE; | |
474 } | |
475 return TRUE; | |
476 } | |
477 | |
478 #ifdef _WIN32 | |
479 void ClientResize(HWND hWnd, int nWidth, int nHeight) | |
480 { | |
481 RECT rcClient, rcWindow; | |
482 POINT ptDiff; | |
483 int screenwidth, screenheight; | |
484 int x, y; | |
485 | |
486 screenwidth = GetSystemMetrics(SM_CXSCREEN); | |
487 screenheight = GetSystemMetrics(SM_CYSCREEN); | |
488 x = (screenwidth / 2) - (nWidth/2); | |
489 y = (screenheight / 2) - (nHeight/2); | |
490 | |
491 GetClientRect(hWnd, &rcClient); | |
492 GetWindowRect(hWnd, &rcWindow); | |
493 ptDiff.x = (rcWindow.right - rcWindow.left) - rcClient.right; | |
494 ptDiff.y = (rcWindow.bottom - rcWindow.top) - rcClient.bottom; | |
495 MoveWindow(hWnd, x, y, nWidth + ptDiff.x, nHeight + ptDiff.y, FALSE); | |
496 } | |
497 #endif | |
498 | |
499 WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) | |
500 { | |
501 switch (uMsg) | |
502 { | |
503 case WM_INITDIALOG: | |
504 | |
505 gHWND=hwndDlg; | |
506 | |
507 if(!AttachGUI()) printf("couldn't attach gui\n"); | |
508 | |
509 #ifdef _WIN32 | |
510 ClientResize(hwndDlg, GUI_WIDTH, GUI_HEIGHT); | |
511 //SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1))); | |
512 //SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1))); | |
513 | |
514 #else // OSX | |
515 CenterWindow(hwndDlg); | |
516 #endif | |
517 | |
518 ShowWindow(hwndDlg,SW_SHOW); | |
519 return 1; | |
520 case WM_DESTROY: | |
521 gHWND=NULL; | |
522 | |
523 #ifdef _WIN32 | |
524 PostQuitMessage(0); | |
525 #else | |
526 SWELL_PostQuitMessage(hwndDlg); | |
527 #endif | |
528 | |
529 return 0; | |
530 case WM_CLOSE: | |
531 DestroyWindow(hwndDlg); | |
532 return 0; | |
533 // case WM_GETDLGCODE: { | |
534 // LPARAM lres; | |
535 // lres = CallWindowProc(/*TODO GET PROC */, hWnd, WM_GETDLGCODE, wParam, lParam); | |
536 // if (lParam && ((MSG*)lParam)->message == WM_KEYDOWN && wParam == VK_LEFT) { | |
537 // lres |= DLGC_WANTMESSAGE; | |
538 // } | |
539 // return lres; | |
540 // } | |
541 case WM_COMMAND: | |
542 switch (LOWORD(wParam)) | |
543 { | |
544 case ID_QUIT: | |
545 DestroyWindow(hwndDlg); | |
546 return 0; | |
547 case ID_ABOUT: | |
548 if(!gPluginInstance->HostRequestingAboutBox()) | |
549 { | |
550 char version[50]; | |
551 sprintf(version, BUNDLE_MFR"\nBuilt on "__DATE__); | |
552 MessageBox(hwndDlg,version, BUNDLE_NAME, MB_OK); | |
553 } | |
554 return 0; | |
555 case ID_PREFERENCES: | |
556 { | |
557 INT_PTR ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_PREF), hwndDlg, PreferencesDlgProc); | |
558 | |
559 if(ret == IDOK) | |
560 { | |
561 UpdateINI(); | |
562 } | |
563 | |
564 return 0; | |
565 } | |
566 } | |
567 return 0; | |
568 } | |
569 return 0; | |
570 } |