From: <sag...@us...> - 2010-06-09 19:44:52
|
Revision: 619 http://modplug.svn.sourceforge.net/modplug/?rev=619&view=rev Author: saga-games Date: 2010-06-09 19:44:45 +0000 (Wed, 09 Jun 2010) Log Message: ----------- [Imp] Song Length Estimation: Also taking the weird E60 bug into account here... (though this is still not very precise). [Ref] Song Length Estimation: Using vectors instead of large fixed-size arrays. [Imp] Treeview: Ask for confirmation when deleting things [Mod] Paste code: Changing the IsEmpty call back to old behaviour. It doesn't seem to make a difference, but let's better be safe than sorry. Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2010-06-06 16:33:09 UTC (rev 618) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2010-06-09 19:44:45 UTC (rev 619) @@ -1399,7 +1399,7 @@ // if the original modcommand was empty as otherwise the unchanged parts // of the old modcommand would falsely be interpreted being of type // origFormat and ConvertCommand could change them. - if (origFormat != m_SndFile.m_nType && (doMixPaste == false || origModCmd.IsEmpty())) + if (origFormat != m_SndFile.m_nType && (doMixPaste == false || origModCmd.IsEmpty(false))) m_SndFile.ConvertCommand(&(m[col]), origFormat, m_SndFile.m_nType); } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2010-06-06 16:33:09 UTC (rev 618) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2010-06-09 19:44:45 UTC (rev 619) @@ -1393,6 +1393,7 @@ const uint64 modItem = GetModItem(hItem); const uint32 modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); + TCHAR s[64]; PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx]; CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : nullptr; @@ -1402,12 +1403,16 @@ case MODITEM_SEQUENCE: if (pModDoc && pSndFile) { + wsprintf(s, _T("Delete sequence %d?"), modItemID & 0xFFFF); + if(MessageBox(s, _T("Confirmation"), MB_YESNO | MB_DEFBUTTON2) == IDNO) break; pSndFile->Order.RemoveSequence((SEQUENCEINDEX)(modItemID & 0xFFFF)); pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); } break; case MODITEM_ORDER: + wsprintf(s, _T("Delete order %d?"), modItemID & 0xFFFF); + if(MessageBox(s, _T("Confirmation"), MB_YESNO | MB_DEFBUTTON2) == IDNO) break; if ((pModDoc) && (pModDoc->RemoveOrder((SEQUENCEINDEX)(modItemID >> 16), (ORDERINDEX)(modItemID & 0xFFFF)))) { pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); @@ -1415,25 +1420,28 @@ break; case MODITEM_PATTERN: + wsprintf(s, _T("Delete pattern %d?"), modItemID & 0xFFFF); + if(MessageBox(s, _T("Confirmation"), MB_YESNO | MB_DEFBUTTON2) == IDNO) break; if ((pModDoc) && (pModDoc->RemovePattern((PATTERNINDEX)modItemID))) { - //pModDoc->UpdateAllViews(NULL, (dwItem << 16)|HINT_PATTERNDATA|HINT_PATNAMES); pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_PAT) | HINT_PATTERNDATA|HINT_PATNAMES); } break; case MODITEM_SAMPLE: + wsprintf(s, _T("Delete sample %d?"), modItemID & 0xFFFF); + if(MessageBox(s, _T("Confirmation"), MB_YESNO | MB_DEFBUTTON2) == IDNO) break; if ((pModDoc) && (pModDoc->RemoveSample((SAMPLEINDEX)modItemID))) { - //pModDoc->UpdateAllViews(NULL, (dwItem << 16) | HINT_SMPNAMES|HINT_SAMPLEDATA|HINT_SAMPLEINFO); pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_SMP) | HINT_SMPNAMES|HINT_SAMPLEDATA|HINT_SAMPLEINFO); } break; case MODITEM_INSTRUMENT: + wsprintf(s, _T("Delete instrument %d?"), modItemID & 0xFFFF); + if(MessageBox(s, _T("Confirmation"), MB_YESNO | MB_DEFBUTTON2) == IDNO) break; if ((pModDoc) && (pModDoc->RemoveInstrument((INSTRUMENTINDEX)modItemID))) { - //pModDoc->UpdateAllViews(NULL, (dwItem << 16)|HINT_MODTYPE|HINT_ENVELOPE|HINT_INSTRUMENT); pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_INS) | HINT_MODTYPE|HINT_ENVELOPE|HINT_INSTRUMENT); } break; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-06-06 16:33:09 UTC (rev 618) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-06-09 19:44:45 UTC (rev 619) @@ -89,29 +89,30 @@ // -> DESC="alternative BPM/Speed interpretation method" // UINT dwElapsedTime=0, nRow=0, nCurrentPattern=0, nNextPattern=0, nPattern=Order[0]; ROWINDEX nRow = 0; + ROWINDEX nNextPatStartRow = 0; // FT2 E60 bug ORDERINDEX nCurrentPattern = 0; ORDERINDEX nNextPattern = 0; PATTERNINDEX nPattern = Order[0]; double dElapsedTime=0.0; // -! NEW_FEATURE#0022 - UINT nMusicSpeed=m_nDefaultSpeed, nMusicTempo=m_nDefaultTempo, nNextRow=0; + UINT nMusicSpeed = m_nDefaultSpeed, nMusicTempo = m_nDefaultTempo, nNextRow = 0; UINT nMaxRow = 0, nMaxPattern = 0; LONG nGlbVol = m_nDefaultGlobalVolume, nOldGlbVolSlide = 0; - BYTE samples[MAX_CHANNELS]; - BYTE instr[MAX_CHANNELS]; - UINT notes[MAX_CHANNELS]; - BYTE vols[MAX_CHANNELS]; - BYTE oldparam[MAX_CHANNELS]; - UINT chnvols[MAX_CHANNELS]; - double patloop[MAX_CHANNELS]; + vector<BYTE> instr; + vector<UINT> notes; + vector<BYTE> vols; + vector<BYTE> oldparam; + vector<UINT> chnvols; + vector<double> patloop; + vector<ROWINDEX> patloopstart; - memset(instr, 0, sizeof(instr)); - memset(notes, 0, sizeof(notes)); - memset(vols, 0xFF, sizeof(vols)); - memset(patloop, 0, sizeof(patloop)); - memset(oldparam, 0, sizeof(oldparam)); - memset(chnvols, 64, sizeof(chnvols)); - memset(samples, 0, sizeof(samples)); + notes.resize(m_nChannels, 0); + instr.resize(m_nChannels, 0); + vols.resize(m_nChannels, 0xFF); + oldparam.resize(m_nChannels, 0); + chnvols.resize(m_nChannels, 64); + patloop.resize(m_nChannels, 0); + patloopstart.resize(m_nChannels, 0); for(CHANNELINDEX icv = 0; icv < m_nChannels; icv++) chnvols[icv] = ChnSettings[icv].nVolume; nMaxRow = m_nNextRow; nMaxPattern = m_nNextPattern; @@ -183,6 +184,8 @@ { nNextPattern = nCurrentPattern + 1; nNextRow = 0; + if(IsCompatibleMode(TRK_FASTTRACKER2)) nNextRow = nNextPatStartRow; // FT2 E60 bug + nNextPatStartRow = 0; } if (!nRow) { @@ -221,6 +224,7 @@ case CMD_POSITIONJUMP: positionJumpOnThisRow=true; nNextPattern = (ORDERINDEX)param; + nNextPatStartRow = 0; // FT2 E60 bug // see http://lpchip.com/modplug/viewtopic.php?t=2769 - FastTracker resets Dxx if Bxx is called _after_ Dxx if(!patternBreakOnThisRow || (GetType() == MOD_TYPE_XM)) nNextRow = 0; @@ -233,9 +237,10 @@ break; // Pattern Break case CMD_PATTERNBREAK: - patternBreakOnThisRow=true; + patternBreakOnThisRow = true; //Try to check next row for XPARAM nextRow = nullptr; + nNextPatStartRow = 0; // FT2 E60 bug if (nRow < Patterns[nPattern].GetNumRows() - 1) { nextRow = Patterns[nPattern] + (nRow+1) * m_nChannels + nChn; @@ -268,7 +273,7 @@ break; // Set Tempo case CMD_TEMPO: - if ((bAdjust) && (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT | MOD_TYPE_MPT))) + if ((bAdjust) && (m_nType & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT))) { if (param) pChn->nOldTempo = (BYTE)param; else param = pChn->nOldTempo; } @@ -276,10 +281,10 @@ // Tempo Slide if ((param & 0xF0) == 0x10) { - nMusicTempo += (param & 0x0F) * (nMusicSpeed-1); //rewbs.tempoSlideFix + nMusicTempo += (param & 0x0F) * (nMusicSpeed - 1); //rewbs.tempoSlideFix } else { - nMusicTempo -= (param & 0x0F) * (nMusicSpeed-1); //rewbs.tempoSlideFix + nMusicTempo -= (param & 0x0F) * (nMusicSpeed - 1); //rewbs.tempoSlideFix } // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" @@ -298,8 +303,15 @@ if ((param & 0xF0) == 0xE0) nSpeedCount = (param & 0x0F) * nMusicSpeed; else if ((param & 0xF0) == 0x60) { - if (param & 0x0F) dElapsedTime += (dElapsedTime - patloop[nChn]) * (double)(param & 0x0F); - else patloop[nChn] = dElapsedTime; + if (param & 0x0F) + { + dElapsedTime += (dElapsedTime - patloop[nChn]) * (double)(param & 0x0F); + nNextPatStartRow = patloopstart[nChn]; // FT2 E60 bug + } else + { + patloop[nChn] = dElapsedTime; + patloopstart[nChn] = nRow; + } } break; case CMD_XFINEPORTAUPDOWN: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |