From: <sag...@us...> - 2015-06-13 19:59:00
|
Revision: 5314 http://sourceforge.net/p/modplug/code/5314 Author: saga-games Date: 2015-06-13 19:58:53 +0000 (Sat, 13 Jun 2015) Log Message: ----------- [Fix] Support for tempo swing in pattern copy&paste, pattern cleanup, etc Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/PatternClipboard.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -372,6 +372,7 @@ { // This stuff is needed for copying the old pattern properties to the new pattern number std::string name; // original pattern name + TempoSwing swing; // original pattern tempo swing ModCommand *data; // original pattern data ROWINDEX numRows; // original pattern sizes ROWINDEX rowsPerBeat; // original pattern highlight @@ -380,7 +381,7 @@ PATTERNINDEX newIndex; // map old pattern index <-> new pattern index }; -const OrigPatSettings defaultSettings = { "", nullptr, 0, 0, 0, PATTERNINDEX_INVALID }; +const OrigPatSettings defaultSettings = { "", TempoSwing(), nullptr, 0, 0, 0, PATTERNINDEX_INVALID }; // Rearrange patterns (first pattern in order list = 0, etc...) @@ -437,6 +438,7 @@ patternSettings[newIndex].rowsPerBeat = sndFile.Patterns[pat].GetRowsPerBeat(); patternSettings[newIndex].rowsPerMeasure = sndFile.Patterns[pat].GetRowsPerMeasure(); } + patternSettings[newIndex].swing = sndFile.Patterns[pat].GetTempoSwing(); patternSettings[newIndex].name = sndFile.Patterns[pat].GetName(); } } @@ -446,6 +448,7 @@ { sndFile.Patterns[pat].SetData(patternSettings[pat].data, patternSettings[pat].numRows); sndFile.Patterns[pat].SetSignature(patternSettings[pat].rowsPerBeat, patternSettings[pat].rowsPerMeasure); + sndFile.Patterns[pat].SetTempoSwing(patternSettings[pat].swing); sndFile.Patterns[pat].SetName(patternSettings[pat].name); } Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -828,9 +828,12 @@ if(m_sndFile.Patterns.IsValidPat(newPat)) { // update time signature - if(m_sndFile.Patterns.IsValidIndex(curPat) && m_sndFile.Patterns[curPat].GetOverrideSignature()) + if(m_sndFile.Patterns.IsValidIndex(curPat)) { - m_sndFile.Patterns[newPat].SetSignature(m_sndFile.Patterns[curPat].GetRowsPerBeat(), m_sndFile.Patterns[curPat].GetRowsPerMeasure()); + if(m_sndFile.Patterns[curPat].GetOverrideSignature()) + m_sndFile.Patterns[newPat].SetSignature(m_sndFile.Patterns[curPat].GetRowsPerBeat(), m_sndFile.Patterns[curPat].GetRowsPerMeasure()); + if(m_sndFile.Patterns[curPat].HasTempoSwing()) + m_sndFile.Patterns[newPat].SetTempoSwing(m_sndFile.Patterns[curPat].GetTempoSwing()); } // move to new pattern m_OrderList.SetCurSel(curOrd); Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -656,6 +656,9 @@ if(nNewRPB <= pSndFile->Patterns[nPat].GetRowsPerMeasure()) { pSndFile->Patterns[nPat].SetSignature(nNewRPB, pSndFile->Patterns[nPat].GetRowsPerMeasure()); + TempoSwing swing = pSndFile->Patterns[nPat].GetTempoSwing(); + swing.resize(nNewRPB); + pSndFile->Patterns[nPat].SetTempoSwing(swing); pModDoc->SetModified(); } } else Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -1847,7 +1847,7 @@ strcpy(m_SndFile.m_szNames[smp], "Render To Sample"); strncat(m_SndFile.m_szNames[smp], fileNameAdd, MAX_SAMPLENAME - strlen("Render To Sample") - 1); UpdateAllViews(nullptr, SampleHint().Info().Data().Names()); - if(m_SndFile.GetNumInstruments()) + if(m_SndFile.GetNumInstruments() && !m_SndFile.IsSampleUsed(smp)) { InsertInstrument(smp); UpdateAllViews(nullptr, InstrumentHint().Info().Names()); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -823,10 +823,10 @@ // Set current directory to My Documents (normal) or OpenMPT directory (portable). // If no sample / mod / etc. paths are set up by the user, this will be the default location for browsing files. - if(portableMode) + if(portableMode || SHGetFolderPathW(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, dir) != S_OK) { SetCurrentDirectoryW(configPathApp.AsNative().c_str()); - } else if(SHGetFolderPathW(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, dir) == S_OK) + } else { SetCurrentDirectoryW(dir); } @@ -1057,8 +1057,8 @@ // Initialize CMainFrame pMainFrame->Initialize(); InitCommonControls(); - m_dwLastPluginIdleCall = 0; //rewbs.VSTCompliance - pMainFrame->m_InputHandler->UpdateMainMenu(); //rewbs.customKeys + m_dwLastPluginIdleCall = 0; + pMainFrame->m_InputHandler->UpdateMainMenu(); // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) Modified: trunk/OpenMPT/mptrack/PatternClipboard.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternClipboard.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/PatternClipboard.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -32,6 +32,7 @@ * 'Rows: 64\r\n' (must be first) * 'Name: Pattern Name\r\n' (optional) * 'Signature: 4/16\r\n' (optional) + * 'Swing: 16777216,16777216,16777216,16777216\r\n' (optional) * Pattern data... */ @@ -94,16 +95,27 @@ // New pattern patList[pattern] = insertedPats++; - patternData.AppendFormat("Rows: %u\r\n", sndFile.Patterns[pattern].GetNumRows()); - CStringA name = sndFile.Patterns[pattern].GetName().c_str(); + const CPattern &pat = sndFile.Patterns[pattern]; + patternData.AppendFormat("Rows: %u\r\n", pat.GetNumRows()); + CStringA name = pat.GetName().c_str(); if(!name.IsEmpty()) { patternData.Append("Name: " + name + "\r\n"); } - if(sndFile.Patterns[pattern].GetOverrideSignature()) + if(pat.GetOverrideSignature()) { - patternData.AppendFormat("Signature: %u/%u\r\n", sndFile.Patterns[pattern].GetRowsPerBeat(), sndFile.Patterns[pattern].GetRowsPerMeasure()); + patternData.AppendFormat("Signature: %u/%u\r\n", pat.GetRowsPerBeat(), pat.GetRowsPerMeasure()); } + if(pat.HasTempoSwing()) + { + patternData += "Swing: "; + const TempoSwing &swing = pat.GetTempoSwing(); + for(size_t i = 0; i < swing.size(); i++) + { + patternData.AppendFormat(i == 0 ? "%u" : ",%u", swing[i]); + } + patternData += "\r\n"; + } patternData.Append(CreateClipboardString(sndFile, pattern, PatternRect(PatternCursor(), PatternCursor(sndFile.Patterns[pattern].GetNumRows() - 1, sndFile.GetNumChannels() - 1, PatternCursor::lastColumn)))); } @@ -527,6 +539,18 @@ ROWINDEX rpb = ConvertStrTo<ROWINDEX>(data.Mid(pos, pos2 - pos)); ROWINDEX rpm = ConvertStrTo<ROWINDEX>(data.Mid(pos2, eol - pos2)); sndFile.Patterns[pattern].SetSignature(rpb, rpm); + } else if(data.Mid(pos, 7) == "Swing: ") + { + pos += 7; + TempoSwing swing; + swing.resize(sndFile.Patterns[pattern].GetRowsPerBeat(), TempoSwing::Unity); + size_t i = 0; + while(pos > 0 && pos < eol && i < swing.size()) + { + swing[i++] = ConvertStrTo<TempoSwing::value_type>(data.Mid(pos, eol - pos)); + pos = data.Find(",", pos + 1) + 1; + } + sndFile.Patterns[pattern].SetTempoSwing(swing); } else { break; Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-13 19:58:53 UTC (rev 5314) @@ -366,8 +366,7 @@ if(sndFile.m_nTempoMode == tempoModeModern) { sndFile.m_tempoSwing = m_tempoSwing; - sndFile.m_tempoSwing.resize(sndFile.m_nDefaultRowsPerBeat, TempoSwing::Unity); - sndFile.m_tempoSwing.Normalize(); + sndFile.m_tempoSwing.resize(sndFile.m_nDefaultRowsPerBeat); } else { sndFile.m_tempoSwing.clear(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-13 19:58:53 UTC (rev 5314) @@ -1321,8 +1321,6 @@ CAPTION "Pattern Properties" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - DEFPUSHBUTTON "&OK",IDOK,132,6,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,132,24,50,14 LTEXT "Rows:",IDC_STATIC,6,6,108,8 COMBOBOX IDC_COMBO1,6,18,48,93,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&/2",IDC_BUTTON_HALF,60,18,18,12 @@ -1336,6 +1334,8 @@ EDITTEXT IDC_ROWSPERMEASURE,18,84,30,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,6,102,174,1 LTEXT "Pattern Info",IDC_TEXT1,6,108,174,14 + DEFPUSHBUTTON "&OK",IDOK,132,6,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,132,24,50,14 END IDD_PATTERN_EDITCOMMAND DIALOGEX 0, 0, 274, 95 Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2015-06-13 17:17:54 UTC (rev 5313) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2015-06-13 19:58:53 UTC (rev 5314) @@ -370,6 +370,7 @@ enum { Unity = 1u << 24 }; // Normalize the tempo swing coefficients so that they add up to exactly the specified tempo again void Normalize(); + void resize(size_type _Newsize, value_type val = Unity) { vector::resize(_Newsize, val); Normalize(); } static void Serialize(std::ostream &oStrm, const TempoSwing &swing); static void Deserialize(std::istream& iStrm, TempoSwing &swing, const size_t); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |