From: <sag...@us...> - 2012-12-26 00:27:33
|
Revision: 1478 http://sourceforge.net/p/modplug/code/1478 Author: saga-games Date: 2012-12-26 00:27:25 +0000 (Wed, 26 Dec 2012) Log Message: ----------- [Imp] Instrument editor: Next/Prev instrument shortcuts and the tab key also work on the sample map now. [Fix] After performing a module cleanup with sample rearranging, some bogus sample slot became visible again when adding a sample afterwards. [Fix] Fixed problem with Play/Pause command when loop song is off (http://bugs.openmpt.org/view.php?id=325) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-12-23 20:08:46 UTC (rev 1477) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-12-26 00:27:25 UTC (rev 1478) @@ -521,7 +521,7 @@ if (m_pParent) m_pParent->PostMessage(WM_COMMAND, ID_INSTRUMENT_DUPLICATE); } -//rewbs.customKeys + LRESULT CNoteMapWnd::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) //--------------------------------------------------------------- { @@ -573,6 +573,8 @@ // Parent shortcuts (also displayed in context menu of this control) case kcInstrumentCtrlDuplicate: OnInstrumentDuplicate(); return wParam; + case kcNextInstrument: if(m_pParent) m_pParent->PostMessage(WM_COMMAND, ID_NEXTINSTRUMENT); return wParam; + case kcPrevInstrument: if(m_pParent) m_pParent->PostMessage(WM_COMMAND, ID_PREVINSTRUMENT); return wParam; } return NULL; @@ -713,8 +715,8 @@ if (m_nNote+3 < NOTE_MAX) { m_nNote += 3; bRedraw = true; } else if (m_nNote < NOTE_MAX - 1) { m_nNote = NOTE_MAX - 1; bRedraw = true; } break; - case VK_TAB: - return true; +// case VK_TAB: +// return true; case VK_RETURN: if (m_pModDoc && m_pModDoc->GetSoundFile()) { Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2012-12-23 20:08:46 UTC (rev 1477) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2012-12-26 00:27:25 UTC (rev 1478) @@ -101,7 +101,7 @@ } if(nRemainingChannels == GetNumChannels() || nRemainingChannels < m_SndFile.GetModSpecifications().channelsMin) { - CString str; + CString str; if(nRemainingChannels == GetNumChannels()) str = "No channels chosen to be removed."; else @@ -218,8 +218,7 @@ if(recordStates[newOrder[nChn]] == 1) Record1Channel(nChn, true); if(recordStates[newOrder[nChn]] == 2) Record2Channel(nChn, true); m_SndFile.m_bChannelMuteTogglePending[nChn] = chnMutePendings[newOrder[nChn]]; - } - else + } else { m_SndFile.InitChannel(nChn); } @@ -309,12 +308,6 @@ sampleNames[i] = m_SndFile.m_szNames[i]; } - // Remove sample data references from now unused slots. - for(SAMPLEINDEX i = newNumSamples + 1; i <= oldNumSamples; i++) - { - m_SndFile.GetSample(i).pSample = nullptr; - } - // Now, create new sample list. m_SndFile.m_nSamples = newNumSamples; for(SAMPLEINDEX i = 0; i < newNumSamples; i++) @@ -341,6 +334,12 @@ } } + // Remove sample data references from now unused slots. + for(SAMPLEINDEX i = newNumSamples + 1; i <= oldNumSamples; i++) + { + m_SndFile.DestroySample(i); + } + if(m_SndFile.GetNumInstruments()) { // Instrument mode: Update sample maps. @@ -391,12 +390,12 @@ CriticalSection cs; - const INSTRUMENTINDEX oldNumInstruments = m_SndFile.GetNumInstruments(); + const INSTRUMENTINDEX oldNumInstruments = m_SndFile.GetNumInstruments(), newNumInstruments = static_cast<INSTRUMENTINDEX>(newOrder.size()); m_SndFile.m_nInstruments = static_cast<INSTRUMENTINDEX>(newOrder.size()); vector<ModInstrument> instrumentHeaders(oldNumInstruments + 1); vector<INSTRUMENTINDEX> newIndex(oldNumInstruments + 1, 0); // One of the new indexes for the old instrument - for(size_t i = 0; i < newOrder.size(); i++) + for(size_t i = 0; i < newNumInstruments; i++) { const INSTRUMENTINDEX origSlot = newOrder[i]; if(origSlot > 0 && origSlot <= oldNumInstruments) @@ -417,7 +416,7 @@ } // Now, create new instrument list. - for(INSTRUMENTINDEX i = 0; i < newOrder.size(); i++) + for(INSTRUMENTINDEX i = 0; i < newNumInstruments; i++) { ModInstrument *ins = m_SndFile.AllocateInstrument(i + 1); if(ins == nullptr) @@ -434,7 +433,7 @@ } // Free unused instruments - for(INSTRUMENTINDEX i = newOrder.size() + 1; i <= oldNumInstruments; i++) + for(INSTRUMENTINDEX i = newNumInstruments + 1; i <= oldNumInstruments; i++) { m_SndFile.DestroyInstrument(i, doNoDeleteAssociatedSamples); } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2012-12-23 20:08:46 UTC (rev 1477) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2012-12-26 00:27:25 UTC (rev 1478) @@ -1025,6 +1025,7 @@ m_nGlobalVolume = m_nDefaultGlobalVolume; m_nMusicSpeed = m_nDefaultSpeed; m_nMusicTempo = m_nDefaultTempo; + visitedSongRows.Initialize(true); } m_SongFlags.reset(SONG_CPUVERYHIGH | SONG_FADINGSONG | SONG_ENDREACHED | SONG_GLOBALFADE); for (nPattern = 0; nPattern < Order.size(); nPattern++) @@ -1881,7 +1882,8 @@ for(SAMPLEINDEX i = start; i <= GetModSpecifications().samplesMax; i++) { // When loading into an instrument, ignore non-empty sample names. Else, only use this slot if the sample name is empty or we're in second pass. - if(Samples[i].pSample == nullptr && (!m_szNames[i][0] || passes == 1 || targetInstrument != INSTRUMENTINDEX_INVALID)) + if(i > GetNumSamples() + || (Samples[i].pSample == nullptr && (!m_szNames[i][0] || passes == 1 || targetInstrument != INSTRUMENTINDEX_INVALID))) { // Empty slot, so it's a good candidate already. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |