Mercurial > hg > apm2s
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app_wrapper/app_dialog.cpp Sat Jun 13 15:08:10 2015 +0100 @@ -0,0 +1,570 @@ +#include "app_main.h" + +#ifdef OS_WIN +#include "asio.h" +#endif + +const int kNumIOVSOptions = 9; +const int kNumSIGVSOptions = 7; + +const std::string kIOVSOptions[kNumIOVSOptions] = {"32", "64", "128", "256", "512", "1024", "2048", "4096", "8192" }; +const std::string kSIGVSOptions[kNumSIGVSOptions] = {"16", "32", "64", "128", "256", "512", "1024" }; + +// check the input and output devices, find matching srs +void PopulateSampleRateList(HWND hwndDlg, RtAudio::DeviceInfo* inputDevInfo, RtAudio::DeviceInfo* outputDevInfo) +{ + char buf[20]; + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_RESETCONTENT,0,0); + + std::vector<int> matchedSRs; + + for (int i=0; i<inputDevInfo->sampleRates.size(); i++) + { + for (int j=0; j<outputDevInfo->sampleRates.size(); j++) + { + if(inputDevInfo->sampleRates[i] == outputDevInfo->sampleRates[j]) + matchedSRs.push_back(inputDevInfo->sampleRates[i]); + } + } + + for (int k=0; k<matchedSRs.size(); k++) + { + wsprintf(buf,"%i",matchedSRs[k]); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_ADDSTRING,0,(LPARAM)buf); + } + + LRESULT sridx = SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioSR); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SR,CB_SETCURSEL, sridx, 0); +} + +void PopulateAudioInputList(HWND hwndDlg, RtAudio::DeviceInfo* info) +{ + char buf[20]; + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_RESETCONTENT,0,0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_RESETCONTENT,0,0); + + int i; + + for (i=0; i<info->inputChannels -1; i++) + { +// for (int i=0; i<info.inputChannels; i++) { + wsprintf(buf,"%i",i+1); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_ADDSTRING,0,(LPARAM)buf); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_ADDSTRING,0,(LPARAM)buf); + } + + // TEMP + wsprintf(buf,"%i",i+1); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_ADDSTRING,0,(LPARAM)buf); + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_L,CB_SETCURSEL, gState->mAudioInChanL - 1, 0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); +} + +void PopulateAudioOutputList(HWND hwndDlg, RtAudio::DeviceInfo* info) +{ + char buf[20]; + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_RESETCONTENT,0,0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_RESETCONTENT,0,0); + + int i; + +// for (int i=0; i<info.outputChannels; i++) { + for (i=0; i<info->outputChannels -1; i++) + { + + wsprintf(buf,"%i",i+1); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_ADDSTRING,0,(LPARAM)buf); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_ADDSTRING,0,(LPARAM)buf); + } + + // TEMP + wsprintf(buf,"%i",i+1); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_ADDSTRING,0,(LPARAM)buf); + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_L,CB_SETCURSEL, gState->mAudioOutChanL - 1, 0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); +} + +// This has to get called after any change to audio driver/in dev/out dev +void PopulateDriverSpecificControls(HWND hwndDlg) +{ +#ifdef OS_WIN + int driverType = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); + if(driverType) //ASIO + { + ComboBox_Enable(GetDlgItem(hwndDlg, IDC_COMBO_AUDIO_IN_DEV), FALSE); + Button_Enable(GetDlgItem(hwndDlg, IDC_BUTTON_ASIO), TRUE); + } + else + { + ComboBox_Enable(GetDlgItem(hwndDlg, IDC_COMBO_AUDIO_IN_DEV), TRUE); + Button_Enable(GetDlgItem(hwndDlg, IDC_BUTTON_ASIO), FALSE); + } +#endif + + int indevidx = 0; + int outdevidx = 0; + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_RESETCONTENT,0,0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_RESETCONTENT,0,0); + + for (int i = 0; i<gAudioInputDevs.size(); i++) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_ADDSTRING,0,(LPARAM)GetAudioDeviceName(gAudioInputDevs[i]).c_str()); + + if(!strcmp(GetAudioDeviceName(gAudioInputDevs[i]).c_str(), gState->mAudioInDev)) + indevidx = i; + } + + for (int i = 0; i<gAudioOutputDevs.size(); i++) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_ADDSTRING,0,(LPARAM)GetAudioDeviceName(gAudioOutputDevs[i]).c_str()); + + if(!strcmp(GetAudioDeviceName(gAudioOutputDevs[i]).c_str(), gState->mAudioOutDev)) + outdevidx = i; + } + +#ifdef OS_WIN + if(driverType) + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_SETCURSEL, outdevidx, 0); + else +#endif + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_DEV,CB_SETCURSEL, indevidx, 0); + + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_DEV,CB_SETCURSEL, outdevidx, 0); + + RtAudio::DeviceInfo inputDevInfo = gDAC->getDeviceInfo(gAudioInputDevs[indevidx]); + RtAudio::DeviceInfo outputDevInfo = gDAC->getDeviceInfo(gAudioOutputDevs[outdevidx]); + + PopulateAudioInputList(hwndDlg, &inputDevInfo); + PopulateAudioOutputList(hwndDlg, &outputDevInfo); + PopulateSampleRateList(hwndDlg, &inputDevInfo, &outputDevInfo); +} + +void PopulateAudioDialogs(HWND hwndDlg) +{ + PopulateDriverSpecificControls(hwndDlg); + + if (gState->mAudioInIsMono) + { + SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT,BM_SETCHECK, BST_CHECKED,0); + } + else + { + SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT,BM_SETCHECK, BST_UNCHECKED,0); + } + + //Populate IOVS combobox + for (int i = 0; i< kNumIOVSOptions; i++) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IOVS,CB_ADDSTRING,0,(LPARAM)kIOVSOptions[i].c_str()); + } + + LRESULT iovsidx = SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioIOVS); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_SETCURSEL, iovsidx, 0); + + //Populate SIGVS combobox + for (int i = 0; i< kNumSIGVSOptions; i++) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_SIGVS,CB_ADDSTRING,0,(LPARAM)kSIGVSOptions[i].c_str()); + } + + LRESULT sigvsidx = SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mAudioSigVS); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_SETCURSEL, sigvsidx, 0); +} + +bool PopulateMidiDialogs(HWND hwndDlg) +{ + if ( !gMidiIn || !gMidiOut ) + return false; + else + { + for (int i=0; i<gMIDIInputDevNames.size(); i++ ) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_ADDSTRING,0,(LPARAM)gMIDIInputDevNames[i].c_str()); + } + + LRESULT indevidx = SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mMidiInDev); + + // if the midi port name wasn't found update the ini file, and set to off + if(indevidx == -1) + { + strcpy(gState->mMidiInDev, "off"); + UpdateINI(); + indevidx = 0; + } + + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_DEV,CB_SETCURSEL, indevidx, 0); + + for (int i=0; i<gMIDIOutputDevNames.size(); i++ ) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_ADDSTRING,0,(LPARAM)gMIDIOutputDevNames[i].c_str()); + } + + LRESULT outdevidx = SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_FINDSTRINGEXACT, -1, (LPARAM)gState->mMidiOutDev); + + // if the midi port name wasn't found update the ini file, and set to off + if(outdevidx == -1) + { + strcpy(gState->mMidiOutDev, "off"); + UpdateINI(); + outdevidx = 0; + } + + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_DEV,CB_SETCURSEL, outdevidx, 0); + + // Populate MIDI channel dialogs + + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_ADDSTRING,0,(LPARAM)"all"); + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_ADDSTRING,0,(LPARAM)"all"); + + char buf[20]; + + for (int i=0; i<16; i++) + { + wsprintf(buf,"%i",i+1); + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_ADDSTRING,0,(LPARAM)buf); + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_ADDSTRING,0,(LPARAM)buf); + } + + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_IN_CHAN,CB_SETCURSEL, (LPARAM)gState->mMidiInChan, 0); + SendDlgItemMessage(hwndDlg,IDC_COMBO_MIDI_OUT_CHAN,CB_SETCURSEL, (LPARAM)gState->mMidiOutChan, 0); + + return true; + } +} + +#ifdef OS_WIN +void PopulatePreferencesDialog(HWND hwndDlg) +{ + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"DirectSound"); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"ASIO"); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_SETCURSEL, gState->mAudioDriverType, 0); + + PopulateAudioDialogs(hwndDlg); + PopulateMidiDialogs(hwndDlg); +} + +#else if defined OS_OSX +void PopulatePreferencesDialog(HWND hwndDlg) +{ + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"CoreAudio"); + //SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_ADDSTRING,0,(LPARAM)"Jack"); + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_DRIVER,CB_SETCURSEL, gState->mAudioDriverType, 0); + + PopulateAudioDialogs(hwndDlg); + PopulateMidiDialogs(hwndDlg); +} +#endif + +WDL_DLGRET PreferencesDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + int v = 0; + switch(uMsg) + { + case WM_INITDIALOG: + + PopulatePreferencesDialog(hwndDlg); + memcpy(gTempState, gState, sizeof(AppState)); // copy state to temp state + + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + if(memcmp(gActiveState, gState, sizeof(AppState)) != 0) // if state is different try to change audio + { + TryToChangeAudio(); + } + EndDialog(hwndDlg, IDOK); // INI file will be changed see MainDialogProc + break; + case IDAPPLY: + TryToChangeAudio(); + break; + case IDCANCEL: + EndDialog(hwndDlg, IDCANCEL); + + // if state has been changed reset to previous state, INI file won't be changed + if (!AudioSettingsInStateAreEqual(gState, gTempState) + || !MIDISettingsInStateAreEqual(gState, gTempState)) + { + memcpy(gState, gTempState, sizeof(AppState)); + + TryToChangeAudioDriverType(); + ProbeAudioIO(); + TryToChangeAudio(); + } + + break; + + case IDC_COMBO_AUDIO_DRIVER: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + + v = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); + + if(v != gState->mAudioDriverType) + { + gState->mAudioDriverType = v; + + TryToChangeAudioDriverType(); + ProbeAudioIO(); + + strcpy(gState->mAudioInDev,GetAudioDeviceName(gAudioInputDevs[0]).c_str()); + strcpy(gState->mAudioOutDev,GetAudioDeviceName(gAudioOutputDevs[0]).c_str()); + + // Reset IO + gState->mAudioOutChanL = 1; + gState->mAudioOutChanR = 2; + + PopulateAudioDialogs(hwndDlg); + } + } + break; + + case IDC_COMBO_AUDIO_IN_DEV: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioInDev); + + // Reset IO + gState->mAudioInChanL = 1; + gState->mAudioInChanR = 2; + + PopulateDriverSpecificControls(hwndDlg); + } + break; + + case IDC_COMBO_AUDIO_OUT_DEV: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioOutDev); + + // Reset IO + gState->mAudioOutChanL = 1; + gState->mAudioOutChanR = 2; + + PopulateDriverSpecificControls(hwndDlg); + } + break; + + case IDC_COMBO_AUDIO_IN_L: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + gState->mAudioInChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_L, CB_GETCURSEL, 0, 0) + 1; + + //TEMP + gState->mAudioInChanR = gState->mAudioInChanL + 1; + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); + // + } + break; + + case IDC_COMBO_AUDIO_IN_R: + if (HIWORD(wParam) == CBN_SELCHANGE) + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); // TEMP +// gState->mAudioInChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_R, CB_GETCURSEL, 0, 0); + break; + + case IDC_COMBO_AUDIO_OUT_L: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + gState->mAudioOutChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_L, CB_GETCURSEL, 0, 0) + 1; + + //TEMP + gState->mAudioOutChanR = gState->mAudioOutChanL + 1; + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); + // + } + break; + + case IDC_COMBO_AUDIO_OUT_R: + if (HIWORD(wParam) == CBN_SELCHANGE) + SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); // TEMP +// gState->mAudioOutChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_R, CB_GETCURSEL, 0, 0); + break; + + case IDC_CB_MONO_INPUT: + if (SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT, BM_GETCHECK, 0, 0) == BST_CHECKED) + gState->mAudioInIsMono = 1; + else + gState->mAudioInIsMono = 0; + break; + + case IDC_COMBO_AUDIO_IOVS: // follow through + case IDC_COMBO_AUDIO_SIGVS: + //TODO: FIX + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int iovsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETCURSEL, 0, 0); + int sigvsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETCURSEL, 0, 0); + + if (atoi(kIOVSOptions[iovsidx].c_str()) < atoi(kSIGVSOptions[sigvsidx].c_str())) // if iovs < sigvs + { + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); + strcpy(gState->mAudioSigVS, kSIGVSOptions[0].c_str()); // set sigvs to minimum + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_SETCURSEL, -1, 0); + } + else + { + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETLBTEXT, sigvsidx, (LPARAM) gState->mAudioSigVS); + } + } + break; + case IDC_COMBO_AUDIO_SR: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioSR); + } + break; + + case IDC_BUTTON_ASIO: + if (HIWORD(wParam) == BN_CLICKED) + #ifdef OS_OSX + system("open \"/Applications/Utilities/Audio MIDI Setup.app\""); + #elif defined OS_WIN + if( gState->mAudioDriverType == DAC_ASIO && gDAC->isStreamRunning()) // TODO: still not right + ASIOControlPanel(); + #endif + break; + + case IDC_COMBO_MIDI_IN_DEV: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiInDev); + ChooseMidiInput( gState->mMidiInDev ); + } + break; + + case IDC_COMBO_MIDI_OUT_DEV: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiOutDev); + ChooseMidiOutput( gState->mMidiOutDev ); + } + break; + + case IDC_COMBO_MIDI_IN_CHAN: + if (HIWORD(wParam) == CBN_SELCHANGE) + gState->mMidiInChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_CHAN, CB_GETCURSEL, 0, 0); + break; + + case IDC_COMBO_MIDI_OUT_CHAN: + if (HIWORD(wParam) == CBN_SELCHANGE) + gState->mMidiOutChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_CHAN, CB_GETCURSEL, 0, 0); + break; + + default: + break; + } + break; + default: + return FALSE; + } + return TRUE; +} + +#ifdef _WIN32 +void ClientResize(HWND hWnd, int nWidth, int nHeight) +{ + RECT rcClient, rcWindow; + POINT ptDiff; + int screenwidth, screenheight; + int x, y; + + screenwidth = GetSystemMetrics(SM_CXSCREEN); + screenheight = GetSystemMetrics(SM_CYSCREEN); + x = (screenwidth / 2) - (nWidth/2); + y = (screenheight / 2) - (nHeight/2); + + GetClientRect(hWnd, &rcClient); + GetWindowRect(hWnd, &rcWindow); + ptDiff.x = (rcWindow.right - rcWindow.left) - rcClient.right; + ptDiff.y = (rcWindow.bottom - rcWindow.top) - rcClient.bottom; + MoveWindow(hWnd, x, y, nWidth + ptDiff.x, nHeight + ptDiff.y, FALSE); +} +#endif + +WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + + gHWND=hwndDlg; + + if(!AttachGUI()) printf("couldn't attach gui\n"); + +#ifdef _WIN32 + ClientResize(hwndDlg, GUI_WIDTH, GUI_HEIGHT); + //SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1))); + //SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1))); + +#else // OSX + CenterWindow(hwndDlg); +#endif + + ShowWindow(hwndDlg,SW_SHOW); + return 1; + case WM_DESTROY: + gHWND=NULL; + +#ifdef _WIN32 + PostQuitMessage(0); +#else + SWELL_PostQuitMessage(hwndDlg); +#endif + + return 0; + case WM_CLOSE: + DestroyWindow(hwndDlg); + return 0; +// case WM_GETDLGCODE: { +// LPARAM lres; +// lres = CallWindowProc(/*TODO GET PROC */, hWnd, WM_GETDLGCODE, wParam, lParam); +// if (lParam && ((MSG*)lParam)->message == WM_KEYDOWN && wParam == VK_LEFT) { +// lres |= DLGC_WANTMESSAGE; +// } +// return lres; +// } + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case ID_QUIT: + DestroyWindow(hwndDlg); + return 0; + case ID_ABOUT: + if(!gPluginInstance->HostRequestingAboutBox()) + { + char version[50]; + sprintf(version, BUNDLE_MFR"\nBuilt on "__DATE__); + MessageBox(hwndDlg,version, BUNDLE_NAME, MB_OK); + } + return 0; + case ID_PREFERENCES: + { + INT_PTR ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_PREF), hwndDlg, PreferencesDlgProc); + + if(ret == IDOK) + { + UpdateINI(); + } + + return 0; + } + } + return 0; + } + return 0; +}