From: <sag...@us...> - 2009-11-07 15:47:47
|
Revision: 414 http://modplug.svn.sourceforge.net/modplug/?rev=414&view=rev Author: saga-games Date: 2009-11-07 15:47:35 +0000 (Sat, 07 Nov 2009) Log Message: ----------- [Fix] Orderlist: Pasting orders now removes "+++" items if they are not supported by the current format. [Fix] Pattern paste: Got rid of possible redundant undo points. [Imp] Pattern paste: Assume that the clipboard pattern format is IT (instead of MOD) if no information about the format is available. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-06 20:40:06 UTC (rev 413) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-07 15:47:35 UTC (rev 414) @@ -525,7 +525,10 @@ continue; PATTERNINDEX nPat = pSf->Order.GetInvalidPatIndex(); if (bufItem[0] == '+') + { nPat = pSf->Order.GetIgnoreIndex(); + if(!pSf->GetModSpecifications().hasIgnoreIndex) continue; + } else if (isdigit(bufItem[0])) { nPat = ConvertStrTo<PATTERNINDEX>(bufItem); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-06 20:40:06 UTC (rev 413) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 15:47:35 UTC (rev 414) @@ -1157,7 +1157,6 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { - GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); TEMPO spdmax = m_SndFile.GetModSpecifications().speedMax; DWORD dwMemSize = GlobalSize(hCpy); MODCOMMAND *m = m_SndFile.Patterns[nPattern]; @@ -1165,7 +1164,7 @@ UINT ncol = (dwBeginSel & 0xFFFF) >> 3; UINT col; bool bS3MCommands = false, bOk = false; - MODTYPE origFormat = MOD_TYPE_MOD; + MODTYPE origFormat = MOD_TYPE_IT; UINT len = 0; MODCOMMAND origModCmd; @@ -1176,6 +1175,7 @@ if ((nrow >= m_SndFile.PatternSize[nPattern]) || (ncol >= m_SndFile.m_nChannels)) goto PasteDone; m += nrow * m_SndFile.m_nChannels; + // Search for signature for (;;) { @@ -1188,11 +1188,15 @@ if(p[len - 3] == 'P') origFormat = MOD_TYPE_MPT; if(p[len - 4] == 'S') origFormat = MOD_TYPE_S3M; if(p[len - 3] == 'X') origFormat = MOD_TYPE_XM; + if(p[len - 3] == 'O') origFormat = MOD_TYPE_MOD; break; } } bS3MCommands = (origFormat & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_S3M)) != 0 ? true : false; bOk = true; + + GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); + while ((nrow < m_SndFile.PatternSize[nPattern]) && (len + 11 < dwMemSize)) { // Search for column separator @@ -1359,11 +1363,11 @@ { nrow = 0; ORDERINDEX oNextOrder = m_SndFile.Order.GetNextOrderIgnoringSkips(oCurrentOrder); - if((oNextOrder <= 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone; + if((oNextOrder == 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone; nPattern = m_SndFile.Order[oNextOrder]; if(m_SndFile.Patterns.IsValidPat(nPattern) == false) goto PasteDone; m = m_SndFile.Patterns[nPattern]; - GetPatternUndo()->PrepareUndo(nPattern, 0,0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); + GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); oCurrentOrder = oNextOrder; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |