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