From: <sag...@us...> - 2011-10-23 20:34:29
|
Revision: 1120 http://modplug.svn.sourceforge.net/modplug/?rev=1120&view=rev Author: saga-games Date: 2011-10-23 20:34:22 +0000 (Sun, 23 Oct 2011) Log Message: ----------- [Fix] Instrument -> Sample conversion broke PC Notes and note cuts / fades / offs. [Fix] Pattern Editor: The second record group was slightly broken since a few revisions ago. [Imp] Envelope Editor: Better default values for loop points when enabling loops or sustain loops. [Mod] Main Menu: "View Comments" is now available in all mod formats, since the comments page also contains other information. [Ref] Various small oneliner changes Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/CleanupSong.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/DefaultVstEditor.cpp trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/soundlib/LOAD_AMF.CPP Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -998,21 +998,15 @@ } // Remove all instruments -bool CModCleanupDlg::RemoveAllInstruments(bool bConfirm) -//------------------------------------------------------ +bool CModCleanupDlg::RemoveAllInstruments() +//----------------------------------------- { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(pSndFile == nullptr) return false; if (pSndFile->GetNumInstruments() == 0) return false; - if(bConfirm) - { - if (Reporting::Confirm("Do you want to convert all instruments to samples?", "Removing all instruments") == cnfYes) - { - m_pModDoc->ConvertInstrumentsToSamples(); - } - } + m_pModDoc->ConvertInstrumentsToSamples(); for (INSTRUMENTINDEX i = 1; i <= pSndFile->GetNumInstruments(); i++) { Modified: trunk/OpenMPT/mptrack/CleanupSong.h =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.h 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/CleanupSong.h 2011-10-23 20:34:22 UTC (rev 1120) @@ -60,7 +60,7 @@ bool OptimizeSamples(); // Remove unused sample data // Instruments bool RemoveUnusedInstruments(); // Remove unused instruments - bool RemoveAllInstruments(bool bConfirm = true); + bool RemoveAllInstruments(); // Plugins bool RemoveUnusedPlugins(); // Remove ununsed plugins bool RemoveAllPlugins(); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -311,7 +311,7 @@ SAMPLEINDEX nmax = m_pSndFile->GetNumSamples(); for (SAMPLEINDEX i = 1; i <= nmax; i++) if (m_pSndFile->GetSample(i).pSample) { - if (m_pModDoc->GetSplitKeyboardSettings().IsSplitActive() && nSplitIns < ARRAYELEMCOUNT(m_pSndFile->m_szNames)) + if (m_pModDoc->GetSplitKeyboardSettings().IsSplitActive()) wsprintf(s, szSplitFormat, nSplitIns, GetNoteStr(noteSplit), i, m_pSndFile->m_szNames[nSplitIns], m_pSndFile->m_szNames[i]); else wsprintf(s, "%02u: %s", i, m_pSndFile->m_szNames[i]); Modified: trunk/OpenMPT/mptrack/DefaultVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/DefaultVstEditor.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/DefaultVstEditor.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -186,7 +186,7 @@ scrollRect.MoveToX(rect.right - scrollRect.right); // Ignore this space in our calculation from now on. - rect.right -= (scrollRect.right - scrollRect.left); + rect.right -= scrollRect.Width(); controls.clear(); Modified: trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -140,7 +140,7 @@ m_ChannelCBox.SetCurSel(activeSetting.GetChannel()); - if(m_Setting.GetEvent() == 0xB) + if(m_Setting.GetEvent() == MIDIEVENT_CONTROLLERCHANGE) m_EventCBox.SetCurSel(0); else m_EventCBox.SetCurSel(-1); Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -1644,14 +1644,14 @@ BOOL CMainFrame::SetupSoundCard(DWORD q, DWORD rate, UINT nBits, UINT nChns, UINT bufsize, LONG wd) //------------------------------------------------------------------------------------------------- { - BOOL bPlaying = (m_dwStatus & MODSTATUS_PLAYING) ? TRUE : FALSE; + const bool isPlaying = (m_dwStatus & MODSTATUS_PLAYING) != 0; if ((GetSettings().m_dwRate != rate) || ((GetSettings().m_dwSoundSetup & SOUNDSETUP_RESTARTMASK) != (q & SOUNDSETUP_RESTARTMASK)) || (GetSettings().m_nWaveDevice != wd) || (GetSettings().m_nBufferLength != bufsize) || (nBits != GetSettings().m_nBitsPerSample) || (GetSettings().m_nChannels != nChns)) { CModDoc *pActiveMod = NULL; HWND hFollow = m_hFollowSong; - if (bPlaying) + if (isPlaying) { if ((m_pSndFile) && (!m_pSndFile->IsPaused())) pActiveMod = m_pModPlaying; PauseMod(); @@ -1672,7 +1672,7 @@ { // No need to restart playback GetSettings().m_dwSoundSetup = q; - CSoundFile::EnableMMX((GetSettings().m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) ? TRUE : FALSE); + CSoundFile::EnableMMX((GetSettings().m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) != 0); if (GetSettings().m_dwSoundSetup & SOUNDSETUP_STREVERSE) CSoundFile::gdwSoundSetup |= SNDMIX_REVERSESTEREO; else Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -85,7 +85,7 @@ ON_COMMAND(ID_PATTERN_RESTART, OnPatternRestart) //rewbs.patPlayAllViews ON_UPDATE_COMMAND_UI(ID_INSERT_INSTRUMENT, OnUpdateXMITMPTOnly) ON_UPDATE_COMMAND_UI(ID_VIEW_INSTRUMENTS, OnUpdateXMITMPTOnly) - ON_UPDATE_COMMAND_UI(ID_VIEW_COMMENTS, OnUpdateXMITMPTOnly) + //ON_UPDATE_COMMAND_UI(ID_VIEW_COMMENTS, OnUpdateXMITMPTOnly) ON_UPDATE_COMMAND_UI(ID_VIEW_MIDIMAPPING, OnUpdateHasMIDIMappings) ON_UPDATE_COMMAND_UI(ID_FILE_SAVEASMP3, OnUpdateMP3Encode) ON_UPDATE_COMMAND_UI(ID_VIEW_EDITHISTORY, OnUpdateITMPTOnly) @@ -1884,8 +1884,8 @@ pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 0); } - BOOL bPlaying = (pMainFrm->GetModPlaying() == this) ? TRUE : FALSE; - if ((bPlaying) && (!(m_SndFile.m_dwSongFlags & (SONG_PAUSED|SONG_STEP/*|SONG_PATTERNLOOP*/)))) + bool isPlaying = (pMainFrm->GetModPlaying() == this); + if ((isPlaying) && (!(m_SndFile.m_dwSongFlags & (SONG_PAUSED|SONG_STEP/*|SONG_PATTERNLOOP*/)))) { OnPlayerPause(); return; @@ -1896,11 +1896,13 @@ for (UINT i=m_SndFile.m_nChannels; i<MAX_CHANNELS; i++) if (!m_SndFile.Chn[i].nMasterChn) { m_SndFile.Chn[i].dwFlags |= (CHN_NOTEFADE|CHN_KEYOFF); - if (!bPlaying) m_SndFile.Chn[i].nLength = 0; + if (!isPlaying) m_SndFile.Chn[i].nLength = 0; } - if (bPlaying) { + if (isPlaying) + { m_SndFile.StopAllVsti(); - } else { + } else + { m_SndFile.ResumePlugins(); } @@ -1921,13 +1923,13 @@ { if (pMainFrm->GetModPlaying() == this) { - BOOL bLoop = (m_SndFile.m_dwSongFlags & SONG_PATTERNLOOP) ? TRUE : FALSE; + bool isLooping = (m_SndFile.m_dwSongFlags & SONG_PATTERNLOOP) != 0; UINT nPat = m_SndFile.m_nPattern; UINT nRow = m_SndFile.m_nRow; UINT nNextRow = m_SndFile.m_nNextRow; pMainFrm->PauseMod(); - if ((bLoop) && (nPat < m_SndFile.Patterns.Size())) + if ((isLooping) && (nPat < m_SndFile.Patterns.Size())) { CriticalSection cs; @@ -2046,14 +2048,14 @@ void CModDoc::OnEditComments() //---------------------------- { - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_COMMENTS); + SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_COMMENTS); } //rewbs.graph void CModDoc::OnEditGraph() //------------------------- { - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_GRAPH); + if (m_SndFile.GetType() & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_GRAPH); } //end rewbs.graph @@ -2081,7 +2083,7 @@ //--------------------------------------- { if (p) - p->Enable((m_SndFile.GetType() & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE); + p->Enable((m_SndFile.GetType() & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) ? TRUE : FALSE); } @@ -2089,7 +2091,7 @@ //--------------------------------------- { if (p) - p->Enable((m_SndFile.GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE); + p->Enable((m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) ? TRUE : FALSE); } @@ -2104,18 +2106,18 @@ //--------------------------------------------------- { if (p) - p->Enable((m_SndFile.GetType() & (MOD_TYPE_XM|MOD_TYPE_IT)) ? TRUE : FALSE); + p->Enable((m_SndFile.GetType() & (MOD_TYPE_XM | MOD_TYPE_IT)) ? TRUE : FALSE); } void CModDoc::OnInsertPattern() //----------------------------- { - LONG pat = InsertPattern(); + const PATTERNINDEX pat = InsertPattern(); if (pat >= 0) { - UINT ord = 0; - for (UINT i=0; i<m_SndFile.Order.size(); i++) + ORDERINDEX ord = 0; + for (ORDERINDEX i = 0; i < m_SndFile.Order.size(); i++) { if (m_SndFile.Order[i] == pat) ord = i; if (m_SndFile.Order[i] == m_SndFile.Order.GetInvalidPatIndex()) break; @@ -2319,12 +2321,12 @@ // if format is compatible, everything is fine. if not, let's still search // for another command. this fixes searching for the EFx command, which // does different things in MOD format. - if((m_SndFile.m_nType & gFXInfo[i].dwFormats) != 0) + if((m_SndFile.GetType() & gFXInfo[i].dwFormats) != 0) break; } } if (fxndx == MAX_FXINFO) return false; - bSupported = ((m_SndFile.m_nType & gFXInfo[fxndx].dwFormats) != 0); + bSupported = ((m_SndFile.GetType() & gFXInfo[fxndx].dwFormats) != 0); if (gFXInfo[fxndx].pszName) { if ((bXX) && (bSupported)) @@ -2345,7 +2347,7 @@ { case CMD_MODCMDEX: case CMD_S3MCMDEX: - if ((param & 0xF0) == 0xF0 && !(m_SndFile.m_nType & MOD_TYPE_MOD)) //Set Macro + if ((param & 0xF0) == 0xF0 && !(m_SndFile.GetType() & MOD_TYPE_MOD)) //Set Macro { macroText = m_SndFile.m_MidiCfg.szMidiSFXExt[(param & 0x0F)]; chanSpec.Format(" to %d: ", param & 0x0F); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -312,11 +312,11 @@ void operator()(MODCOMMAND& m) { - if(m.instr) + if(m.instr && !m.IsPcNote()) { MODCOMMAND::INSTR instr = m.instr, newinstr = 0; MODCOMMAND::NOTE note = m.note, newnote = note; - if((note >= NOTE_MIN) && (note <= NOTE_MAX)) + if(note != NOTE_NONE && NOTE_IS_VALID(note)) note--; else note = NOTE_MIDDLEC - 1; @@ -329,7 +329,10 @@ if(newinstr >= MAX_SAMPLES) newinstr = 0; } m.instr = newinstr; - m.note = newnote; + if(m.note != NOTE_NONE && NOTE_IS_VALID(m.note)) + { + m.note = newnote; + } } } Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -566,7 +566,7 @@ if (pModDoc) { - const bool b = (IsDlgButtonChecked(itemID)) ? true : false; + const bool b = (IsDlgButtonChecked(itemID) != FALSE); const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; pModDoc->MuteChannel(nChn, b); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); @@ -586,7 +586,7 @@ if (pModDoc) { - const bool b = (IsDlgButtonChecked(itemID)) ? true : false; + const bool b = (IsDlgButtonChecked(itemID) != FALSE); const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; pModDoc->SurroundChannel(nChn, b); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -1799,6 +1799,13 @@ CModDoc *pModDoc = GetDocument(); if ((pModDoc) && (EnvSetLoop(!EnvGetLoop()))) { + INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr(); + if(EnvGetLoop() && pEnv != nullptr && pEnv->nLoopEnd == 0) + { + // Enabled loop => set loop points if no loop has been specified yet. + pEnv->nLoopStart = 0; + pEnv->nLoopEnd = pEnv->nNodes - 1; + } SetInstrumentModified(); pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); UpdateNcButtonState(); @@ -1812,6 +1819,12 @@ CModDoc *pModDoc = GetDocument(); if ((pModDoc) && (EnvSetSustain(!EnvGetSustain()))) { + INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr(); + if(EnvGetSustain() && pEnv != nullptr && pEnv->nSustainStart == pEnv->nSustainEnd && IsDragItemEnvPoint()) + { + // Enabled sustain loop => set sustain loop points if no sustain loop has been specified yet. + pEnv->nSustainStart = pEnv->nSustainEnd = m_nDragItem - 1; + } SetInstrumentModified(); pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); UpdateNcButtonState(); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2011-10-23 20:34:22 UTC (rev 1120) @@ -4462,7 +4462,8 @@ const bool usePlaybackPosition = (bIsLiveRecord && (CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_AUTODELAY) && !(pSndFile->m_dwSongFlags & SONG_STEP)); const bool isSplit = IsNoteSplit(note); - if((recordGroup == 1 && isSplit) || (recordGroup == 2 && !isSplit)) + if(pModDoc->GetSplitKeyboardSettings().IsSplitActive() + && ((recordGroup == 1 && isSplit) || (recordGroup == 2 && !isSplit))) { // Record group 1 should be used for normal notes, record group 2 for split notes. // If there are any channels assigned to the "other" record group, we switch to another channel. Modified: trunk/OpenMPT/soundlib/LOAD_AMF.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2011-10-23 00:16:13 UTC (rev 1119) +++ trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2011-10-23 20:34:22 UTC (rev 1120) @@ -202,11 +202,12 @@ MODSAMPLE *psmp = &Samples[iSmp+1]; memcpy(m_szNames[iSmp + 1], lpStream+dwMemPos, 22); StringFixer::SpaceToNullStringFixed<22>(m_szNames[iSmp + 1]); + psmp->nGlobalVol = 64; psmp->nFineTune = MOD2XMFineTune(lpStream[dwMemPos+22]); psmp->nVolume = lpStream[dwMemPos+23]; - psmp->nGlobalVol = 64; if (psmp->nVolume > 0x40) psmp->nVolume = 0x40; psmp->nVolume <<= 2; + psmp->RelativeTone = (signed char)lpStream[dwMemPos + 24]; psmp->nLength = LittleEndian(*((LPDWORD)(lpStream+dwMemPos+25))); psmp->nLoopStart = LittleEndian(*((LPDWORD)(lpStream+dwMemPos+29))); psmp->nLoopEnd = psmp->nLoopStart + LittleEndian(*((LPDWORD)(lpStream+dwMemPos+33))); @@ -371,8 +372,7 @@ if (realtrackcnt < pTrackMap[iTrkMap]) realtrackcnt = pTrackMap[iTrkMap]; } // Store tracks positions - BYTE **pTrackData = new BYTE *[realtrackcnt]; - memset(pTrackData, 0, sizeof(pTrackData)); + vector<BYTE *>pTrackData(realtrackcnt, 0); for (UINT iTrack=0; iTrack<realtrackcnt; iTrack++) if (dwMemPos <= dwMemLength-3) { UINT nTrkSize = LittleEndianW(*(USHORT *)(lpStream+dwMemPos)); @@ -407,7 +407,7 @@ } } } - delete[] pTrackData; + // Read Sample Data for (UINT iSeek=1; iSeek<=maxsampleseekpos; iSeek++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |