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 } |
