From: <sag...@us...> - 2010-09-08 23:51:52
|
Revision: 705 http://modplug.svn.sourceforge.net/modplug/?rev=705&view=rev Author: saga-games Date: 2010-09-08 23:51:45 +0000 (Wed, 08 Sep 2010) Log Message: ----------- [Ref] Rewrote the mod convert warning code a bit. Modified Paths: -------------- trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/ModConvert.h trunk/OpenMPT/mptrack/Moddoc.h Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2010-09-08 23:45:46 UTC (rev 704) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2010-09-08 23:51:45 UTC (rev 705) @@ -13,7 +13,7 @@ * - Long instrument envelopes * - Envelope release node (this was previously also usable in the IT format, but is now deprecated in that format) * - * Extended features in IT/XM/S3M/MOD(not all listed below are available in all of those formats): + * Extended features in IT/XM/S3M/MOD (not all listed below are available in all of those formats): * - Plugins * - Extended ranges for * - Sample count @@ -42,14 +42,43 @@ #include "ModConvert.h" -#define CHANGEMODTYPE_WARNING(x) nWarnings |= (1 << x); -#define CHANGEMODTYPE_CHECK(x, s) if((nWarnings & (1 << x)) != 0) AddToLog(_T(s)); +#define CHANGEMODTYPE_WARNING(x) warnings.set(x); +#define CHANGEMODTYPE_CHECK(x, s) if(warnings[x]) AddToLog(_T(s)); +// Trim envelopes and remove release nodes. +void UpdateEnvelopes(INSTRUMENTENVELOPE *mptEnv, CSoundFile *pSndFile, std::bitset<wNumWarnings> &warnings) +//--------------------------------------------------------------------------------------------------------- +{ + // shorten instrument envelope if necessary (for mod conversion) + const UINT iEnvMax = pSndFile->GetModSpecifications().envelopePointsMax; + + #define TRIMENV(nPat) if(nPat > iEnvMax) { nPat = iEnvMax; CHANGEMODTYPE_WARNING(wTrimmedEnvelopes); } + + TRIMENV(mptEnv->nNodes); + TRIMENV(mptEnv->nLoopStart); + TRIMENV(mptEnv->nLoopEnd); + TRIMENV(mptEnv->nSustainStart); + TRIMENV(mptEnv->nSustainEnd); + if(mptEnv->nReleaseNode != ENV_RELEASE_NODE_UNSET) + { + TRIMENV(mptEnv->nReleaseNode); + if(!pSndFile->GetModSpecifications().hasReleaseNode) + { + mptEnv->nReleaseNode = ENV_RELEASE_NODE_UNSET; + CHANGEMODTYPE_WARNING(wReleaseNode); + } + } + + #undef TRIMENV +} + + bool CModDoc::ChangeModType(MODTYPE nNewType) //------------------------------------------- { - uint64 nWarnings = 0; + std::bitset<wNumWarnings> warnings; + warnings.reset(); PATTERNINDEX nResizedPatterns = 0; const MODTYPE nOldType = m_SndFile.GetType(); @@ -402,9 +431,9 @@ for(INSTRUMENTINDEX i = 1; i <= m_SndFile.m_nInstruments; i++) if(m_SndFile.Instruments[i] != nullptr) { - UpdateEnvelopes(&(m_SndFile.Instruments[i]->VolEnv), nWarnings); - UpdateEnvelopes(&(m_SndFile.Instruments[i]->PanEnv), nWarnings); - UpdateEnvelopes(&(m_SndFile.Instruments[i]->PitchEnv), nWarnings); + UpdateEnvelopes(&(m_SndFile.Instruments[i]->VolEnv), &m_SndFile, warnings); + UpdateEnvelopes(&(m_SndFile.Instruments[i]->PanEnv), &m_SndFile, warnings); + UpdateEnvelopes(&(m_SndFile.Instruments[i]->PitchEnv), &m_SndFile, warnings); } CHAR s[64]; @@ -419,7 +448,7 @@ CHANGEMODTYPE_CHECK(wInstrumentSustainLoops, "Sustain loops were converted to sustain points.\n"); CHANGEMODTYPE_CHECK(wInstrumentTuning, "Instrument tunings will be lost.\n"); CHANGEMODTYPE_CHECK(wMODGlobalVars, "Default speed, tempo and global volume will be lost.\n"); - CHANGEMODTYPE_CHECK(wMOD31Samples, "Samples above 31 will be lost when saving as MOD.\n"); + CHANGEMODTYPE_CHECK(wMOD31Samples, "Samples above 31 will be lost when saving as MOD. Consider rearranging samples if there are unused slots available.\n"); CHANGEMODTYPE_CHECK(wRestartPos, "Restart position is not supported by the new format.\n"); CHANGEMODTYPE_CHECK(wChannelVolSurround, "Channel volume and surround are not supported by the new format.\n"); CHANGEMODTYPE_CHECK(wChannelPanning, "Channel panning is not supported by the new format.\n"); @@ -445,33 +474,6 @@ return true; } -// Trim envelopes and remove release nodes. -void CModDoc::UpdateEnvelopes(INSTRUMENTENVELOPE *mptEnv, uint64 &nWarnings) -//-------------------------------------------------------------------------- -{ - // shorten instrument envelope if necessary (for mod conversion) - const UINT iEnvMax = m_SndFile.GetModSpecifications().envelopePointsMax; - #define TRIMENV(nPat) if(nPat > iEnvMax) { nPat = iEnvMax; CHANGEMODTYPE_WARNING(wTrimmedEnvelopes); } - - TRIMENV(mptEnv->nNodes); - TRIMENV(mptEnv->nLoopStart); - TRIMENV(mptEnv->nLoopEnd); - TRIMENV(mptEnv->nSustainStart); - TRIMENV(mptEnv->nSustainEnd); - if(mptEnv->nReleaseNode != ENV_RELEASE_NODE_UNSET) - { - TRIMENV(mptEnv->nReleaseNode); - if(!m_SndFile.GetModSpecifications().hasReleaseNode) - { - mptEnv->nReleaseNode = ENV_RELEASE_NODE_UNSET; - CHANGEMODTYPE_WARNING(wReleaseNode); - } - } - - #undef TRIMENV -} - - #undef CHANGEMODTYPE_WARNING #undef CHANGEMODTYPE_CHECK Modified: trunk/OpenMPT/mptrack/ModConvert.h =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.h 2010-09-08 23:45:46 UTC (rev 704) +++ trunk/OpenMPT/mptrack/ModConvert.h 2010-09-08 23:51:45 UTC (rev 705) @@ -7,6 +7,9 @@ * */ +#ifndef MODCONVERT_H +#define MODCONVERT_H +#pragma once // Warning types enum enmWarnings @@ -29,4 +32,7 @@ wLinearSlides, wTrimmedEnvelopes, wReleaseNode, + wNumWarnings }; + +#endif // MODCONVERT_H Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2010-09-08 23:45:46 UTC (rev 704) +++ trunk/OpenMPT/mptrack/Moddoc.h 2010-09-08 23:51:45 UTC (rev 705) @@ -123,7 +123,7 @@ struct SplitKeyboardSettings //========================== { - bool IsSplitActive() {return (octaveLink && (octaveModifier != 0)) || (splitInstrument > 0) || (splitVolume != 0);} + bool IsSplitActive() const { return (octaveLink && (octaveModifier != 0)) || (splitInstrument > 0) || (splitVolume != 0); } MODCOMMAND::NOTE splitNote; MODCOMMAND::INSTR splitInstrument; MODCOMMAND::VOL splitVolume; @@ -168,7 +168,7 @@ CSoundFile *GetSoundFile() { return &m_SndFile; } void SetPause(BOOL bPause) { m_bPaused = bPause; } void SetModified(BOOL bModified=TRUE) { SetModifiedFlag(bModified); bModifiedAutosave = (bModified != FALSE); } - BOOL ModifiedSinceLastAutosave() { bool bRetval = bModifiedAutosave; bModifiedAutosave = false; return bRetval; } // return "IsModified" value and reset it until the next SetModified() (as this is only used for polling) + bool ModifiedSinceLastAutosave() { bool bRetval = bModifiedAutosave; bModifiedAutosave = false; return bRetval; } // return "IsModified" value and reset it until the next SetModified() (as this is only used for polling) void SetShowSaveDialog(bool b) {m_ShowSavedialog = b;} void PostMessageToAllViews(UINT uMsg, WPARAM wParam=0, LPARAM lParam=0); void SendMessageToActiveViews(UINT uMsg, WPARAM wParam=0, LPARAM lParam=0); @@ -335,10 +335,7 @@ virtual void SetModifiedFlag(BOOL bModified=TRUE); //}}AFX_VIRTUAL - // for mod conversion - void UpdateEnvelopes(INSTRUMENTENVELOPE *mptEnv, uint64 &nWarnings); - // Implementation public: virtual ~CModDoc(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |