void showInfoDialog(HINSTANCE hInstance, HWND hwndParent, LPCTSTR filename, int song) { if (infoDialog == NULL) infoDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_INFO), hwndParent, infoDialogProc); if (playing_info || filename == NULL) updateInfoDialog(playing_filename, playing_song); else updateInfoDialog(filename, song); }
static int play(char *fn) { int song; int maxlatency; DWORD threadId; strcpy(current_filename_with_song, fn); song = extractSongNumber(fn, current_filename); if (!loadModule(current_filename, module, &module_len)) return -1; if (!ASAP_Load(&asap, current_filename, module, module_len)) return 1; if (song < 0) song = asap.module_info.default_song; duration = playSong(song); maxlatency = mod.outMod->Open(ASAP_SAMPLE_RATE, channels, BITS_PER_SAMPLE, -1, -1); if (maxlatency < 0) return 1; mod.SetInfo(BITS_PER_SAMPLE, ASAP_SAMPLE_RATE / 1000, channels, 1); mod.SAVSAInit(maxlatency, ASAP_SAMPLE_RATE); // the order of VSASetInfo's arguments in in2.h is wrong! // http://forums.winamp.com/showthread.php?postid=1841035 mod.VSASetInfo(ASAP_SAMPLE_RATE, channels); mod.outMod->SetVolume(-666); seek_needed = -1; thread_run = TRUE; thread_handle = CreateThread(NULL, 0, playThread, NULL, 0, &threadId); if (playing_info) updateInfoDialog(current_filename, song); return thread_handle != NULL ? 0 : 1; }
static void LoadAndPlay(int song) { byte module[ASAP_MODULE_MAX]; int module_len; int duration; if (!loadModule(current_filename, module, &module_len)) return; if (songs > 0) { ClearSongsMenu(); StopPlayback(); songs = 0; EnableMenuItem(hTrayMenu, IDM_SAVE_WAV, MF_BYCOMMAND | MF_GRAYED); } if (!DoLoad(&asap, module, module_len)) return; if (!WaveOut_Open(asap.module_info.channels)) { ShowError("Error initalizing WaveOut"); return; } if (song < 0) song = asap.module_info.default_song; songs = asap.module_info.songs; EnableMenuItem(hTrayMenu, IDM_SAVE_WAV, MF_BYCOMMAND | MF_ENABLED); updateInfoDialog(current_filename, song); SetSongsMenu(songs); CheckMenuRadioItem(hSongMenu, 0, songs - 1, song, MF_BYPOSITION); current_song = song; duration = asap.module_info.durations[song]; if (asap.module_info.loops[song]) duration = -1; ASAP_PlaySong(&asap, song, duration); Tray_Modify(hPlayIcon); WaveOut_Start(); }
void setPlayingSong(LPCTSTR filename, int song) { if (filename != NULL && _tcslen(filename) < MAX_PATH - 1) _tcscpy(playing_filename, filename); playing_song = song; if (playing_info) updateInfoDialog(playing_filename, song); }
static INT_PTR CALLBACK infoDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: #ifdef PLAYING_INFO CheckDlgButton(hDlg, IDC_PLAYING, playing_info ? BST_CHECKED : BST_UNCHECKED); #endif SendDlgItemMessage(hDlg, IDC_AUTHOR, EM_LIMITTEXT, ASAPInfo_MAX_TEXT_LENGTH, 0); SendDlgItemMessage(hDlg, IDC_NAME, EM_LIMITTEXT, ASAPInfo_MAX_TEXT_LENGTH, 0); SendDlgItemMessage(hDlg, IDC_DATE, EM_LIMITTEXT, ASAPInfo_MAX_TEXT_LENGTH, 0); SendDlgItemMessage(hDlg, IDC_TIME, EM_LIMITTEXT, ASAPWriter_MAX_DURATION_LENGTH, 0); return TRUE; case WM_COMMAND: switch (wParam) { #ifdef PLAYING_INFO case MAKEWPARAM(IDC_PLAYING, BN_CLICKED): playing_info = (IsDlgButtonChecked(hDlg, IDC_PLAYING) == BST_CHECKED); if (playing_info && playing_filename[0] != '\0') updateInfoDialog(playing_filename, playing_song); onUpdatePlayingInfo(); return TRUE; #endif case MAKEWPARAM(IDC_AUTHOR, EN_CHANGE): updateInfoString(hDlg, IDC_AUTHOR, INVALID_FIELD_AUTHOR, ASAPInfo_SetAuthor); return TRUE; case MAKEWPARAM(IDC_NAME, EN_CHANGE): updateInfoString(hDlg, IDC_NAME, INVALID_FIELD_NAME, ASAPInfo_SetTitle); return TRUE; case MAKEWPARAM(IDC_DATE, EN_CHANGE): updateInfoString(hDlg, IDC_DATE, INVALID_FIELD_DATE, ASAPInfo_SetDate); return TRUE; case MAKEWPARAM(IDC_PICKDATE, BN_CLICKED): toggleCalendar(hDlg); return TRUE; case MAKEWPARAM(IDC_TIME, EN_CHANGE): { char str[ASAPWriter_MAX_DURATION_LENGTH + 1]; int duration; SendDlgItemMessage(hDlg, IDC_TIME, WM_GETTEXT, ASAPWriter_MAX_DURATION_LENGTH + 1, (LPARAM) str); duration = ASAPInfo_ParseDuration(str); ASAPInfo_SetDuration(edited_info, edited_song, duration); EnableWindow(GetDlgItem(infoDialog, IDC_LOOP), str[0] != '\0'); updateSaveButtons(INVALID_FIELD_TIME | INVALID_FIELD_TIME_SHOW, duration >=0 || str[0] == '\0'); } return TRUE; case MAKEWPARAM(IDC_TIME, EN_KILLFOCUS): if ((invalid_fields & INVALID_FIELD_TIME_SHOW) != 0) { invalid_fields &= ~INVALID_FIELD_TIME_SHOW; showEditTip(IDC_TIME, _T("Invalid format"), _T("Please type MM:SS.mmm")); } return TRUE; case MAKEWPARAM(IDC_LOOP, BN_CLICKED): ASAPInfo_SetLoop(edited_info, edited_song, IsDlgButtonChecked(hDlg, IDC_LOOP) == BST_CHECKED); updateSaveButtons(0, TRUE); return TRUE; case MAKEWPARAM(IDC_SONGNO, CBN_SELCHANGE): setEditedSong(SendDlgItemMessage(hDlg, IDC_SONGNO, CB_GETCURSEL, 0, 0)); updateSaveButtons(INVALID_FIELD_TIME | INVALID_FIELD_TIME_SHOW, TRUE); return TRUE; case MAKEWPARAM(IDC_SAVE, BN_CLICKED): saveInfo(); return TRUE; case MAKEWPARAM(IDC_SAVEAS, BN_CLICKED): saveInfoAs(); return TRUE; case MAKEWPARAM(IDCANCEL, BN_CLICKED): if (invalid_fields == 0 && infoChanged()) { switch (MessageBox(hDlg, _T("Save changes?"), _T("ASAP"), MB_YESNOCANCEL | MB_ICONQUESTION)) { case IDYES: if (!saveInfoAs()) return TRUE; break; case IDCANCEL: return TRUE; default: break; } } closeInfoDialog(); return TRUE; } break; case WM_NOTIFY: { LPNMSELCHANGE psc = (LPNMSELCHANGE) lParam; if (psc->nmhdr.hwndFrom == monthcal && psc->nmhdr.code == MCN_SELECT) { _TCHAR str[32]; ShowWindow(monthcal, SW_HIDE); _stprintf(str, _T("%02d/%02d/%d"), psc->stSelStart.wDay, psc->stSelStart.wMonth, psc->stSelStart.wYear); SetDlgItemText(hDlg, IDC_DATE, str); ASAPInfo_SetDate(edited_info, str); updateSaveButtons(INVALID_FIELD_DATE, TRUE); } } break; case WM_DESTROY: if (monthcal != NULL) { DestroyWindow(monthcal); monthcal = NULL; } return 0; default: break; } return FALSE; }