INT_PTR WINAPI doResolve(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (INT_PTR r = SNM_HookThemeColorsMessage(hwndDlg, uMsg, wParam, lParam)) return r; switch (uMsg) { case WM_INITDIALOG: { SetDlgItemText(hwndDlg, IDC_TEXT, g_cErrorStr); CheckDlgButton(hwndDlg, IDC_APPLY, BST_CHECKED); HWND hTracks = GetDlgItem(hwndDlg, IDC_TRACK); WDL_UTF8_HookComboBox(hTracks); SendMessage(hTracks, CB_ADDSTRING, 0, (LPARAM)__LOCALIZE("(create new track)","sws_DLG_114")); for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (tr != g_send) { char cName[80]; _snprintf(cName, 80, "%d: %s", i, (char*)GetSetMediaTrackInfo(tr, "P_NAME", NULL)); SendMessage(hTracks, CB_ADDSTRING, 0, (LPARAM)cName); } } SendMessage(hTracks, CB_SETCURSEL, 0, 0); RestoreWindowPos(hwndDlg, RESOLVE_WND_POS, false); g_iResolveRet = 0; return 0; } case WM_COMMAND: wParam = LOWORD(wParam); if (wParam == IDC_DELETE) g_iResolveRet = 1; else if (wParam == IDOK) { char cTrack[10]; GetDlgItemText(hwndDlg, IDC_TRACK, cTrack, 10); int id = atol(cTrack); if (!id) // assume they chose "create new track" { id = GetNumTracks()+1; InsertTrackAtIndex(id, false); TrackList_AdjustWindows(false); } g_recv = CSurf_TrackFromID(id, false); g_iResolveRet = 2; } if (wParam == IDC_DELETE || wParam == IDOK || wParam == IDCANCEL) { SaveWindowPos(hwndDlg, RESOLVE_WND_POS); EndDialog(hwndDlg,0); } return 0; } return 0; }
void CreateTrack1(COMMAND_T* = NULL) { ClearSelected(); InsertTrackAtIndex(0, false); TrackList_AdjustWindows(false); GetSetMediaTrackInfo(CSurf_TrackFromID(1, false), "I_SELECTED", &g_i1); SetLTT(); }
void InsertTrkAbove(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) { InsertTrackAtIndex(i-1, false); ClearSelected(); tr = CSurf_TrackFromID(i, false); TrackList_AdjustWindows(false); GetSetMediaTrackInfo(tr, "I_SELECTED", &g_i1); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Insert track above selected track","sws_undo"), UNDO_STATE_ALL, -1); return; } } }
// _type: 0=Post-Fader (Post-Pan), 1=Pre-FX, 2=deprecated, 3=Pre-Fader (Post-FX) // _undoMsg: NULL=no undo bool CueBuss(const char* _undoMsg, const char* _busName, int _type, bool _showRouting, int _soloDefeat, char* _trTemplatePath, bool _sendToMaster, int* _hwOuts) { if (!SNM_CountSelectedTracks(NULL, false)) return false; WDL_FastString tmplt; if (_trTemplatePath && (!FileOrDirExists(_trTemplatePath) || !LoadChunk(_trTemplatePath, &tmplt) || !tmplt.GetLength())) { char msg[SNM_MAX_PATH] = ""; lstrcpyn(msg, __LOCALIZE("Cue buss not created!\nNo track template file defined","sws_DLG_149"), sizeof(msg)); if (*_trTemplatePath) _snprintfSafe(msg, sizeof(msg), __LOCALIZE_VERFMT("Cue buss not created!\nTrack template not found (or empty): %s","sws_DLG_149"), _trTemplatePath); MessageBox(GetMainHwnd(), msg, __LOCALIZE("S&M - Error","sws_DLG_149"), MB_OK); return false; } bool updated = false; MediaTrack * cueTr = NULL; SNM_SendPatcher* p = NULL; for (int i=1; i <= GetNumTracks(); i++) // skip master { MediaTrack* tr = CSurf_TrackFromID(i, false); if (tr && *(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) { GetSetMediaTrackInfo(tr, "I_SELECTED", &g_i0); // add the buss track, done once! if (!cueTr) { InsertTrackAtIndex(GetNumTracks(), false); TrackList_AdjustWindows(false); cueTr = CSurf_TrackFromID(GetNumTracks(), false); GetSetMediaTrackInfo(cueTr, "P_NAME", (void*)_busName); p = new SNM_SendPatcher(cueTr); if (tmplt.GetLength()) { WDL_FastString chunk; MakeSingleTrackTemplateChunk(&tmplt, &chunk, true, true, false); ApplyTrackTemplate(cueTr, &chunk, false, false, p); } updated = true; } // add a send if (cueTr && p && tr != cueTr) AddReceiveWithVolPan(tr, cueTr, _type, p); } } if (cueTr && p) { // send to master/parent init if (!tmplt.GetLength()) { // solo defeat if (_soloDefeat) { char one[2] = "1"; updated |= (p->ParsePatch(SNM_SET_CHUNK_CHAR, 1, "TRACK", "MUTESOLO", 0, 3, one) > 0); } // master/parend send WDL_FastString mainSend; mainSend.SetFormatted(SNM_MAX_CHUNK_LINE_LENGTH, "MAINSEND %d 0", _sendToMaster?1:0); // adds hw outputs if (_hwOuts) { int monoHWCount=0; while (GetOutputChannelName(monoHWCount)) monoHWCount++; bool cr = false; for(int i=0; i<SNM_MAX_HW_OUTS; i++) { if (_hwOuts[i]) { if (!cr) { mainSend.Append("\n"); cr = true; } if (_hwOuts[i] >= monoHWCount) mainSend.AppendFormatted(32, "HWOUT %d ", (_hwOuts[i]-monoHWCount) | 1024); else mainSend.AppendFormatted(32, "HWOUT %d ", _hwOuts[i]-1); mainSend.Append("0 "); mainSend.AppendFormatted(20, "%.14f ", *(double*)GetConfigVar("defhwvol")); mainSend.Append("0.00000000000000 0 0 0 -1.00000000000000 -1\n"); } } if (!cr) mainSend.Append("\n"); // hot } // patch both updates (no break keyword here: new empty track) updated |= p->ReplaceLine("TRACK", "MAINSEND", 1, 0, mainSend.Get()); } p->Commit(); delete p; if (updated) { GetSetMediaTrackInfo(cueTr, "I_SELECTED", &g_i1); UpdateTimeline(); ScrollSelTrack(true, true); if (_showRouting) Main_OnCommand(40293, 0); if (_undoMsg) Undo_OnStateChangeEx2(NULL, _undoMsg, UNDO_STATE_ALL, -1); } } return updated; }
// Import local files from m3u/pls playlists onto a new track void PlaylistImport(COMMAND_T* ct) { char cPath[256]; vector<SPlaylistEntry> filelist; GetProjectPath(cPath, 256); string listpath = BrowseForFiles(__LOCALIZE("Import playlist","sws_mbox"), cPath, NULL, false, "Playlist files (*.m3u,*.pls)\0*.m3u;*.pls\0All Files (*.*)\0*.*\0"); string ext = ParseFileExtension(listpath); // Decide what kind of playlist we have if(ext == "m3u") { ParseM3U(listpath, filelist); } else if(ext == "pls") { ParsePLS(listpath, filelist); } if(filelist.empty()) { ShowMessageBox(__LOCALIZE("Failed to import playlist. No files found.","sws_mbox"), __LOCALIZE("Import playlist","sws_mbox"), 0); return; } // Validate files vector<string> badfiles; for(int i = 0, c = (int)filelist.size(); i < c; i++) { SPlaylistEntry e = filelist[i]; if(!file_exists(e.path.c_str())) { badfiles.push_back(e.path); } } // If files can't be found, ask user what to do. bool includeMissing = false; if(!badfiles.empty()) { stringstream ss; ss << __LOCALIZE("Cannot find some files. Create items anyway?\n","sws_mbox"); unsigned int limit = min((int)badfiles.size(), 9); // avoid enormous messagebox for(unsigned int i = 0; i < limit; i++) { ss << "\n " << badfiles[i]; } if(badfiles.size() > limit) { ss << "\n +" << badfiles.size() - limit << __LOCALIZE(" more files","sws_mbox"); } switch(ShowMessageBox(ss.str().c_str(), __LOCALIZE("Import playlist","sws_mbox"), 3)) { case 6 : // Yes includeMissing = true; break; case 7 : // No break; default : return; } } Undo_BeginBlock2(NULL); // Add new track int idx = GetNumTracks(); int panMode = 5; // Stereo pan double panLaw = 1.0; // 0dB InsertTrackAtIndex(idx, false); MediaTrack *pTrack = GetTrack(NULL, idx); GetSetMediaTrackInfo(pTrack, "P_NAME", (void*) listpath.c_str()); GetSetMediaTrackInfo(pTrack, "I_PANMODE", (void*) &panMode); GetSetMediaTrackInfo(pTrack, "D_PANLAW", (void*) &panLaw); SetOnlyTrackSelected(pTrack); // Add new items to track double pos = 0.0; for(int i = 0, c = (int)filelist.size(); i < c; i++) { SPlaylistEntry e = filelist[i]; //TODO: Would be better if missing files were offline rather than just empty items. PCM_source *pSrc = PCM_Source_CreateFromFile(e.path.c_str()); if(pSrc || includeMissing) { MediaItem *pItem = AddMediaItemToTrack(pTrack); if(pItem) { MediaItem_Take *pTake = AddTakeToMediaItem(pItem); if(pTake) { GetSetMediaItemTakeInfo(pTake, "P_SOURCE", pSrc); GetSetMediaItemTakeInfo(pTake, "P_NAME", (void*) e.title.c_str()); SetMediaItemPosition(pItem, pos, false); SetMediaItemLength(pItem, e.length, false); pos += e.length; } } } } Undo_EndBlock2(NULL, SWS_CMD_SHORTNAME(ct), UNDO_STATE_ITEMS|UNDO_STATE_TRACKCFG); TrackList_AdjustWindows(false); UpdateTimeline(); Main_OnCommand(40047, 0); // Build missing peaks }