From: <sag...@us...> - 2010-08-05 13:02:57
|
Revision: 677 http://modplug.svn.sourceforge.net/modplug/?rev=677&view=rev Author: saga-games Date: 2010-08-05 13:02:51 +0000 (Thu, 05 Aug 2010) Log Message: ----------- [Ref] Refactored pattern cleanup a bit and added comments. [Ref] Added IsPatternEmpty function to the pattern container. [Mod] Package Template: Rewrote History.txt a bit, removed installation.txt (redundant) Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/soundlib/patternContainer.cpp trunk/OpenMPT/soundlib/patternContainer.h Removed Paths: ------------- trunk/OpenMPT/packageTemplate/Installation.txt Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-08-05 11:44:10 UTC (rev 676) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-08-05 13:02:51 UTC (rev 677) @@ -350,17 +350,19 @@ const SEQUENCEINDEX maxSeqIndex = pSndFile->Order.GetNumSequences(); const PATTERNINDEX maxPatIndex = pSndFile->Patterns.Size(); - vector<PATTERNINDEX> nPatMap(maxPatIndex, 0); - vector<ROWINDEX> nPatRows(maxPatIndex, 0); - vector<MODCOMMAND*> pPatterns(maxPatIndex, nullptr); - vector<bool> bPatUsed(maxPatIndex, false); + vector<bool> bPatUsed(maxPatIndex, false); // used patterns + vector<PATTERNINDEX> nPatMap(maxPatIndex, 0); // map old pattern index <-> new pattern index + // Those vectors are needed for copying the old pattern properties to the new pattern number + vector<MODCOMMAND*> pPatterns(maxPatIndex, nullptr); // original pattern data + vector<ROWINDEX> nPatRows(maxPatIndex, 0); // original pattern sizes CHAR s[512]; bool bReordered = false; - UINT nPatRemoved = 0, nMinToRemove; - PATTERNINDEX nPats; + size_t nPatRemoved = 0; + PATTERNINDEX nPats, nMinToRemove = 0; BeginWaitCursor(); + // First, find all used patterns in all sequences. PATTERNINDEX maxpat = 0; for(SEQUENCEINDEX nSeq = 0; nSeq < maxSeqIndex; nSeq++) { @@ -375,7 +377,7 @@ } } - nMinToRemove = 0; + // Find first index to be removed if (!bRemove) { PATTERNINDEX imax = maxPatIndex; @@ -386,30 +388,24 @@ } nMinToRemove = imax + 1; } + + // Remove all completely empty patterns above last used pattern (those are safe to remove) for (PATTERNINDEX nPat = maxpat; nPat < maxPatIndex; nPat++) if ((pSndFile->Patterns[nPat]) && (nPat >= nMinToRemove)) { - const MODCOMMAND *m = pSndFile->Patterns[nPat]; - bool bEmptyPat = true; - size_t ncmd = pSndFile->m_nChannels * pSndFile->Patterns[nPat].GetNumRows(); - for (size_t i = 0; i < ncmd; i++) + if(pSndFile->Patterns.IsPatternEmpty(nPat)) { - if(m[i].IsEmpty()) - { - bEmptyPat = false; - break; - } - } - if(bEmptyPat) - { pSndFile->Patterns.Remove(nPat); nPatRemoved++; } } - UINT nWaste = 0; + + // Number of unused patterns + size_t nWaste = 0; for (UINT ichk=0; ichk < maxPatIndex; ichk++) { if ((pSndFile->Patterns[ichk]) && (!bPatUsed[ichk])) nWaste++; } + if ((bRemove) && (nWaste)) { EndWaitCursor(); @@ -418,10 +414,12 @@ BeginWaitCursor(); } - for(PATTERNINDEX i = 0; i < maxPatIndex; i++) nPatMap[i] = PATTERNINDEX_INVALID; + for(PATTERNINDEX i = 0; i < maxPatIndex; i++) + nPatMap[i] = PATTERNINDEX_INVALID; SEQUENCEINDEX oldSequence = pSndFile->Order.GetCurrentSequenceIndex(); // workaround, as GetSequence doesn't allow writing to sequences ATM + // Re-order pattern numbers based on sequence for(SEQUENCEINDEX nSeq = 0; nSeq < maxSeqIndex; nSeq++) { pSndFile->Order.SetSequence(nSeq); @@ -461,7 +459,7 @@ const UINT npatnames = pSndFile->m_nPatternNames; const LPSTR lpszpatnames = pSndFile->m_lpszPatternNames; pSndFile->m_nPatternNames = 0; - pSndFile->m_lpszPatternNames = NULL; + pSndFile->m_lpszPatternNames = nullptr; for (PATTERNINDEX i = 0; i < maxPatIndex; i++) { PATTERNINDEX k = nPatMap[i]; Modified: trunk/OpenMPT/packageTemplate/History.txt =================================================================== --- trunk/OpenMPT/packageTemplate/History.txt 2010-08-05 11:44:10 UTC (rev 676) +++ trunk/OpenMPT/packageTemplate/History.txt 2010-08-05 13:02:51 UTC (rev 677) @@ -143,7 +143,7 @@ [Imp] <Jojo> Don't allow values > 63 for "break to row" commands in MOD/S3M. [Imp] <Jojo> Since the behaviour of sliding commands with both nibbles set varies from tracker to tracker, "undefined" is always shown in the note properties in such cases. [Fix] <Jojo> In the note properties, the Gxx effect for XM files was not limited properly. - [Fix] <Jojo> In Note Properties, the waveform display for S [345]x (and equivalent MOD/XM effects) was not always fully visible ("continue" addition was cut off) + [Fix] <Jojo> In Note Properties, the waveform display for S[345]x (and equivalent MOD/XM effects) was not always fully visible ("continue" addition was cut off) [Fix] <Jojo> Display "fine" / "extra fine" portamento effects properly (S3M/IT/MPTM), display SFx macro properly, display MOD effects with no memory properly. Pattern tab::Find/replace @@ -154,8 +154,8 @@ [New] <Jojo> Shift+New = Clone sample slot [New] <Jojo> Option to not ask for RAW import settings again (settings are remembered independently for all modules) [Imp] <Jojo> Remember previous settings in RAW import dialog - [Imp] <Jojo> When enabling (sustain) loop and no loop points are set yet, automatically set loop to full sample length or the currently selected part of the sample. - [Imp] <Jojo> Sample name and filename are now properly limited in length. + [Imp] <Jojo> When enabling (sustain) loop and no loop points are set yet, the loop is now set automatically to full sample length or the currently selected part of the sample. + [Imp] <Jojo> Sample name and filename length are now properly limited. [Fix] <Jojo> When applying time stretch / pitch shift to an 8-bit sample and selecting the sample partly lead to partial upsampling, instead of upsampling the whole sample. [Fix] <Jojo> Sample Undo: If no custom value was set, the default value was set ridiculously high (tx Paul Legovitch) [Fix] <Jojo> Sample Undo: Fixed another possible problem when undoing actions with very little memory left. @@ -167,8 +167,8 @@ [New] <Jojo> Transpose Up/Down for sample map. [New] <Jojo> VST/Instrument handling: The IT instrument note mapping is now also applied to VST instruments (before, it was just available for samples). This way, VST instruments can be transposed easily. [Imp] <Jojo> When pasting an envelope, it's now also automatically enabled. - [Imp] <Jojo> Instrument name and filename are now properly limited in length. - [Imp] <Jojo> "Scale envelope points" is now always available for scaling the values of the points (y axis). + [Imp] <Jojo> Instrument name and filename length are now properly limited. + [Imp] <Jojo> "Scale envelope points" is now also available for scaling the values of the points (y axis). [Fix] <Jojo> The panning spin button ranged from 0 to 256, however when saving to .IT, 256 was wrapping over to 0. Panning is now limited from 0 to 255. [Fix] <Jojo> It was impossible to assign plugin slot 100 to an instrument. @@ -193,9 +193,10 @@ [Imp] <Jojo> VST Editor: Added shortcuts for "toggle bypass", "pass keys to plug" and "record params to pattern" [Mod] <Jojo> VST Editor: Changed number of patches per sub menu from 100 to 128. Now, one sub menu equals ones MIDI bank (more logical) [Fix] <Jojo> VST Editor: Preset names starting with ' ' >= char > 'A' were cropped (i.e. "123ABC" was displayed as "ABC") + [Fix] <Jojo> VST Editor: Changing a plugin parameter in MOD/S3M files doesn't mark them as modified anymore. [Fix] <Jojo> Even if an instrument was muted, a VSTi assigned to this instrument was still playing in the pattern. [Fix] <re> Some VSTs that previously wouldn't load might now load fine. - [Fix] <re> Returned host CanDo-values were wrong (since pre RC1 era). + [Fix] <re> Returned host CanDo-values were wrong (since pre-RC1 era). Mod conversion [Fix] <Jojo> When converting from MOD to S3M or IT, the Invert Loop effect was not removed. @@ -204,16 +205,16 @@ [Fix] <Jojo> When removing instruments from the treeview and converting the module to a different format which also supports instruments, OpenMPT crashed. [Fix] <Jojo> When converting to MOD/S3M, the extended filter range flag was not deactivated. [Fix] <Jojo> S00 (IT/S3M) does not equal E00 (MOD/XM), as Exx doesn't have effect memory. Trying to convert S00 to the last used value now. - [Fix] <Jojo> If necessary (S3M), reset restart position attribute when converting + [Fix] <Jojo> If necessary (S3M), the restart position attribute is reset. [Fix] <re> Merging multiple sequences didn't properly convert '---'/'+++' orders. IT - [Imp] <Jojo> IT Saver: Compatibility export saves stereo samples again, as other tracker like Schism also support this. + [Imp] <Jojo> IT Saver: Compatibility export saves stereo samples again, as other tracker like Schism also support this (and so do the official IT specs). [Fix] <Jojo> IT Saver: Fixed IT sample flags which could potentially cause IT to screw up on loading/saving MPT-made modules with samples that are not used by an instrument. - [Fix] <Jojo> IT Loader: ChibiTracker uses \n instead of \r in the IT comment text, which was not handled properly. + [Fix] <Jojo> IT Loader: ChibiTracker uses a different newline characater for the comments text, which was not handled properly. [Fix] <Jojo> (fix from SchismTracker) IT Loader: Ignore stereo sample flag when loading old IT files (older than IT 2.14) since Impulse Tracker did not reset this flag when importing stereo samples back then. [Fix] <Jojo> ITI/ITS Loader: Sample flags were not reset when a sample slot was overwritten when loading ITI or ITS files. That way, it was possible that f.e. the bidi loop flag was not disabled when loading a new sample that had a normal loop. - [Fix] <Jojo> S3M/IT compatibility: Note Cut really cuts notes and does not just mute them (so that following volume commands could restore the sample) + [Fix] <Jojo> IT Compatibility: Note Cut really cuts notes and does not just mute them (so that following volume commands could restore the sample) [Fix] <Jojo> IT Compatibility: Always reset autovibrato settings when there's an instrument number (fix from SchismTracker) [Fix] <Jojo> IT Compatibility: S77 / S79/ S7B are supposed to pause the envelope, not disable it. [Fix] <Jojo> IT Compatibility: ignore slide commands with both nibbles set (f.e. D55, PA1, ...) @@ -229,7 +230,7 @@ [Fix] <Jojo> XM Loader: Early versions of Skale Tracker (R.I.P.) apparently did stupid things to XM instrument headers, so mpt failed to load such modules. Tested the fix with a few hundred XMs and apparently only one XM (IFULOVE.XM) that I have has a header size that is different from the struct size - and that's the one that caused problems. [Fix] <Jojo> XM Compatibility: Volume column doesn't have an effect memory, most effects with param = 0 are useless. Those are ignored in compatibility mode playback and also when exporting the file in compatibility mode. [Fix] <Jojo> XM Compatibility: Improved handling of the situation when a 3xx effect was used, but previously no note was playing. - [Fix] <Jojo> XM Compatibility: New instrument + tone portamento = ignore new instrument (fixes partytime.xm by cancer) + [Fix] <Jojo> XM Compatibility: An instrument change next to a portamento event is now ignored (fixes partytime.xm by cancer) MOD [Imp] <Jojo> Module creation: When creating a new .MOD, it has 31 sample slots by default. @@ -244,7 +245,7 @@ [Fix] <Jojo> S3M Compatibility: Slightly better handling of vibrato/tremolo waveform types (although the ST3 help screen says that continuous vibrato/tremolo is possible, it does actually not work.) [Reg] <Jojo> Cannot create S3M files with more than 100 patterns anymore, because... [Fix] <Jojo> ... it was possible to create S3M files where the 256 parapointers were not enough, resulting in incomplete/broken files. - [Fix] <Jojo> S3M/IT Compatibility: Note Cut really cuts notes and does not just mute them (so that following volume commands could restore the sample) + [Fix] <Jojo> S3M Compatibility: Note Cut really cuts notes and does not just mute them (so that following volume commands could restore the sample) MPTM [New] <rewbs> Added combined note delay & note cut command for MPTM only (":xy" means delay until tick x and play for y ticks). @@ -283,22 +284,16 @@ [Mod] <Jojo> Updated internet links (ModPlug Central Forums link is now a permalink) [Fix] <Jojo> Multi window edit: When (un)muting a channel from the general tab in window 1, it was instantly shown in the pattern editor of window 2, but not vice versa. [Fix] <Jojo> Channel Manager: When removing channels using the channel manager, their names were not cleared properly. - [Fix] <Jojo> Song Length Detection: *Much* more accurate song length detection! + [Fix] <Jojo> Song Length Detection: *Much* more accurate song length detection! Doesn't get tricked by pattern jumps anymore, hehe. :) [Fix] <Jojo/re> Instrument IO: Flags from old ITI/XI files should also be loaded correctly now (broken in 1.18.00.00) - [Fix] <Jojo> Plugin Editor: Changing a plugin parameter in MOD/S3M files doesn't mark them as modified anymore. [Fix] <Jojo> When using the "close file" shortcut several times in a row so that multiple message boxes popped up, it was possible to crash OpenMPT. [Reg] <Jojo> Removed AutodetectITplaystyle option, since the tracker detection works reliably enough now. Tracker detection can not be ignored anymore now. Installer/release package - [New] <Jojo> Try to find out what keymap file suits the user best. - [New] <Jojo> Scan for previously installed VST Plugins - [Imp] <Jojo> Use DDE commands to open files. - [Imp] <Jojo> Copy config files from app's directory to appdata if necessary and possible. - [Imp] <Jojo> User is asked if they want to keep personal settings. - [Imp] <Jojo> With the new version of InnoSetup, a "real" portable setup can now finally be created. - [Mod] <Jojo> Added OpenMPT 1.18 release notes document for package template + [New] <Jojo> Ladies and gentlemen... we finally have an installer. :) + [Mod] <Jojo> Added OpenMPT 1.18 release notes documents [Mod] <Jojo> Updated DE_jojo.mkb - [Mod] <Jojo> Updated Paul Legovitch's keymap (now also suitable for desktop keyboards); use this as the default "french" keymap in the installer. + [Mod] <Jojo> Updated Paul Legovitch's keymap (now also suitable for desktop keyboards) [Mod] <re> Updated default keybindings. Deleted: trunk/OpenMPT/packageTemplate/Installation.txt =================================================================== --- trunk/OpenMPT/packageTemplate/Installation.txt 2010-08-05 11:44:10 UTC (rev 676) +++ trunk/OpenMPT/packageTemplate/Installation.txt 2010-08-05 13:02:51 UTC (rev 677) @@ -1,6 +0,0 @@ -OpenMPT development build - Installation notes ----------------------------------------------- -. If you have an existing installation of OpenMPT and wish to re-use its settings, - copy your mptrack.ini and plugin.cache to the directory into which you extract the archive. -. If not, you're done: just extract the archive and launch mptrack.exe. - Modified: trunk/OpenMPT/soundlib/patternContainer.cpp =================================================================== --- trunk/OpenMPT/soundlib/patternContainer.cpp 2010-08-05 11:44:10 UTC (rev 676) +++ trunk/OpenMPT/soundlib/patternContainer.cpp 2010-08-05 13:02:51 UTC (rev 677) @@ -6,7 +6,7 @@ #include "../mptrack/version.h" PATTERNINDEX CPatternContainer::Insert(const ROWINDEX rows) -//--------------------------------------------- +//--------------------------------------------------------- { PATTERNINDEX i = 0; for(i = 0; i<m_Patterns.size(); i++) @@ -19,7 +19,7 @@ bool CPatternContainer::Insert(const PATTERNINDEX index, const ROWINDEX rows) -//--------------------------------------------------------------- +//--------------------------------------------------------------------------- { const CModSpecifications& specs = m_rSndFile.GetModSpecifications(); if(index >= specs.patternsMax || index > m_Patterns.size() || rows > specs.patternRowsMax) @@ -46,8 +46,9 @@ return false; } + bool CPatternContainer::Remove(const PATTERNINDEX ipat) -//---------------------------------------------- +//----------------------------------------------------- { if(ipat >= m_Patterns.size()) return true; @@ -55,8 +56,25 @@ return false; } + +bool CPatternContainer::IsPatternEmpty(const PATTERNINDEX nPat) const +//------------------------------------------------------------------- +{ + if(!IsValidPat(nPat)) + return false; + + MODCOMMAND *m = m_Patterns[nPat].m_ModCommands; + for(size_t i = m_Patterns[nPat].GetNumChannels() * m_Patterns[nPat].GetNumRows(); i > 0; i--, m++) + { + if(!m->IsEmpty(true)) + return false; + } + return true; +} + + PATTERNINDEX CPatternContainer::GetIndex(const MODPATTERN* const pPat) const -//------------------------------------------------------------------ +//-------------------------------------------------------------------------- { const PATTERNINDEX endI = static_cast<PATTERNINDEX>(m_Patterns.size()); for(PATTERNINDEX i = 0; i<endI; i++) @@ -80,11 +98,13 @@ void CPatternContainer::OnModTypeChanged(const MODTYPE /*oldtype*/) -//---------------------------------------------------------- +//----------------------------------------------------------------- { const CModSpecifications specs = m_rSndFile.GetModSpecifications(); - if(specs.patternsMax < Size()) ResizeArray(max(MAX_PATTERNS, specs.patternsMax)); - else if(Size() < MAX_PATTERNS) ResizeArray(MAX_PATTERNS); + if(specs.patternsMax < Size()) + ResizeArray(max(MAX_PATTERNS, specs.patternsMax)); + else if(Size() < MAX_PATTERNS) + ResizeArray(MAX_PATTERNS); } Modified: trunk/OpenMPT/soundlib/patternContainer.h =================================================================== --- trunk/OpenMPT/soundlib/patternContainer.h 2010-08-05 11:44:10 UTC (rev 676) +++ trunk/OpenMPT/soundlib/patternContainer.h 2010-08-05 13:02:51 UTC (rev 677) @@ -66,6 +66,9 @@ // Return true if IsValidIndex() is true and the corresponding pattern has allocated modcommand array, false otherwise. bool IsValidPat(const PATTERNINDEX iPat) const {return IsValidIndex(iPat) && (*this)[iPat];} + + // Returns true if the pattern is empty, i.e. there are no notes/effects in this pattern + bool IsPatternEmpty(const PATTERNINDEX nPat) const; void ResizeArray(const PATTERNINDEX newSize); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-08-09 14:09:45
|
Revision: 680 http://modplug.svn.sourceforge.net/modplug/?rev=680&view=rev Author: saga-games Date: 2010-08-09 14:09:36 +0000 (Mon, 09 Aug 2010) Log Message: ----------- [New] In the MPTM format, each pattern can now have a custom time signature (rows per beat/measure) which can be set from the pattern properties dialog. The time signature is currently updated on every row, so it's not possible to temporarily modify it (f.e. using the mainbar controls), but that can still be done later (it might require quite some changes in some places). [Reg] "Set highlights to songs' time signatures" is gone. Custom song highlighting is now always applied, and the values found in the colour options are now always applied to new modules. [Mod] Updated MPTM format to contain pattern-specific time signatures. [Ref] Some code refactoring related to the new feature mentioned above. [Mod] OpenMPT: Version is now 1.19.00.00 Modified Paths: -------------- trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectVis.cpp trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainbar.h trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Moptions.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/mod_specifications.h trunk/OpenMPT/soundlib/pattern.cpp trunk/OpenMPT/soundlib/pattern.h trunk/OpenMPT/soundlib/patternContainer.cpp Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -432,7 +432,6 @@ if (pMainFrm) { pMainFrm->UpdateEffectKeys(); - pMainFrm->UpdateHighlights(); } } //end rewbs.customKeysAutoEffects Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -355,6 +355,8 @@ // Those vectors are needed for copying the old pattern properties to the new pattern number vector<MODCOMMAND*> pPatterns(maxPatIndex, nullptr); // original pattern data vector<ROWINDEX> nPatRows(maxPatIndex, 0); // original pattern sizes + vector<ROWINDEX> nPatRowsPerBeat(maxPatIndex, 0); // original pattern highlight + vector<ROWINDEX> nPatRowsPerMeasure(maxPatIndex, 0); // original pattern highlight CHAR s[512]; bool bReordered = false; @@ -480,6 +482,11 @@ } nPatRows[k] = pSndFile->Patterns[i].GetNumRows(); pPatterns[k] = pSndFile->Patterns[i]; + if(pSndFile->Patterns[i].GetOverrideSignature()) + { + nPatRowsPerBeat[k] = pSndFile->Patterns[i].GetRowsPerBeat(); + nPatRowsPerMeasure[k] = pSndFile->Patterns[i].GetRowsPerMeasure(); + } } else if (pSndFile->Patterns[i]) { @@ -490,6 +497,7 @@ for (PATTERNINDEX nPat = 0; nPat < maxPatIndex; nPat++) { pSndFile->Patterns[nPat].SetData(pPatterns[nPat], nPatRows[nPat]); + pSndFile->Patterns[nPat].SetSignature(nPatRowsPerBeat[nPat], nPatRowsPerMeasure[nPat]); } delete[] lpszpatnames; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -779,17 +779,23 @@ { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); ORDERINDEX nCurOrd = m_OrderList.GetCurSel(true).nOrdLo; - PATTERNINDEX pat = pSndFile->Order[nCurOrd]; + PATTERNINDEX nCurPat = pSndFile->Order[nCurOrd]; ROWINDEX rows = 64; - if(pSndFile->Patterns.IsValidPat(pat)) + if(pSndFile->Patterns.IsValidPat(nCurPat)) { nCurOrd++; // only if the current oder is already occupied, create a new pattern at the next position. - rows = pSndFile->Patterns[pat].GetNumRows(); + rows = pSndFile->Patterns[nCurPat].GetNumRows(); rows = CLAMP(rows, pSndFile->GetModSpecifications().patternRowsMin, pSndFile->GetModSpecifications().patternRowsMax); } PATTERNINDEX nNewPat = m_pModDoc->InsertPattern(nCurOrd, rows); if ((nNewPat != PATTERNINDEX_INVALID) && (nNewPat < pSndFile->Patterns.Size())) { + // update time signature + if(pSndFile->Patterns.IsValidIndex(nCurPat) && pSndFile->Patterns[nCurPat].GetOverrideSignature()) + { + pSndFile->Patterns[nNewPat].SetSignature(pSndFile->Patterns[nCurPat].GetRowsPerBeat(), pSndFile->Patterns[nCurPat].GetRowsPerMeasure()); + } + // move to new pattern m_OrderList.SetCurSel(nCurOrd); m_OrderList.InvalidateRect(NULL, FALSE); SetCurrentPattern(nNewPat); @@ -823,7 +829,7 @@ { PATTERNINDEX nCurPat = pSndFile->Order[selection.nOrdLo + i]; ROWINDEX rows = 64; - if (nCurPat < pSndFile->Patterns.Size() && pReplaceIndex[nCurPat] == PATTERNINDEX_INVALID) + if (pSndFile->Patterns.IsValidIndex(nCurPat) && pReplaceIndex[nCurPat] == PATTERNINDEX_INVALID) { rows = pSndFile->Patterns[nCurPat].GetNumRows(); rows = CLAMP(rows, pSndFile->GetModSpecifications().patternRowsMin, pSndFile->GetModSpecifications().patternRowsMax); @@ -831,6 +837,12 @@ PATTERNINDEX nNewPat = m_pModDoc->InsertPattern(nInsertWhere + i, rows); if ((nNewPat != PATTERNINDEX_INVALID) && (nNewPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nCurPat] != nullptr)) { + // update time signature + if(pSndFile->Patterns[nCurPat].GetOverrideSignature()) + { + pSndFile->Patterns[nNewPat].SetSignature(pSndFile->Patterns[nCurPat].GetRowsPerBeat(), pSndFile->Patterns[nCurPat].GetRowsPerMeasure()); + } + // copy pattern data MODCOMMAND *pSrc = pSndFile->Patterns[nCurPat]; MODCOMMAND *pDest = pSndFile->Patterns[nNewPat]; UINT n = pSndFile->Patterns[nCurPat].GetNumRows(); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -911,7 +911,7 @@ m_pModDoc->UpdateAllViews(NULL, (smp << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES); if ((pSndFile->m_nInstruments) && (!m_pModDoc->FindSampleParent(smp))) { - if (MessageBox("This sample is not used by any instrument. Do you want to create a new instrument using this sample ?", + if (MessageBox("This sample is not used by any instrument. Do you want to create a new instrument using this sample?", NULL, MB_YESNO|MB_ICONQUESTION) == IDYES) { UINT nins = m_pModDoc->InsertInstrument(smp); @@ -1700,7 +1700,7 @@ //Open dialog CPSRatioCalc dlg(pSmp->nLength, lSampleRate, m_pSndFile->m_nMusicSpeed, m_pSndFile->m_nMusicTempo, - m_pSndFile->m_nRowsPerBeat, m_pSndFile->m_nTempoMode, + m_pSndFile->m_nDefaultRowsPerBeat, m_pSndFile->m_nTempoMode, m_dTimeStretchRatio, this); if (dlg.DoModal() != IDOK) return; Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -746,18 +746,28 @@ bRowSel = ((row >= (m_dwBeginSel >> 16)) && (row <= (m_dwEndSel >> 16))) ? TRUE : FALSE; row_col = MODCOLOR_TEXTNORMAL; row_bkcol = MODCOLOR_BACKNORMAL; + + // time signature highlighting + ROWINDEX nBeat = pSndFile->m_nDefaultRowsPerBeat, nMeasure = pSndFile->m_nDefaultRowsPerMeasure; + if(pSndFile->Patterns[nPattern].GetOverrideSignature()) + { + nBeat = pSndFile->Patterns[nPattern].GetRowsPerBeat(); + nMeasure = pSndFile->Patterns[nPattern].GetRowsPerMeasure(); + } + // secondary highlight (beats) if ((CMainFrame::m_dwPatternSetup & PATTERN_2NDHIGHLIGHT) - && (CMainFrame::m_nRowSpacing2) && (CMainFrame::m_nRowSpacing2 < nrows)) + && (nBeat) && (nBeat < nrows)) { - if (!(row % CMainFrame::m_nRowSpacing2)) + if (!(row % nBeat)) { row_bkcol = MODCOLOR_2NDHIGHLIGHT; } } + // primary highlight (measures) if ((CMainFrame::m_dwPatternSetup & PATTERN_STDHIGHLIGHT) - && (CMainFrame::m_nRowSpacing) && (CMainFrame::m_nRowSpacing < nrows)) + && (nMeasure) && (nMeasure < nrows)) { - if (!(row % CMainFrame::m_nRowSpacing)) + if (!(row % nMeasure)) { row_bkcol = MODCOLOR_BACKHILIGHT; } Modified: trunk/OpenMPT/mptrack/EffectVis.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectVis.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/EffectVis.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -266,11 +266,17 @@ { // Lots of room for optimisation here. // Draw vertical grid lines + ROWINDEX nBeat = m_pSndFile->m_nDefaultRowsPerBeat, nMeasure = m_pSndFile->m_nDefaultRowsPerMeasure; + if(m_pSndFile->Patterns[m_nPattern].GetOverrideSignature()) + { + nBeat = m_pSndFile->Patterns[m_nPattern].GetRowsPerBeat(); + nMeasure = m_pSndFile->Patterns[m_nPattern].GetRowsPerMeasure(); + } for (UINT row=m_startRow; row<=m_endRow; row++) { - if (row % m_pSndFile->m_nRowsPerMeasure == 0) + if (row % nMeasure == 0) CMainFrame::penScratch = CMainFrame::penGrayff; - else if (row % m_pSndFile->m_nRowsPerBeat == 0) + else if (row % nBeat == 0) CMainFrame::penScratch = CMainFrame::penGray99; else CMainFrame::penScratch = CMainFrame::penGray55; Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -128,7 +128,7 @@ { AddToLog("Found too many patterns\n"); foundHacks = true; - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } // Check for too big/small patterns @@ -142,7 +142,7 @@ foundHacks = foundHere = true; break; } - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } } if(foundHere) @@ -156,7 +156,7 @@ // Check for pattern names foundHere = false; - for(PATTERNINDEX i = 0; i < m_SndFile.Patterns.Size(); i++) + for(PATTERNINDEX i = 0; i < m_SndFile.GetNumPatterns(); i++) { if(m_SndFile.Patterns.IsValidPat(i)) { @@ -181,7 +181,7 @@ { AddToLog("Found incompatible channel count\n"); foundHacks = true; - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } // Check for channel names @@ -205,7 +205,7 @@ { AddToLog("Found too many samples\n"); foundHacks = true; - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } // Check for too many instruments @@ -213,7 +213,7 @@ { AddToLog("Found too many instruments\n"); foundHacks = true; - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } // Check for instrument extensions @@ -255,7 +255,7 @@ { AddToLog("Found too many orders\n"); foundHacks = true; - // REQUIRES AUTOFIX + // REQUIRES (INTELLIGENT) AUTOFIX } // Check for invalid default tempo @@ -277,17 +277,38 @@ } // Check for invalid rows per beat / measure values - if(m_SndFile.m_nRowsPerBeat >= originalSpecs->patternRowsMax || m_SndFile.m_nRowsPerMeasure >= originalSpecs->patternRowsMax) + if(m_SndFile.m_nDefaultRowsPerBeat >= originalSpecs->patternRowsMax || m_SndFile.m_nDefaultRowsPerMeasure >= originalSpecs->patternRowsMax) { AddToLog("Found incompatible rows per beat / measure\n"); foundHacks = true; if(autofix) { - m_SndFile.m_nRowsPerBeat = CLAMP(m_SndFile.m_nRowsPerBeat, 1, (originalSpecs->patternRowsMax - 1)); - m_SndFile.m_nRowsPerMeasure = CLAMP(m_SndFile.m_nRowsPerMeasure, m_SndFile.m_nRowsPerBeat, (originalSpecs->patternRowsMax - 1)); + m_SndFile.m_nDefaultRowsPerBeat = CLAMP(m_SndFile.m_nDefaultRowsPerBeat, 1, (originalSpecs->patternRowsMax - 1)); + m_SndFile.m_nDefaultRowsPerMeasure = CLAMP(m_SndFile.m_nDefaultRowsPerMeasure, m_SndFile.m_nDefaultRowsPerBeat, (originalSpecs->patternRowsMax - 1)); } } + // Find pattern-specific time signatures + if(!originalSpecs->hasPatternSignatures) + { + foundHere = false; + for(PATTERNINDEX i = 0; i < m_SndFile.GetNumPatterns(); i++) + { + if(m_SndFile.Patterns[i].GetOverrideSignature()) + { + if(!foundHere) + AddToLog("Found pattern-specific time signatures\n"); + + if(autofix) + m_SndFile.Patterns[i].RemoveSignature(); + + foundHacks = foundHere = true; + if(!autofix) + break; + } + } + } + // Check for new tempo modes if(m_SndFile.m_nTempoMode != tempo_mode_classic) { @@ -316,7 +337,7 @@ } // Player flags - if(!m_SndFile.GetModFlag(MSF_COMPATIBLE_PLAY)) + if((m_SndFile.GetType() & (MOD_TYPE_XM|MOD_TYPE_IT)) && !m_SndFile.GetModFlag(MSF_COMPATIBLE_PLAY)) { AddToLog("Compatible play is deactivated\n"); foundHacks = true; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -200,10 +200,10 @@ DWORD CMainFrame::m_dwPatternSetup = PATTERN_PLAYNEWNOTE | PATTERN_EFFECTHILIGHT | PATTERN_SMALLFONT | PATTERN_CENTERROW | PATTERN_DRAGNDROPEDIT | PATTERN_FLATBUTTONS - | PATTERN_2NDHIGHLIGHT | PATTERN_STDHIGHLIGHT | PATTERN_HILITETIMESIGS + | PATTERN_2NDHIGHLIGHT | PATTERN_STDHIGHLIGHT /*| PATTERN_HILITETIMESIGS*/ | PATTERN_SHOWPREVIOUS | PATTERN_CONTSCROLL | PATTERN_SYNCMUTE | PATTERN_AUTODELAY | PATTERN_NOTEFADE; -DWORD CMainFrame::m_nRowSpacing = 16; -DWORD CMainFrame::m_nRowSpacing2 = 4; +DWORD CMainFrame::m_nRowSpacing = 16; // primary highlight (measures) +DWORD CMainFrame::m_nRowSpacing2 = 4; // secondary highlight (beats) UINT CMainFrame::m_nSampleUndoMaxBuffer = 0; // Real sample buffer undo size will be set later. // GDI @@ -438,8 +438,8 @@ m_dwPatternSetup |= PATTERN_NOTEFADE; if(vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,01)) m_dwPatternSetup |= PATTERN_RESETCHANNELS; - if(vIniVersion < MAKE_VERSION_NUMERIC(1,18,01,00)) - m_dwPatternSetup &= ~0x800; // quick paste autorepeat is now a keymap option + if(vIniVersion < MAKE_VERSION_NUMERIC(1,19,00,00)) + m_dwPatternSetup &= ~(0x800|0x200000|0x400000); // various deprecated old options m_nRowSpacing = GetPrivateProfileDWord("Pattern Editor", "RowSpacing", 16, iniFile); m_nRowSpacing2 = GetPrivateProfileDWord("Pattern Editor", "RowSpacing2", 4, iniFile); @@ -902,8 +902,6 @@ //------------------------ { CChildFrame *pMDIActive = (CChildFrame *)MDIGetActive(); - CRect rect; - //HKEY key; BeginWaitCursor(); if (m_dwStatus & MODSTATUS_PLAYING) PauseMod(); @@ -925,6 +923,7 @@ } void CMainFrame::SaveIniSettings() +//-------------------------------- { CString iniFile = theApp.GetConfigFileName(); @@ -2975,30 +2974,7 @@ } //end rewbs.customKeys -bool CMainFrame::UpdateHighlights() -//--------------------------------- -{ - if (!(CMainFrame::m_dwPatternSetup & PATTERN_HILITETIMESIGS)) - return false; - CModDoc* pModDoc = GetActiveDoc(); - if (pModDoc) - { - CSoundFile* pSndFile = pModDoc->GetSoundFile(); - if (pSndFile) - { - if (CMainFrame::m_dwPatternSetup&PATTERN_HILITETIMESIGS) { - CMainFrame::m_nRowSpacing = pSndFile->m_nRowsPerMeasure; - CMainFrame::m_nRowSpacing2 = pSndFile->m_nRowsPerBeat; - } - return true; - } - } - - return false; -} - - //rewbs.fix3116 void CMainFrame::OnKillFocus(CWnd* pNewWnd) //----------------------------------------- Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -441,7 +441,7 @@ wsprintf(s, "%d", nCurrentTempo); m_EditTempo.SetWindowText(s); } - int nRowsPerBeat = pSndFile->m_nRowsPerBeat; + int nRowsPerBeat = pSndFile->m_nCurrentRowsPerBeat; if (nRowsPerBeat != nCurrentRowsPerBeat) { if (nCurrentRowsPerBeat < 0) m_SpinRowsPerBeat.EnableWindow(TRUE); @@ -489,7 +489,6 @@ if ((nCurrentSpeed < 0) || (nCurrentTempo < 0)) return; if ((pMainFrm = CMainFrame::GetMainFrame()) != NULL) { - CModDoc *pModDoc = pMainFrm->GetModPlaying(); CSoundFile *pSndFile = pMainFrm->GetSoundFilePlaying(); if (pSndFile) { @@ -520,15 +519,13 @@ { if (nCurrentRowsPerBeat > 1) { - pSndFile->m_nRowsPerBeat = nCurrentRowsPerBeat - 1; - pModDoc->SetModified(true); + SetRowsPerBeat(nCurrentRowsPerBeat - 1); } } else { - if (nCurrentRowsPerBeat < 64) + if (nCurrentRowsPerBeat < pSndFile->m_nCurrentRowsPerMeasure) { - pSndFile->m_nRowsPerBeat = nCurrentRowsPerBeat + 1; - pModDoc->SetModified(true); + SetRowsPerBeat(nCurrentRowsPerBeat + 1); } } m_SpinRowsPerBeat.SetPos(0); @@ -536,8 +533,8 @@ //update pattern editor CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) { - pMainFrm->UpdateHighlights(); + if (pMainFrm) + { pMainFrm->PostMessage(WM_MOD_INVALIDATEPATTERNS, HINT_MPTOPTIONS); } } @@ -548,6 +545,37 @@ } +void CMainToolBar::SetRowsPerBeat(ROWINDEX nNewRPB) +//------------------------------------------------- +{ + CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); + if(pMainFrm == nullptr) + return; + CModDoc *pModDoc = pMainFrm->GetModPlaying(); + CSoundFile *pSndFile = pMainFrm->GetSoundFilePlaying(); + if(pModDoc == nullptr || pSndFile == nullptr) + return; + + pSndFile->m_nCurrentRowsPerBeat = nNewRPB; + PATTERNINDEX nPat = pSndFile->GetCurrentPattern(); + if(pSndFile->Patterns[nPat].GetOverrideSignature()) + { + if(nNewRPB <= pSndFile->Patterns[nPat].GetRowsPerMeasure()) + { + pSndFile->Patterns[nPat].SetSignature(nNewRPB, pSndFile->Patterns[nPat].GetRowsPerMeasure()); + pModDoc->SetModified(); + } + } else + { + if(nNewRPB <= pSndFile->m_nDefaultRowsPerMeasure) + { + pSndFile->m_nDefaultRowsPerBeat = nNewRPB; + pModDoc->SetModified(); + } + } +} + + /////////////////////////////////////////////////////////////////////////////////////////////////// // CModTreeBar Modified: trunk/OpenMPT/mptrack/Mainbar.h =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Mainbar.h 2010-08-09 14:09:36 UTC (rev 680) @@ -47,6 +47,9 @@ CMainToolBar() {} virtual ~CMainToolBar() {} +protected: + void SetRowsPerBeat(ROWINDEX nNewRPB); + public: //{{AFX_VIRTUAL(CMainToolBar) virtual BOOL SetHorizontal(); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2010-08-09 14:09:36 UTC (rev 680) @@ -25,7 +25,6 @@ #define MIN_AUDIO_BUFFERSIZE 1024 #define MAX_AUDIO_BUFFERSIZE 32768 // 32K buffers max #define MAINFRAME_TITLE "Open Modplug Tracker" -#define INFORMAL_VERSION "1.17RC3_" #define INIBUFFERSIZE MAX_PATH enum { @@ -185,7 +184,7 @@ #define PATTERN_FOLLOWSONGOFF 0x80000 // follow song off by default #define PATTERN_MIDIRECORD 0x100000 // MIDI Record on by default //#define PATTERN_ALTERNTIVEBPMSPEED 0x200000 // deprecated -#define PATTERN_HILITETIMESIGS 0x400000 // highlight on song signature +//#define PATTERN_HILITETIMESIGS 0x400000 // highlight on song signature, deprecated (now always enabled) #define PATTERN_OLDCTXMENUSTYLE 0x800000 // mpt 1.16 pattern context menu style #define PATTERN_SYNCMUTE 0x1000000 // maintain sample sync on mute #define PATTERN_AUTODELAY 0x2000000 // automatically insert delay commands in pattern when entering notes @@ -430,7 +429,8 @@ // Pattern Setup static UINT gnPatternSpacing; static BOOL gbPatternVUMeters, gbPatternPluginNames, gbPatternRecord; - static DWORD m_dwPatternSetup, m_dwMidiSetup, m_nRowSpacing, m_nRowSpacing2, m_nKeyboardCfg, gnHotKeyMask; + static DWORD m_dwPatternSetup, m_dwMidiSetup, m_nKeyboardCfg, gnHotKeyMask; + static DWORD m_nRowSpacing, m_nRowSpacing2; // primary (measures) and secondary (beats) highlight static bool m_bHideUnavailableCtxMenuItems; // Sample Editor Setup static UINT m_nSampleUndoMaxBuffer; @@ -697,7 +697,6 @@ public: afx_msg void OnInitMenu(CMenu* pMenu); bool UpdateEffectKeys(void); - bool UpdateHighlights(void); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -2046,7 +2046,7 @@ { case tempo_mode_alternative: Message.Format("Using alternative tempo interpretation.\n\nAssuming:\n. %d ticks per second\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nCurrentRowsPerBeat, bpm); break; case tempo_mode_modern: @@ -2056,7 +2056,7 @@ case tempo_mode_classic: default: Message.Format("Using standard tempo interpretation.\n\nAssuming:\n. A mod tempo (tick duration factor) of %d\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nCurrentRowsPerBeat, bpm); break; } @@ -3614,8 +3614,12 @@ if(ChangeNumChannels(nNewChannels, showCancelInRemoveDlg)) bShowLog = true; } + // Force update of pattern highlights + UpdateAllViews(NULL, HINT_PATTERNDATA); + + SetModified(); + if (bShowLog) ShowLog("Conversion Status", CMainFrame::GetMainFrame()); - SetModified(); } } Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -368,6 +368,19 @@ } } + // Check for patterns with custom time signatures (fixing will be applied in the pattern container) + if(!CSoundFile::GetModSpecifications(nNewType).hasPatternSignatures) + { + for(PATTERNINDEX nPat = 0; nPat < m_SndFile.GetNumPatterns(); nPat++) + { + if(m_SndFile.Patterns[nPat].GetOverrideSignature()) + { + AddToLog("WARNING: Pattern-specific time signatures are not supported by the new format.\n"); + break; + } + } + } + BEGIN_CRITICAL(); m_SndFile.ChangeModTypeTo(nNewType); if (!newTypeIsXM_IT_MPT && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -58,7 +58,6 @@ ON_COMMAND(IDC_CHECK2, OnPreviewChanged) ON_COMMAND(IDC_CHECK3, OnSettingsChanged) ON_COMMAND(IDC_CHECK4, OnPreviewChanged) - ON_COMMAND(IDC_CHECK5, OnHiliteTimeSigsChanged) END_MESSAGE_MAP() @@ -98,11 +97,6 @@ SetDlgItemInt(IDC_PRIMARYHILITE, CMainFrame::m_nRowSpacing); SetDlgItemInt(IDC_SECONDARYHILITE, CMainFrame::m_nRowSpacing2); - if (CMainFrame::m_dwPatternSetup & PATTERN_HILITETIMESIGS) CheckDlgButton(IDC_CHECK5, MF_CHECKED); - GetDlgItem(IDC_PRIMARYHILITE)->EnableWindow(!IsDlgButtonChecked(IDC_CHECK5)); - GetDlgItem(IDC_SECONDARYHILITE)->EnableWindow(!IsDlgButtonChecked(IDC_CHECK5)); - - OnColorSelChanged(); return TRUE; } @@ -114,9 +108,9 @@ int temp_nRowSpacing = GetDlgItemInt(IDC_PRIMARYHILITE); int temp_nRowSpacing2 = GetDlgItemInt(IDC_SECONDARYHILITE); - if ((temp_nRowSpacing2 >= temp_nRowSpacing)) + if ((temp_nRowSpacing2 > temp_nRowSpacing)) { - ::AfxMessageBox("Error: Primary highlight must be greater than secondary highlight.", MB_OK|MB_ICONEXCLAMATION); + ::AfxMessageBox("Error: Primary highlight must be greater than or equal secondary highlight.", MB_OK|MB_ICONEXCLAMATION); ::SetFocus(::GetDlgItem(m_hWnd, IDC_PRIMARYHILITE)); return 0; } @@ -127,12 +121,11 @@ void COptionsColors::OnOK() //------------------------- { - CMainFrame::m_dwPatternSetup &= ~(PATTERN_STDHIGHLIGHT|PATTERN_2NDHIGHLIGHT|PATTERN_EFFECTHILIGHT|PATTERN_SMALLFONT|PATTERN_HILITETIMESIGS); + CMainFrame::m_dwPatternSetup &= ~(PATTERN_STDHIGHLIGHT|PATTERN_2NDHIGHLIGHT|PATTERN_EFFECTHILIGHT|PATTERN_SMALLFONT); if (IsDlgButtonChecked(IDC_CHECK1)) CMainFrame::m_dwPatternSetup |= PATTERN_STDHIGHLIGHT; if (IsDlgButtonChecked(IDC_CHECK2)) CMainFrame::m_dwPatternSetup |= PATTERN_EFFECTHILIGHT; if (IsDlgButtonChecked(IDC_CHECK3)) CMainFrame::m_dwPatternSetup |= PATTERN_SMALLFONT; if (IsDlgButtonChecked(IDC_CHECK4)) CMainFrame::m_dwPatternSetup |= PATTERN_2NDHIGHLIGHT; - if (IsDlgButtonChecked(IDC_CHECK5)) CMainFrame::m_dwPatternSetup |= PATTERN_HILITETIMESIGS; CMainFrame::m_nRowSpacing = GetDlgItemInt(IDC_PRIMARYHILITE); CMainFrame::m_nRowSpacing2 = GetDlgItemInt(IDC_SECONDARYHILITE); @@ -335,19 +328,6 @@ SetModified(TRUE); } -void COptionsColors::OnHiliteTimeSigsChanged() -//-------------------------------------- -{ - bool enabling = !IsDlgButtonChecked(IDC_CHECK5); - if (enabling) { - SetDlgItemInt(IDC_PRIMARYHILITE, CMainFrame::m_nRowSpacing); - SetDlgItemInt(IDC_SECONDARYHILITE, CMainFrame::m_nRowSpacing2); - } - GetDlgItem(IDC_PRIMARYHILITE)->EnableWindow(enabling); - GetDlgItem(IDC_SECONDARYHILITE)->EnableWindow(enabling); - OnSettingsChanged(); -} - void COptionsColors::OnUpdateDialog() //----------------------------------- { Modified: trunk/OpenMPT/mptrack/Moptions.h =================================================================== --- trunk/OpenMPT/mptrack/Moptions.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Moptions.h 2010-08-09 14:09:36 UTC (rev 680) @@ -73,7 +73,6 @@ afx_msg void OnDrawItem(int nIdCtl, LPDRAWITEMSTRUCT lpdis); afx_msg void OnColorSelChanged(); afx_msg void OnSettingsChanged(); - afx_msg void OnHiliteTimeSigsChanged(); afx_msg void OnSelectColor1(); afx_msg void OnSelectColor2(); afx_msg void OnSelectColor3(); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -1824,10 +1824,10 @@ SetDlgItemText(IDC_EDIT3, CString("OpenMPT ") + MptVersion::str + " (development build)"); m_heContact.SetWindowText( -"Contact / Discussion:\r\n\ -http://openmpt.com/forum/\r\n\ -\r\nUpdates:\r\n\ -http://sourceforge.net/projects/modplug/"); + "Contact / Discussion:\r\n" + "http://openmpt.com/forum/\r\n" + "\r\nUpdates:\r\n" + "http://sourceforge.net/projects/modplug/"); const char* const pArrCredit = { "OpenMPT / Modplug Tracker|" @@ -1869,7 +1869,7 @@ "LPChip, Ganja, Diamond, Nofold, Goor00, Georg|" "Skilletaudio, Squirrel Havoc, Snu, Anboi|" "Sam Zen, BooT-SectoR-ViruZ, 33, Waxhead|" - "KrazyKatz, Bvanoudtshoorn|" + "KrazyKatz, Bvanoudtshoorn, Skaven|" "|||||||" "VST PlugIn Technology by Steinberg Media Technologies GmbH|" "ASIO Technology by Steinberg Media Technologies GmbH|" Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -780,20 +780,28 @@ m_pbmpOldGrid = m_dcGrid.SelectObject(&m_bmpGrid); //do draw - int width=m_rcClient.right-m_rcClient.left; - int nPrevTick=-1; + CSoundFile *pSndFile; + int width = m_rcClient.right - m_rcClient.left; + int nPrevTick = -1; int nTick, nRow; - for (int x=3; x<width; x++) + int nRowsPerBeat = 1, nRowsPerMeasure = 1; + if(GetDocument() != nullptr && (pSndFile = GetDocument()->GetSoundFile()) != nullptr) { + nRowsPerBeat = pSndFile->m_nDefaultRowsPerBeat; + nRowsPerMeasure = pSndFile->m_nDefaultRowsPerMeasure; + } + + for (int x = 3; x < width; x++) + { nTick = QuickScreenToTick(x, cachedScrollPos); if (nTick != nPrevTick && !(nTick%speed)) { - nPrevTick=nTick; - nRow=nTick/speed; + nPrevTick = nTick; + nRow = nTick / speed; - if (nRow % max(1, CMainFrame::m_nRowSpacing) == 0) + if (nRow % max(1, nRowsPerMeasure) == 0) m_dcGrid.SelectObject(CMainFrame::penGray80); - else if (nRow % max(1, CMainFrame::m_nRowSpacing2) == 0) + else if (nRow % max(1, nRowsPerBeat) == 0) m_dcGrid.SelectObject(CMainFrame::penGray55); else m_dcGrid.SelectObject(CMainFrame::penGray33); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -1142,7 +1142,7 @@ //-------------------------------------- { CModDoc *pModDoc = GetDocument(); - if (pModDoc) + if (pModDoc && pModDoc->GetSoundFile() && pModDoc->GetSoundFile()->Patterns.IsValidPat(m_nPattern)) { CPatternPropertiesDlg dlg(pModDoc, m_nPattern, this); if (dlg.DoModal()) @@ -2583,7 +2583,8 @@ BeginWaitCursor(); //First adding channel as the last channel... - if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1)) { + if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels + 1)) + { pSndFile->InitChannel(pSndFile->m_nChannels-1); //...and then moving it to right position. pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); @@ -2607,7 +2608,8 @@ if (pModDoc == 0 || (pSndFile = pModDoc->GetSoundFile()) == 0) return; BeginWaitCursor(); - if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1)) { + if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels + 1)) + { pSndFile->InitChannel(pSndFile->m_nChannels-1); pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); @@ -3476,6 +3478,7 @@ } + LRESULT CViewPattern::OnCustomKeyMsg(WPARAM wParam, LPARAM /*lParam*/) //---------------------------------------------------------------- { @@ -3523,22 +3526,22 @@ // Pattern navigation: case kcPatternJumpUph1Select: - case kcPatternJumpUph1: CursorJump(CMainFrame::m_nRowSpacing, true, false); return wParam; + case kcPatternJumpUph1: CursorJump(GetRowsPerMeasure(), true, false); return wParam; case kcPatternJumpDownh1Select: - case kcPatternJumpDownh1: CursorJump(CMainFrame::m_nRowSpacing, false, false); return wParam; + case kcPatternJumpDownh1: CursorJump(GetRowsPerMeasure(), false, false); return wParam; case kcPatternJumpUph2Select: - case kcPatternJumpUph2: CursorJump(CMainFrame::m_nRowSpacing2, true, false); return wParam; + case kcPatternJumpUph2: CursorJump(GetRowsPerBeat(), true, false); return wParam; case kcPatternJumpDownh2Select: - case kcPatternJumpDownh2: CursorJump(CMainFrame::m_nRowSpacing2, false, false); return wParam; + case kcPatternJumpDownh2: CursorJump(GetRowsPerBeat(), false, false); return wParam; case kcPatternSnapUph1Select: - case kcPatternSnapUph1: CursorJump(CMainFrame::m_nRowSpacing, true, true); return wParam; + case kcPatternSnapUph1: CursorJump(GetRowsPerMeasure(), true, true); return wParam; case kcPatternSnapDownh1Select: - case kcPatternSnapDownh1: CursorJump(CMainFrame::m_nRowSpacing, false, true); return wParam; + case kcPatternSnapDownh1: CursorJump(GetRowsPerMeasure(), false, true); return wParam; case kcPatternSnapUph2Select: - case kcPatternSnapUph2: CursorJump(CMainFrame::m_nRowSpacing2, true, true); return wParam; + case kcPatternSnapUph2: CursorJump(GetRowsPerBeat(), true, true); return wParam; case kcPatternSnapDownh2Select: - case kcPatternSnapDownh2: CursorJump(CMainFrame::m_nRowSpacing2, false, true); return wParam; + case kcPatternSnapDownh2: CursorJump(GetRowsPerBeat(), false, true); return wParam; case kcNavigateDownSelect: case kcNavigateDown: SetCurrentRow(m_nRow+1, TRUE); return wParam; @@ -4085,7 +4088,7 @@ void CViewPattern::TempEnterOctave(int val) -//--------------------------------------------- +//----------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); @@ -5436,3 +5439,29 @@ PLUGINDEX nPlg = (PLUGINDEX)(mSelStart->instr - 1); pModDoc->TogglePluginEditor(nPlg); } + + +ROWINDEX CViewPattern::GetRowsPerBeat() const +//------------------------------------------- +{ + CSoundFile *pSndFile; + if(GetDocument() == nullptr || (pSndFile = GetDocument()->GetSoundFile()) == nullptr) + return 0; + if(!pSndFile->Patterns[m_nPattern].GetOverrideSignature()) + return pSndFile->m_nDefaultRowsPerBeat; + else + return pSndFile->Patterns[m_nPattern].GetRowsPerBeat(); +} + + +ROWINDEX CViewPattern::GetRowsPerMeasure() const +//---------------------------------------------- +{ + CSoundFile *pSndFile; + if(GetDocument() == nullptr || (pSndFile = GetDocument()->GetSoundFile()) == nullptr) + return 0; + if(!pSndFile->Patterns[m_nPattern].GetOverrideSignature()) + return pSndFile->m_nDefaultRowsPerMeasure; + else + return pSndFile->Patterns[m_nPattern].GetRowsPerMeasure(); +} Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/View_pat.h 2010-08-09 14:09:36 UTC (rev 680) @@ -130,6 +130,7 @@ void UpdateIndicator(); void UpdateXInfoText(); //rewbs.xinfo void UpdateColors(); + int GetXScrollPos() const { return m_nXScroll; } int GetYScrollPos() const { return m_nYScroll; } int GetColumnWidth() const { return m_szCell.cx; } @@ -142,6 +143,9 @@ POINT GetPointFromPosition(DWORD dwPos); DWORD GetPositionFromPoint(POINT pt); DWORD GetDragItem(CPoint point, LPRECT lpRect); + ROWINDEX GetRowsPerBeat() const; + ROWINDEX GetRowsPerMeasure() const; + void InvalidatePattern(BOOL bHdr=FALSE); void InvalidateRow(int n=-1); void InvalidateArea(DWORD dwBegin, DWORD dwEnd); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -778,8 +778,8 @@ } if ((value & kVstTimeSigValid) && pSndFile) { timeInfo.flags |= kVstTimeSigValid; - timeInfo.timeSigNumerator = pSndFile->m_nRowsPerBeat; - timeInfo.timeSigDenominator = pSndFile->m_nRowsPerMeasure; + timeInfo.timeSigNumerator = pSndFile->m_nCurrentRowsPerBeat; + timeInfo.timeSigDenominator = pSndFile->m_nCurrentRowsPerMeasure; } } return (long)&timeInfo; @@ -1460,8 +1460,6 @@ VOID CSelectPluginDlg::OnAddPlugin() //---------------------------------- { - CHAR *pszFileNames; - FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "dll", "", "VST Plugins (*.dll)|*.dll||", CMainFrame::GetWorkingDirectory(DIR_PLUGINS), Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -144,8 +144,8 @@ m_nType = m_pSndFile->m_nType; m_nChannels = m_pSndFile->m_nChannels; m_dwSongFlags = m_pSndFile->m_dwSongFlags; - SetDlgItemInt(IDC_ROWSPERBEAT, m_pSndFile->m_nRowsPerBeat); - SetDlgItemInt(IDC_ROWSPERMEASURE, m_pSndFile->m_nRowsPerMeasure); + SetDlgItemInt(IDC_ROWSPERBEAT, m_pSndFile->m_nDefaultRowsPerBeat); + SetDlgItemInt(IDC_ROWSPERMEASURE, m_pSndFile->m_nDefaultRowsPerMeasure); m_TypeBox.SetItemData(m_TypeBox.AddString("ProTracker MOD"), MOD_TYPE_MOD); m_TypeBox.SetItemData(m_TypeBox.AddString("ScreamTracker S3M"), MOD_TYPE_S3M); @@ -397,9 +397,9 @@ int temp_nRPB = GetDlgItemInt(IDC_ROWSPERBEAT); int temp_nRPM = GetDlgItemInt(IDC_ROWSPERMEASURE); - if ((temp_nRPB >= temp_nRPM)) + if ((temp_nRPB > temp_nRPM)) { - ::AfxMessageBox("Error: Rows per measure must be greater than rows per beat.", MB_OK|MB_ICONEXCLAMATION); + ::AfxMessageBox("Error: Rows per measure must be greater than or equal rows per beat.", MB_OK|MB_ICONEXCLAMATION); GetDlgItem(IDC_ROWSPERMEASURE)->SetFocus(); return false; } @@ -454,12 +454,14 @@ } sel = m_TempoModeBox.GetCurSel(); - if (sel >= 0) { + if (sel >= 0) + { m_pSndFile->m_nTempoMode = m_TempoModeBox.GetItemData(sel); } sel = m_PlugMixBox.GetCurSel(); - if (sel >= 0) { + if (sel >= 0) + { m_pSndFile->m_nMixLevels = m_PlugMixBox.GetItemData(sel); m_pSndFile->m_pConfig->SetMixLevels(m_pSndFile->m_nMixLevels); m_pSndFile->RecalculateGainForAllPlugs(); @@ -473,9 +475,8 @@ if(IsDlgButtonChecked(IDC_CHK_OLDRANDOM)) m_pSndFile->SetModFlag(MSF_OLDVOLSWING, true); } - m_pSndFile->m_nRowsPerBeat = GetDlgItemInt(IDC_ROWSPERBEAT); - m_pSndFile->m_nRowsPerMeasure = GetDlgItemInt(IDC_ROWSPERMEASURE); - + m_pSndFile->m_nDefaultRowsPerBeat = GetDlgItemInt(IDC_ROWSPERBEAT); + m_pSndFile->m_nDefaultRowsPerMeasure = GetDlgItemInt(IDC_ROWSPERMEASURE); if(CChannelManagerDlg::sharedInstance(FALSE) && CChannelManagerDlg::sharedInstance()->IsDisplayed()) CChannelManagerDlg::sharedInstance()->Update(); @@ -975,18 +976,21 @@ } // Effect int effectIndex = -1; - if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) { + if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) + { int n = -1; // unused parameter adjustment effectIndex = combo->GetItemData(combo->GetCurSel()); m_nCommand = m_pModDoc->GetEffectFromIndex(effectIndex, n); } // Param m_nParam = 0; - if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) { + if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) + { m_nParam = combo->GetItemData(combo->GetCurSel()); // Apply parameter value mask if required (e.g. SDx has mask D0). - if (effectIndex > -1) { + if (effectIndex > -1) + { m_nParam |= m_pModDoc->GetEffectMaskFromIndex(effectIndex); } } @@ -1007,6 +1011,7 @@ BEGIN_MESSAGE_MAP(CPatternPropertiesDlg, CDialog) ON_COMMAND(IDC_BUTTON_HALF, OnHalfRowNumber) ON_COMMAND(IDC_BUTTON_DOUBLE, OnDoubleRowNumber) + ON_COMMAND(IDC_CHECK1, OnOverrideSignature) END_MESSAGE_MAP() BOOL CPatternPropertiesDlg::OnInitDialog() @@ -1015,30 +1020,47 @@ CComboBox *combo; CDialog::OnInitDialog(); combo = (CComboBox *)GetDlgItem(IDC_COMBO1); - CSoundFile *pSndFile = (m_pModDoc) ? m_pModDoc->GetSoundFile() : NULL; + const CSoundFile *pSndFile = (m_pModDoc) ? m_pModDoc->GetSoundFile() : nullptr; if ((pSndFile) && (m_nPattern < pSndFile->Patterns.Size()) && (combo)) { CHAR s[256]; UINT nrows = pSndFile->Patterns[m_nPattern].GetNumRows(); -// -> CODE#0008 -// -> DESC="#define to set pattern size" -// for (UINT irow=32; irow<=256; irow++) -// for (UINT irow=32; irow<=MAX_PATTERN_ROWS; irow++) const CModSpecifications& specs = pSndFile->GetModSpecifications(); - for (UINT irow=specs.patternRowsMin; irow<=specs.patternRowsMax; irow++) -// -! BEHAVIOUR_CHANGE#0008 + for (UINT irow = specs.patternRowsMin; irow <= specs.patternRowsMax; irow++) { wsprintf(s, "%d", irow); combo->AddString(s); } combo->SetCurSel(nrows - specs.patternRowsMin); - wsprintf(s, "Pattern #%d:\x0d\x0a %d row%s (%dK)", + wsprintf(s, "Pattern #%d: %d row%s (%dK)", m_nPattern, pSndFile->Patterns[m_nPattern].GetNumRows(), (pSndFile->Patterns[m_nPattern].GetNumRows() == 1) ? "" : "s", - (pSndFile->Patterns[m_nPattern].GetNumRows() * pSndFile->m_nChannels * sizeof(MODCOMMAND))/1024); + (pSndFile->Patterns[m_nPattern].GetNumRows() * pSndFile->m_nChannels * sizeof(MODCOMMAND)) / 1024); SetDlgItemText(IDC_TEXT1, s); + + // Window title + CHAR szName[MAX_PATTERNNAME + 2]; + pSndFile->GetPatternName(m_nPattern, szName, MAX_PATTERNNAME); + if(strlen(szName)) + { + strcat(szName, ")"); + } + wsprintf(s, "Pattern Properties for Pattern #%d%s%s", m_nPattern, strlen(szName) ? " (" : "", szName); + SetWindowText(s); + + // pattern time signature + const bool bOverride = pSndFile->Patterns[m_nPattern].GetOverrideSignature(); + UINT nRPB = pSndFile->Patterns[m_nPattern].GetRowsPerBeat(), nRPM = pSndFile->Patterns[m_nPattern].GetRowsPerMeasure(); + if(nRPB == 0 || !bOverride) nRPB = pSndFile->m_nDefaultRowsPerBeat; + if(nRPM == 0 || !bOverride) nRPM = pSndFile->m_nDefaultRowsPerMeasure; + + GetDlgItem(IDC_CHECK1)->EnableWindow(pSndFile->GetModSpecifications().hasPatternSignatures ? TRUE : FALSE); + CheckDlgButton(IDC_CHECK1, bOverride ? MF_CHECKED : MF_UNCHECKED); + SetDlgItemInt(IDC_EDIT_ROWSPERBEAT, nRPB, FALSE); + SetDlgItemInt(IDC_EDIT_ROWSPERMEASURE, nRPM, FALSE); + OnOverrideSignature(); } return TRUE; } @@ -1047,50 +1069,76 @@ void CPatternPropertiesDlg::OnHalfRowNumber() //------------------------------------------- { - CComboBox *combo; - CString str; - combo = (CComboBox *)GetDlgItem(IDC_COMBO1); - if(combo->GetCount() < 1) return; - if(combo->GetCurSel() == CB_ERR) combo->SetCurSel(0); + const CSoundFile *pSndFile = (m_pModDoc) ? m_pModDoc->GetSoundFile() : nullptr; + if(pSndFile == nullptr) + return; - combo->GetLBText(combo->GetCurSel(), str); - int sel = atoi(str)/2; - combo->GetLBText(0, str); - const int row0 = atoi(str); - if(sel < row0) sel = row0; - combo->SetCurSel(sel - row0); + UINT nRows = GetDlgItemInt(IDC_COMBO1, NULL, FALSE); + nRows /= 2; + if(nRows < pSndFile->GetModSpecifications().patternRowsMin) + nRows = pSndFile->GetModSpecifications().patternRowsMin; + SetDlgItemInt(IDC_COMBO1, nRows, FALSE); } void CPatternPropertiesDlg::OnDoubleRowNumber() //--------------------------------------------- { - CComboBox *combo; - CString str; - combo = (CComboBox *)GetDlgItem(IDC_COMBO1); - if(combo->GetCount() < 1) return; - if(combo->GetCurSel() == CB_ERR) combo->SetCurSel(0); + const CSoundFile *pSndFile = (m_pModDoc) ? m_pModDoc->GetSoundFile() : nullptr; + if(pSndFile == nullptr) + return; - combo->GetLBText(combo->GetCurSel(), str); - int sel = 2*atoi(str); - combo->GetLBText(0, str); - const int row0 = atoi(str); - combo->GetLBText(combo->GetCount()-1, str); - if(sel > atoi(str)) sel = atoi(str); - combo->SetCurSel(sel - row0); + UINT nRows = GetDlgItemInt(IDC_COMBO1, NULL, FALSE); + nRows *= 2; + if(nRows > pSndFile->GetModSpecifications().patternRowsMax) + nRows = pSndFile->GetModSpecifications().patternRowsMax; + SetDlgItemInt(IDC_COMBO1, nRows, FALSE); } +void CPatternPropertiesDlg::OnOverrideSignature() +//----------------------------------------------- +{ + GetDlgItem(IDC_EDIT_ROWSPERBEAT)->EnableWindow(IsDlgButtonChecked(IDC_CHECK1)); + GetDlgItem(IDC_EDIT_ROWSPERMEASURE)->EnableWindow(IsDlgButtonChecked(IDC_CHECK1)); +} + + void CPatternPropertiesDlg::OnOK() //-------------------------------- { - int n = GetDlgItemInt(IDC_COMBO1); -// -> CODE#0008 -// -> DESC="#define to set pattern size" -// if ((n >= 2) && (n <= 256) && (m_pModDoc)) m_pModDoc->ResizePattern(m_nPattern, n); - //if ((n >= 2) && (n <= MAX_PATTERN_ROWS) && (m_pModDoc)) m_pModDoc->ResizePattern(m_nPattern, n); - if(m_pModDoc) m_pModDoc->GetSoundFile()->Patterns[m_nPattern].Resize(n); -// -! BEHAVIOUR_CHANGE#0008 + CSoundFile *pSndFile = (m_pModDoc) ? m_pModDoc->GetSoundFile() : nullptr; + if(pSndFile) + { + // Update pattern signature if necessary + if(pSndFile->GetModSpecifications().hasPatternSignatures) + { + if(IsDlgButtonChecked(IDC_CHECK1)) // Enable signature + { + ROWINDEX nNewBeat = (ROWINDEX)GetDlgItemInt(IDC_EDIT_ROWSPERBEAT, NULL, FALSE), nNewMeasure = (ROWINDEX)GetDlgItemInt(IDC_EDIT_ROWSPERMEASURE, NULL, FALSE); + if(nNewBeat != pSndFile->Patterns[m_nPattern].GetRowsPerBeat() || nNewMeasure != pSndFile->Patterns[m_nPattern].GetRowsPerMeasure()) + { + if(!pSndFile->Patterns[m_nPattern].SetSignature(nNewBeat, nNewMeasure)) + { + MessageBox("Invalid time signature!", "Pattern Properties", MB_OK|MB_ICONEXCLAMATION); + GetDlgItem(IDC_EDIT_ROWSPERBEAT)->SetFocus(); + return; + } + m_pModDoc->SetModified(); + } + } else // Disable signature + { + if(pSndFile->Patterns[m_nPattern].GetOverrideSignature()) + { + pSndFile->Patterns[m_nPattern].RemoveSignature(); + m_pModDoc->SetModified(); + } + } + } + + UINT n = GetDlgItemInt(IDC_COMBO1, NULL, FALSE); + pSndFile->Patterns[m_nPattern].Resize(n); + } CDialog::OnOK(); } Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2010-08-09 14:09:36 UTC (rev 680) @@ -213,6 +213,7 @@ virtual void OnOK(); afx_msg void OnHalfRowNumber(); afx_msg void OnDoubleRowNumber(); + afx_msg void OnOverrideSignature(); DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-08-09 14:09:36 UTC (rev 680) @@ -369,33 +369,32 @@ CAPTION "Colours" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_COMBO1,15,25,134,109,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Primary highlight",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,91,74,10 - EDITTEXT IDC_PRIMARYHILITE,114,90,21,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Secondary highlight",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,109,80,10 - EDITTEXT IDC_SECONDARYHILITE,114,108,21,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Enable effect highlighting",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,60,114,10 - CONTROL "Use small font",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,45,102,10 - PUSHBUTTON "MPT",IDC_BUTTON5,126,246,30,15 - PUSHBUTTON "Blue",IDC_BUTTON6,198,246,30,15 - PUSHBUTTON "Green",IDC_BUTTON7,162,246,30,15 - PUSHBUTTON "Buzz",IDC_BUTTON8,234,246,30,15 - CONTROL "Colour",IDC_BUTTON1,"Button",BS_OWNERDRAW,25,194,51,15 - CONTROL "Colour",IDC_BUTTON2,"Button",BS_OWNERDRAW,98,194,51,15 - CONTROL "Colour",IDC_BUTTON3,"Button",BS_OWNERDRAW,168,194,51,15 - LTEXT "Background:",IDC_TEXT1,25,183,60,8 - LTEXT "Foreground:",IDC_TEXT2,98,183,62,8 - LTEXT "Highlight:",IDC_TEXT3,169,185,61,8 - GROUPBOX "",IDC_STATIC,5,5,260,211 - LTEXT "Select colour for:",IDC_STATIC,15,15,63,8 - LTEXT "rows",IDC_STATIC,138,92,16,8 - LTEXT "rows",IDC_STATIC,138,110,16,8 - CONTROL "",IDC_BUTTON4,"Button",BS_OWNERDRAW | BS_FLAT,65,130,114,43 - CONTROL "Set highlights to songs' time signatures",IDC_CHECK5, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,75,136,10 - PUSHBUTTON "Load...",IDC_LOAD_COLORSCHEME,18,246,42,15 - PUSHBUTTON "Save...",IDC_SAVE_COLORSCHEME,66,246,42,15 - GROUPBOX "Colour Presets",IDC_STATIC,6,228,264,42 + COMBOBOX IDC_COMBO1,84,114,114,109,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Use small font",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,18,114,10 + CONTROL "Enable effect highlighting",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,36,114,10 + CONTROL "Primary highlight",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,84,10 + EDITTEXT IDC_PRIMARYHILITE,102,54,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Rows per measure (default)",IDC_STATIC,132,56,126,8 + CONTROL "Secondary highlight",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,72,80,10 + EDITTEXT IDC_SECONDARYHILITE,102,72,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Rows per beat (default)",IDC_STATIC,132,74,126,8 + LTEXT "Note: Songs' time signatures will override the default highlight values",IDC_STATIC,18,90,240,24 + CONTROL "",IDC_BUTTON4,"Button",BS_OWNERDRAW | BS_FLAT,76,132,114,43 + LTEXT "Background:",IDC_TEXT1,36,185,60,8 + CONTROL "Colour",IDC_BUTTON1,"Button",BS_OWNERDRAW,36,196,51,15 + LTEXT "Foreground:",IDC_TEXT2,109,185,62,8 + CONTROL "Colour",IDC_BUTTON2,"Button",BS_OWNERDRAW,109,196,51,15 + LTEXT "Highlight:",IDC_TEXT3,180,188,61,8 + CONTROL "Colour",IDC_BUTTON3,"Button",BS_OWNERDRAW,179,196,51,15 + PUSHBUTTON "Load...",IDC_LOAD_COLORSCHEME,18,252,42,15 + PUSHBUTTON "Save...",IDC_SAVE_COLORSCHEME,66,252,42,15 + PUSHBUTTON "MPT",IDC_BUTTON5,126,252,30,15 + PUSHBUTTON "Green",IDC_BUTTON7,162,252,30,15 + PUSHBUTTON "Blue",IDC_BUTTON6,198,252,30,15 + PUSHBUTTON "Buzz",IDC_BUTTON8,234,252,30,15 + GROUPBOX "",IDC_STATIC,5,5,260,217 + LTEXT "Select colour for:",IDC_STATIC,18,116,63,8 + GROUPBOX "Colour Presets",IDC_STATIC,6,234,264,42 END IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 281 @@ -694,7 +693,7 @@ GROUPBOX "Tuning (experimental)",IDC_STATIC,364,28,92,28 END -IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 262, 311 +IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 262, 305 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Song Properties" FONT 8, "MS Shell Dlg", 0, 0, 0x0 @@ -717,21 +716,21 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,162,222,12 CONTROL "Old &random variation behaviour for instruments",IDC_CHK_OLDRANDOM, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,174,222,12 - COMBOBOX IDC_COMBO_TEMPOMODE,36,217,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_ROWSPERBEAT,156,217,24,12,ES_AUTOHSCROLL | ES_NUMBER - EDITTEXT IDC_ROWSPERMEASURE,156,234,24,12,ES_AUTOHSCROLL | ES_NUMBER - EDITTEXT IDC_EDIT_CREATEDWITH,78,271,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE - EDITTEXT IDC_EDIT_SAVEDWITH,78,289,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE + COMBOBOX IDC_COMBO_TEMPOMODE,12,222,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_ROWSPERBEAT,132,210,24,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_ROWSPERMEASURE,132,228,24,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT_CREATEDWITH,78,265,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE + EDITTEXT IDC_EDIT_SAVEDWITH,78,283,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,48 GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,60,246,54 - GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,78 - GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,204,246,48 - LTEXT "Mode:",IDC_TEXT_TEMPOMODE,12,218,21,8 - LTEXT "Rows/beat",IDC_TEXT_ROWSPERBEAT,186,218,36,8 - LTEXT "Rows/measure",IDC_TEXT_ROWSPERMEASURE,186,236,49,8 - GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,257,246,48 - RTEXT "IDC_TEXT_CREATEDWITH",IDC_TEXT_CREATEDWITH,18,273,54,8 - RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,289,54,8 + GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,72 + GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,198,246,48 + LTEXT "Mode:",IDC_TEXT_TEMPOMODE,12,210,21,8 + LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,162,212,84,8 + LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,162,230,84,8 + GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,251,246,48 + RTEXT "IDC_TEXT_CREATEDWITH",IDC_TEXT_CREATEDWITH,18,267,54,8 + RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,283,54,8 END IDD_SHOWLOG DIALOG 0, 0, 300, 106 @@ -903,19 +902,26 @@ CONTROL "Replace All (No confirmation)",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,125,144,10 END -IDD_PATTERN_PROPERTIES DIALOGEX 0, 0, 169, 65 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_PATTERN_PROPERTIES DIALOGEX 0, 0, 190, 127 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW -CAPTION "Pattern properties" +CAPTION "Pattern Properties" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - LTEXT "Rows:",IDC_STATIC,10,10,21,8 - COMBOBOX IDC_COMBO1,12,19,48,93,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Pattern Info",IDC_TEXT1,10,36,95,25 - DEFPUSHBUTTON "OK",IDOK,115,4,50,14 - PUSHBUTTON "Cancel",IDCANCEL,115,22,50,14 - PUSHBUTTON "/2",IDC_BUTTON_HALF,117,47,21,14 - PUSHBUTTON "x2",IDC_BUTTON_DOUBLE,144,47,21,14 + COMBOBOX IDC_COMBO1,6,18,48,93,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&/2",IDC_BUTTON_HALF,60,18,18,12 + PUSHBUTTON "&x2",IDC_BUTTON_DOUBLE,84,18,18,12 + CONTROL "Override &song signature:",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,48,174,12 + EDITTEXT IDC_EDIT_ROWSPERBEAT,18,66,30,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT_ROWSPERMEASURE,18,84,30,12,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "OK",IDOK,132,6,50,14 + PUSHBUTTON "Cancel",IDCANCEL,132,24,50,14 + LTEXT "Rows:",IDC_STATIC,6,6,108,8 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,6,42,174,1 + LTEXT "Rows per beat",IDC_STATIC,54,68,126,8 + LTEXT "Rows per measure",IDC_STATIC,54,86,126,8 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,6,102,174,1 + LTEXT "Pattern Info",IDC_TEXT1,6,108,174,14 END IDD_PATTERN_EDITCOMMAND DIALOGEX 0, 0, 214, 65 @@ -1596,7 +1602,7 @@ IDD_MODDOC_MODTYPE, DIALOG BEGIN RIGHTMARGIN, 248 - BOTTOMMARGIN, 304 + BOTTOMMARGIN, 298 END IDD_SHOWLOG, DIALOG @@ -1621,9 +1627,9 @@ IDD_PATTERN_PROPERTIES, DIALOG BEGIN LEFTMARGIN, 4 - RIGHTMARGIN, 165 + RIGHTMARGIN, 186 TOPMARGIN, 4 - BOTTOMMARGIN, 61 + BOTTOMMARGIN, 123 END IDD_PAGEEDITEFFECT, DIALOG Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/resource.h 2010-08-09 14:09:36 UTC (rev 680) @@ -951,6 +951,8 @@ #define IDC_LIST_SAMPLEGEN_PRESETS 2425 #define IDC_CHECK_UNDO 2426 #define IDC_CHK_REMEMBERSETTINGS 2427 +#define IDC_EDIT_ROWSPERBEAT 2428 +#define IDC_EDIT_ROWSPERMEASURE 2429 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1217,7 +1219,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 526 #define _APS_NEXT_COMMAND_VALUE 60452 -#define _APS_NEXT_CONTROL_VALUE 2428 +#define _APS_NEXT_CONTROL_VALUE 2430 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/mptrack/version.h 2010-08-09 14:09:36 UTC (rev 680) @@ -13,8 +13,8 @@ //Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 -#define VER_MAJOR 18 -#define VER_MINOR 03 +#define VER_MAJOR 19 +#define VER_MINOR 00 #define VER_MINORMINOR 00 //Creates version number from version parts that appears in version string. Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-06 18:33:04 UTC (rev 679) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-09 14:09:36 UTC (rev 680) @@ -25,13 +25,14 @@ #define str_LoadingIncompatibleVersion TEXT("The file informed that it is incompatible with this version of OpenMPT. Loading was terminated.\n") #define str_LoadingMoreRecentVersion TEXT("The loaded file was made with a more recent OpenMPT version and this version may not be able to load all the features or play the file correctly.\n") -const uint16 verMptFileVer = 0x890; +const uint16 verMptFileVer = 0x891; const uint16 verMptFileVerLoadLimit = 0x1000; // If cwtv-field is greater or equal to this value, // the MPTM file will not be loaded. /* MPTM version history for cwtv-field in IT header: -0x88F(1.18.01.00) -> 0x890(1.18.02.00): Removed volume command velocity :xy, added delay-cut command :xy. +0x890(1.18.02.00) -> 0x891(1.19.00.00): Pattern-specific time signatures +0x88F(1.18.01.00) -> 0x890(1.18.02.00): Removed volume command velocity :xy, added delay-cut command :xy. 0x88E(1.17.02.50) -> 0x88F(1.18.01.00): Numerous changes 0x88D(1.17.02.49) -> 0x88E(1.17.02.50): Changed ID to that of IT and undone the orderlist change done in 0x88A->0x88B. Now extended orderlist is saved as extension. @@ -531,13 +532,11 @@ if(pifh->cwtv >= 0x213 && !(interpretModplugmade && m_dwLastSavedWithVersion < MAKE_VERSION_NUMERIC(1, 17, 03, 01))) { - m_nRowsPerBeat = pifh->highlight_minor; - m_nRowsPerMeasure = pifh->highlight_major; - if(m_nRowsPerBeat + m_nRowsPerMeasure == 0) + // MPT 1.09, 1.07 and most likely other old MPT versions leave this blank + if(pifh->highlight_minor + pifh->highlight_major != 0) { - // MPT 1.09, 1.07 and most likely other old MPT versions leave this blank - m_nRowsPerBeat = 4; - m_nRowsPerMeasure = 16; + m_nDefaultRowsPerBeat = pifh->highlight_minor; + m_nDefaultRowsPerMeasure = pifh->highlight_major; } } @@ -1159,8 +1158,8 @@ header.id = 0x4D504D49; lstrcpyn(header.songname, m_szNames[0], 26); - header.highlight_minor = (BYTE)(m_nRowsPerBeat & 0xFF); - header.highlight_major = (BYTE)(m_nRowsPerMeasure & 0xFF); + header.highlight_minor = (BYTE)(m_nDefaultRowsPerBeat & 0xFF); + header.highlight_major = (BYTE)(m_nDefaultRowsPerMeasure & 0xFF); if(GetType() == MOD_TYPE_MPT) { @@ -1457,6 +1456,9 @@ patinfo[2] = 0; patinfo[3] = 0; + if(Patterns[npat].GetOverrideSignature()) + bNeedsMptPatSave = true; + // Check for empty pattern if (Patterns[npat].GetNumRows() == 64) { @@ -1800,8 +1802,8 @@ header.id = 0x4D504D49; lstrcpyn(header.songname, m_szNames[0], 26); - header.highlight_minor = (BYTE)(m_nRowsPerBeat & 0xFF); - header.highlight_major = (BYTE)(m_nRowsPerMeasure & 0xFF); + header.highlight_minor = (BYTE)(m_nDefaultRowsPerBeat & 0xFF); + header.highlight_major = (BYTE)(m_nDefaultRowsPerMeasure & 0xFF); // An additional "---" pattern is ap... [truncated message content] |
From: <sag...@us...> - 2010-08-15 19:46:17
|
Revision: 687 http://modplug.svn.sourceforge.net/modplug/?rev=687&view=rev Author: saga-games Date: 2010-08-15 19:46:09 +0000 (Sun, 15 Aug 2010) Log Message: ----------- [Fix] When there was no INI file, the size of the upper pattern view was defaulting to a wrong value. [Ref] Added three structs for each envelope to MODCHANNEL, to improve readability. Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2010-08-12 16:12:48 UTC (rev 686) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2010-08-15 19:46:09 UTC (rev 687) @@ -392,7 +392,7 @@ glTreeWindowWidth = GetPrivateProfileLong("Display", "MDITreeWidth", 160, iniFile); glTreeSplitRatio = GetPrivateProfileLong("Display", "MDITreeRatio", 128, iniFile); glGeneralWindowHeight = GetPrivateProfileLong("Display", "MDIGeneralHeight", 178, iniFile); - glPatternWindowHeight = GetPrivateProfileLong("Display", "MDIPatternHeight", 232, iniFile); + glPatternWindowHeight = GetPrivateProfileLong("Display", "MDIPatternHeight", 152, iniFile); glSampleWindowHeight = GetPrivateProfileLong("Display", "MDISampleHeight", 188, iniFile); glInstrumentWindowHeight = GetPrivateProfileLong("Display", "MDIInstrumentHeight", 300, iniFile); glCommentsWindowHeight = GetPrivateProfileLong("Display", "MDICommentsHeight", 288, iniFile); @@ -405,7 +405,8 @@ gnMsgBoxVisiblityFlags = GetPrivateProfileDWord("Display", "MsgBoxVisibilityFlags", uint32_max, iniFile); CHAR s[16]; - for (int ncol = 0; ncol < MAX_MODCOLORS; ncol++) { + for (int ncol = 0; ncol < MAX_MODCOLORS; ncol++) + { wsprintf(s, "Color%02d", ncol); rgbCustomColors[ncol] = GetPrivateProfileDWord("Display", s, rgbCustomColors[ncol], iniFile); } @@ -1620,14 +1621,14 @@ { if (m_dwNotifyType & MPTNOTIFY_PITCHENV) { - if (pChn->dwFlags & CHN_PITCHENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->nPitchEnvPosition); + if (pChn->dwFlags & CHN_PITCHENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->PitchEnv.nEnvPosition); } else if (m_dwNotifyType & MPTNOTIFY_PANENV) { - if (pChn->dwFlags & CHN_PANENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->nPanEnvPosition); + if (pChn->dwFlags & CHN_PANENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->PanEnv.nEnvPosition); } else { - if (pChn->dwFlags & CHN_VOLENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->nVolEnvPosition); + if (pChn->dwFlags & CHN_VOLENV) p->dwPos[k] = MPTNOTIFY_POSVALID | (DWORD)(pChn->VolEnv.nEnvPosition); } } } Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-12 16:12:48 UTC (rev 686) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-15 19:46:09 UTC (rev 687) @@ -850,9 +850,9 @@ { // IT compatibility tentative fix: Reset NNA action on every new note, even without instrument number next to note (fixes spx-farspacedance.it, but is this actually 100% correct?) if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nNNA = pIns->nNNA; - if (!(pIns->VolEnv.dwFlags & ENV_CARRY)) pChn->nVolEnvPosition = 0; - if (!(pIns->PanEnv.dwFlags & ENV_CARRY)) pChn->nPanEnvPosition = 0; - if (!(pIns->PitchEnv.dwFlags & ENV_CARRY)) pChn->nPitchEnvPosition = 0; + if (!(pIns->VolEnv.dwFlags & ENV_CARRY)) pChn->VolEnv.nEnvPosition = 0; + if (!(pIns->PanEnv.dwFlags & ENV_CARRY)) pChn->PanEnv.nEnvPosition = 0; + if (!(pIns->PitchEnv.dwFlags & ENV_CARRY)) pChn->PitchEnv.nEnvPosition = 0; if (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) { // Volume Swing @@ -957,9 +957,9 @@ else v <<= 16; if (pj->dwFlags & CHN_LOOP) v >>= 1; - if ((v < vol) || ((v == vol) && (pj->nVolEnvPosition > envpos))) + if ((v < vol) || ((v == vol) && (pj->VolEnv.nEnvPosition > envpos))) { - envpos = pj->nVolEnvPosition; + envpos = pj->VolEnv.nEnvPosition; vol = v; result = j; } @@ -1907,13 +1907,13 @@ case CMD_SETENVPOSITION: if(m_dwSongFlags & SONG_FIRSTTICK) { - pChn->nVolEnvPosition = param; + pChn->VolEnv.nEnvPosition = param; // XM compatibility: FT2 only sets the position of the Volume envelope if(!IsCompatibleMode(TRK_FASTTRACKER2)) { - pChn->nPanEnvPosition = param; - pChn->nPitchEnvPosition = param; + pChn->PanEnv.nEnvPosition = param; + pChn->PitchEnv.nEnvPosition = param; if (pChn->pModInstrument) { MODINSTRUMENT *pIns = pChn->pModInstrument; @@ -2065,24 +2065,24 @@ switch (envToReset) { case ENV_RESET_ALL: - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; - pChn->nVolEnvValueAtReleaseJump = NOT_YET_RELEASED; - pChn->nPitchEnvValueAtReleaseJump = NOT_YET_RELEASED; - pChn->nPanEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->VolEnv.nEnvPosition = 0; + pChn->PanEnv.nEnvPosition = 0; + pChn->PitchEnv.nEnvPosition = 0; + pChn->VolEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->PitchEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->PanEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; break; case ENV_RESET_VOL: - pChn->nVolEnvPosition = 0; - pChn->nVolEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->VolEnv.nEnvPosition = 0; + pChn->VolEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; break; case ENV_RESET_PAN: - pChn->nPanEnvPosition = 0; - pChn->nPanEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->PanEnv.nEnvPosition = 0; + pChn->PanEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; break; case ENV_RESET_PITCH: - pChn->nPitchEnvPosition = 0; - pChn->nPitchEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->PitchEnv.nEnvPosition = 0; + pChn->PitchEnv.nEnvValueAtReleaseJump = NOT_YET_RELEASED; break; } } @@ -3580,8 +3580,8 @@ if (pIns->VolEnv.nReleaseNode != ENV_RELEASE_NODE_UNSET) { - pChn->nVolEnvValueAtReleaseJump = getVolEnvValueFromPosition(pChn->nVolEnvPosition, pIns); - pChn->nVolEnvPosition= pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode]; + pChn->VolEnv.nEnvValueAtReleaseJump = getVolEnvValueFromPosition(pChn->VolEnv.nEnvPosition, pIns); + pChn->VolEnv.nEnvPosition= pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode]; } } Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2010-08-12 16:12:48 UTC (rev 686) +++ trunk/OpenMPT/soundlib/Sndfile.h 2010-08-15 19:46:09 UTC (rev 687) @@ -160,6 +160,15 @@ // -------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------- + +// Envelope playback info for each MODCHANNEL +struct MODCHANNEL_ENVINFO +{ + DWORD nEnvPosition; + LONG nEnvValueAtReleaseJump; +}; + + #pragma warning(disable : 4324) //structure was padded due to __declspec(align()) // Channel Struct @@ -191,10 +200,9 @@ LONG nRealVolume, nRealPan; LONG nVolume, nPan, nFadeOutVol; LONG nPeriod, nC5Speed, nPortamentoDest; - MODINSTRUMENT *pModInstrument; - MODSAMPLE *pModSample; - DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition; - LONG nVolEnvValueAtReleaseJump, nPanEnvValueAtReleaseJump, nPitchEnvValueAtReleaseJump; + MODINSTRUMENT *pModInstrument; // Currently assigned instrument slot + MODCHANNEL_ENVINFO VolEnv, PanEnv, PitchEnv; // Envelope playback info + MODSAMPLE *pModSample; // Currently assigned sample slot DWORD nMasterChn, nVUMeter; LONG nGlobalVol, nInsVol; LONG nFineTune, nTranspose; @@ -205,6 +213,8 @@ LONG nRestorePanOnNewNote; //If > 0, nPan should be set to nRestorePanOnNewNote - 1 on new note. Used to recover from panswing. UINT nOldGlobalVolSlide; DWORD nEFxOffset; // offset memory for Invert Loop (EFx, .MOD only) + int nRetrigCount, nRetrigParam; + ROWINDEX nPatternLoop; // 8-bit members BYTE nRestoreResonanceOnNewNote; //Like above BYTE nRestoreCutoffOnNewNote; //Like above @@ -220,9 +230,7 @@ BYTE nOldCmdEx, nOldVolParam, nOldTempo; BYTE nOldOffset, nOldHiOffset; BYTE nCutOff, nResonance; - int nRetrigCount, nRetrigParam; BYTE nTremorCount, nTremorParam; - ROWINDEX nPatternLoop; BYTE nPatternLoopCount; BYTE nRowNote, nRowInstr; BYTE nRowVolCmd, nRowVolume; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2010-08-12 16:12:48 UTC (rev 686) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2010-08-15 19:46:09 UTC (rev 687) @@ -1103,22 +1103,22 @@ // IT Compatibility: S77 does not disable the volume envelope, it just pauses the counter if (((pChn->dwFlags & CHN_VOLENV) || ((pIns->VolEnv.dwFlags & ENV_ENABLED) && IsCompatibleMode(TRK_IMPULSETRACKER))) && (pIns->VolEnv.nNodes)) { - int envvol = getVolEnvValueFromPosition(pChn->nVolEnvPosition, pIns); + int envvol = getVolEnvValueFromPosition(pChn->VolEnv.nEnvPosition, pIns); // if we are in the release portion of the envelope, // rescale envelope factor so that it is proportional to the release point // and release envelope beginning. if (pIns->VolEnv.nReleaseNode != ENV_RELEASE_NODE_UNSET - && pChn->nVolEnvPosition>=pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode] - && pChn->nVolEnvValueAtReleaseJump != NOT_YET_RELEASED) + && pChn->VolEnv.nEnvPosition>=pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode] + && pChn->VolEnv.nEnvValueAtReleaseJump != NOT_YET_RELEASED) { - int envValueAtReleaseJump = pChn->nVolEnvValueAtReleaseJump; + int envValueAtReleaseJump = pChn->VolEnv.nEnvValueAtReleaseJump; int envValueAtReleaseNode = pIns->VolEnv.Values[pIns->VolEnv.nReleaseNode] << 2; //If we have just hit the release node, force the current env value //to be that of the release node. This works around the case where // we have another node at the same position as the release node. - if (pChn->nVolEnvPosition == pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode]) + if (pChn->VolEnv.nEnvPosition == pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode]) envvol = envValueAtReleaseNode; int relativeVolumeChange = (envvol - envValueAtReleaseNode) * 2; @@ -1130,7 +1130,7 @@ // IT Compatibility: S79 does not disable the panning envelope, it just pauses the counter if (((pChn->dwFlags & CHN_PANENV) || ((pIns->PanEnv.dwFlags & ENV_ENABLED) && IsCompatibleMode(TRK_IMPULSETRACKER))) && (pIns->PanEnv.nNodes)) { - int envpos = pChn->nPanEnvPosition; + int envpos = pChn->PanEnv.nEnvPosition; UINT pt = pIns->PanEnv.nNodes - 1; for (UINT i=0; i<(UINT)(pIns->PanEnv.nNodes-1); i++) { @@ -1311,7 +1311,7 @@ // IT Compatibility: S7B does not disable the pitch envelope, it just pauses the counter if ((pIns) && ((pChn->dwFlags & CHN_PITCHENV) || ((pIns->PitchEnv.dwFlags & ENV_ENABLED) && IsCompatibleMode(TRK_IMPULSETRACKER))) && (pChn->pModInstrument->PitchEnv.nNodes)) { - int envpos = pChn->nPitchEnvPosition; + int envpos = pChn->PitchEnv.nEnvPosition; UINT pt = pIns->PitchEnv.nNodes - 1; for (UINT i=0; i<(UINT)(pIns->PitchEnv.nNodes-1); i++) { @@ -1662,15 +1662,15 @@ if (pChn->dwFlags & CHN_VOLENV) { // Increase position - pChn->nVolEnvPosition++; + pChn->VolEnv.nEnvPosition++; // Volume Loop ? if (pIns->VolEnv.dwFlags & ENV_LOOP) { UINT volloopend = pIns->VolEnv.Ticks[pIns->VolEnv.nLoopEnd]; if (m_nType != MOD_TYPE_XM) volloopend++; - if (pChn->nVolEnvPosition == volloopend) + if (pChn->VolEnv.nEnvPosition == volloopend) { - pChn->nVolEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nLoopStart]; + pChn->VolEnv.nEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nLoopStart]; if ((pIns->VolEnv.nLoopEnd == pIns->VolEnv.nLoopStart) && (!pIns->VolEnv.Values[pIns->VolEnv.nLoopStart]) && ((!(m_nType & MOD_TYPE_XM)) || (pIns->VolEnv.nLoopEnd+1 == (int)pIns->VolEnv.nNodes))) { @@ -1682,14 +1682,14 @@ // Volume Sustain ? if ((pIns->VolEnv.dwFlags & ENV_SUSTAIN) && (!(pChn->dwFlags & CHN_KEYOFF))) { - if (pChn->nVolEnvPosition == (UINT)pIns->VolEnv.Ticks[pIns->VolEnv.nSustainEnd] + 1) - pChn->nVolEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nSustainStart]; + if (pChn->VolEnv.nEnvPosition == (UINT)pIns->VolEnv.Ticks[pIns->VolEnv.nSustainEnd] + 1) + pChn->VolEnv.nEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nSustainStart]; } else // End of Envelope ? - if (pChn->nVolEnvPosition > pIns->VolEnv.Ticks[pIns->VolEnv.nNodes - 1]) + if (pChn->VolEnv.nEnvPosition > pIns->VolEnv.Ticks[pIns->VolEnv.nNodes - 1]) { if ((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) || (pChn->dwFlags & CHN_KEYOFF)) pChn->dwFlags |= CHN_NOTEFADE; - pChn->nVolEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nNodes - 1]; + pChn->VolEnv.nEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nNodes - 1]; if ((!pIns->VolEnv.Values[pIns->VolEnv.nNodes-1]) && ((nChn >= m_nChannels) || (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)))) { pChn->dwFlags |= CHN_NOTEFADE; @@ -1701,49 +1701,49 @@ // Panning Envelope if (pChn->dwFlags & CHN_PANENV) { - pChn->nPanEnvPosition++; + pChn->PanEnv.nEnvPosition++; if (pIns->PanEnv.dwFlags & ENV_LOOP) { UINT panloopend = pIns->PanEnv.Ticks[pIns->PanEnv.nLoopEnd]; if (m_nType != MOD_TYPE_XM) panloopend++; - if (pChn->nPanEnvPosition == panloopend) - pChn->nPanEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nLoopStart]; + if (pChn->PanEnv.nEnvPosition == panloopend) + pChn->PanEnv.nEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nLoopStart]; } // Panning Sustain ? - if ((pIns->PanEnv.dwFlags & ENV_SUSTAIN) && (pChn->nPanEnvPosition == (UINT)pIns->PanEnv.Ticks[pIns->PanEnv.nSustainEnd]+1) + if ((pIns->PanEnv.dwFlags & ENV_SUSTAIN) && (pChn->PanEnv.nEnvPosition == (UINT)pIns->PanEnv.Ticks[pIns->PanEnv.nSustainEnd]+1) && (!(pChn->dwFlags & CHN_KEYOFF))) { // Panning sustained - pChn->nPanEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nSustainStart]; + pChn->PanEnv.nEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nSustainStart]; } else { - if (pChn->nPanEnvPosition > pIns->PanEnv.Ticks[pIns->PanEnv.nNodes - 1]) - pChn->nPanEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nNodes - 1]; + if (pChn->PanEnv.nEnvPosition > pIns->PanEnv.Ticks[pIns->PanEnv.nNodes - 1]) + pChn->PanEnv.nEnvPosition = pIns->PanEnv.Ticks[pIns->PanEnv.nNodes - 1]; } } // Pitch Envelope if (pChn->dwFlags & CHN_PITCHENV) { // Increase position - pChn->nPitchEnvPosition++; + pChn->PitchEnv.nEnvPosition++; // Pitch Loop ? if (pIns->PitchEnv.dwFlags & ENV_LOOP) { UINT pitchloopend = pIns->PitchEnv.Ticks[pIns->PitchEnv.nLoopEnd]; //IT compatibility 24. Short envelope loops if (IsCompatibleMode(TRK_IMPULSETRACKER)) pitchloopend++; - if (pChn->nPitchEnvPosition >= pitchloopend) - pChn->nPitchEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nLoopStart]; + if (pChn->PitchEnv.nEnvPosition >= pitchloopend) + pChn->PitchEnv.nEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nLoopStart]; } // Pitch Sustain ? if ((pIns->PitchEnv.dwFlags & ENV_SUSTAIN) && (!(pChn->dwFlags & CHN_KEYOFF))) { - if (pChn->nPitchEnvPosition == (UINT)pIns->PitchEnv.Ticks[pIns->PitchEnv.nSustainEnd]+1) - pChn->nPitchEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nSustainStart]; + if (pChn->PitchEnv.nEnvPosition == (UINT)pIns->PitchEnv.Ticks[pIns->PitchEnv.nSustainEnd]+1) + pChn->PitchEnv.nEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nSustainStart]; } else { - if (pChn->nPitchEnvPosition > pIns->PitchEnv.Ticks[pIns->PitchEnv.nNodes - 1]) - pChn->nPitchEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nNodes - 1]; + if (pChn->PitchEnv.nEnvPosition > pIns->PitchEnv.Ticks[pIns->PitchEnv.nNodes - 1]) + pChn->PitchEnv.nEnvPosition = pIns->PitchEnv.Ticks[pIns->PitchEnv.nNodes - 1]; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-08-26 12:15:42
|
Revision: 689 http://modplug.svn.sourceforge.net/modplug/?rev=689&view=rev Author: saga-games Date: 2010-08-26 12:15:34 +0000 (Thu, 26 Aug 2010) Log Message: ----------- [Mod] One way to capitalise "ModPlug" should be enough. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/res/MPTRACK.RC2 trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -112,7 +112,7 @@ m_ComboResampling.AddString("Cubic spline"); //rewbs.resamplerConf m_ComboResampling.AddString("Polyphase"); - m_ComboResampling.AddString("XMMS-Modplug"); + m_ComboResampling.AddString("XMMS-ModPlug"); //end rewbs.resamplerConf m_bEditsLocked=false; UpdateView(HINT_MODGENERAL|HINT_MODTYPE|HINT_MODSEQUENCE|HINT_MPTSETUP, NULL); Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -58,7 +58,7 @@ m.volcmd = VOLCMD_NONE; } - if(type == MOD_TYPE_XM) // modplug XM extensions + if(type == MOD_TYPE_XM) // ModPlug XM extensions { if(m.command == CMD_XFINEPORTAUPDOWN && m.param >= 0x30) { @@ -66,7 +66,7 @@ if(autofix) m.command = CMD_NONE; } - } else if(type == MOD_TYPE_IT) // modplug IT extensions + } else if(type == MOD_TYPE_IT) // ModPlug IT extensions { if((m.command == CMD_S3MCMDEX) && ((m.param >> 4) == 0x09) && (m.param != 0x91)) { Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2010-08-26 12:15:34 UTC (rev 689) @@ -24,7 +24,7 @@ #define NUM_AUDIO_BUFFERS 3 #define MIN_AUDIO_BUFFERSIZE 1024 #define MAX_AUDIO_BUFFERSIZE 32768 // 32K buffers max -#define MAINFRAME_TITLE "Open Modplug Tracker" +#define MAINFRAME_TITLE "Open ModPlug Tracker" #define INIBUFFERSIZE MAX_PATH enum { Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -426,7 +426,7 @@ m_CbnResampling.AddString("Cubic spline"); //rewbs.resamplerConf m_CbnResampling.AddString("Polyphase"); - m_CbnResampling.AddString("XMMS-Modplug"); + m_CbnResampling.AddString("XMMS-ModPlug"); //end rewbs.resamplerConf m_CbnResampling.SetCurSel(CMainFrame::m_nSrcMode); } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -1830,7 +1830,7 @@ "http://sourceforge.net/projects/modplug/"); const char* const pArrCredit = { - "OpenMPT / Modplug Tracker|" + "OpenMPT / ModPlug Tracker|" "Copyright \xA9 2004-2010 Contributors|" "Copyright \xA9 1997-2003 Olivier Lapicque (ol...@mo...)|" "|" @@ -1844,7 +1844,7 @@ "Olivier Lapicque (1997-2003)|" "|" "Thanks to:||" - "Konstanty for the XMMS-Modplug resampling implementation |" + "Konstanty for the XMMS-ModPlug resampling implementation |" "http://modplug-xmms.sourceforge.net/|" "Stephan M. Bernsee for pitch shifting source code|" "http://www.dspdimension.com|" @@ -1863,7 +1863,7 @@ "http://kode54.foobar2000.org/|" "Pel K. Txnder for the scrolling credits control :)|" "http://tinyurl.com/4yze8|" - "|The people at Modplug forums for crucial contribution|" + "|The people at ModPlug forums for crucial contribution|" "in the form of ideas, testing and support; thanks|" "particularly to:|" "LPChip, Ganja, Diamond, Nofold, Goor00, Georg|" Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-08-26 12:15:34 UTC (rev 689) @@ -1967,7 +1967,7 @@ MENUITEM SEPARATOR POPUP "&Internet" BEGIN - MENUITEM "Modplug Central &Forums", ID_NETLINK_FORUMS + MENUITEM "ModPlug Central &Forums", ID_NETLINK_FORUMS MENUITEM "OpenMPT Wiki", ID_NETLINK_OPENMPTWIKI MENUITEM "OpenMPT Wiki (German)", ID_NETLINK_OPENMPTWIKI_GERMAN MENUITEM "MPT-FR", ID_NETLINK_MPTFR @@ -2305,7 +2305,7 @@ ID_PATTERN_EXPAND "Expand pattern\nExpand Pattern" ID_PATTERN_SHRINK "Shrink Pattern\nShrink Pattern" ID_HELP_SEARCH "Displays the help index\nHelp Index" - ID_NETLINK_MODPLUG "Go to Modplug Central" + ID_NETLINK_MODPLUG "Go to ModPlug Central" ID_NETLINK_UT "Go to United Trackers" ID_NETLINK_OSMUSIC "Go to OSMusic.net" ID_NETLINK_HANDBOOK "Go to the Tracker's Handbook" @@ -2320,7 +2320,7 @@ BEGIN ID_SAMPLE_TRIM "Delete everything except the current selection\nTrim Sample" ID_FILE_SAVEMIDI "Export the current song to a standard MIDI file" - ID_NETLINK_FORUMS "Go to the Modplug Central Music Forums" + ID_NETLINK_FORUMS "Go to the ModPlug Central Music Forums" ID_INSTRUMENT_SAMPLEMAP "Edit the sample map" ID_NETLINK_PLUGINS "Go to KVR Audio to download plugins" ID_PATTERNDETAIL_LO "Low pattern detail level\nLow pattern detail level" Modified: trunk/OpenMPT/mptrack/res/MPTRACK.RC2 =================================================================== --- trunk/OpenMPT/mptrack/res/MPTRACK.RC2 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/mptrack/res/MPTRACK.RC2 2010-08-26 12:15:34 UTC (rev 689) @@ -42,7 +42,7 @@ VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "Modplug Tracker" + VALUE "InternalName", "ModPlug Tracker" VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2010 contributors." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" VALUE "OriginalFilename", "mptrack.exe" Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -469,8 +469,8 @@ MODCOMMAND lastvalue[MAX_BASECHANNELS]; // -! BEHAVIOUR_CHANGE#0006 - bool interpretModplugmade = false; - bool hasModplugExtensions = false; + bool interpretModPlugMade = false; + bool hasModPlugExtensions = false; if ((!lpStream) || (dwMemLength < 0xC0)) return false; if ((pifh->id != LittleEndian(IT_IMPM) && pifh->id != LittleEndian(IT_MPTM)) || (pifh->insnum > 0xFF) @@ -509,27 +509,27 @@ // This will only be interpreted as "made with modplug" (i.e. disable compatible playback etc) if the "reserved" field is set to "OMPT" - else, compatibility was used. m_dwLastSavedWithVersion = (pifh->cwtv & 0x0FFF) << 16; if(pifh->reserved == LittleEndian(IT_OMPT)) - interpretModplugmade = true; + interpretModPlugMade = true; } else if(pifh->cmwt == 0x888 || pifh->cwtv == 0x888) { // OpenMPT 1.17 and 1.18 (raped IT format) - interpretModplugmade = true; + interpretModPlugMade = true; } else if(pifh->cwtv == 0x0217 && pifh->cmwt == 0x0200 && pifh->reserved == 0) { - // Modplug Tracker 1.16 (semi-raped IT format) + // ModPlug Tracker 1.16 (semi-raped IT format) m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 16, 00, 00); - interpretModplugmade = true; + interpretModPlugMade = true; } else if(pifh->cwtv == 0x0214 && pifh->cmwt == 0x0202 && pifh->reserved == 0) { - // Modplug Tracker b3.3 - 1.09, instruments 557 bytes apart + // ModPlug Tracker b3.3 - 1.09, instruments 557 bytes apart m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 09, 00, 00); - interpretModplugmade = true; + interpretModPlugMade = true; } else if(pifh->cwtv == 0x0214 && pifh->cmwt == 0x0200 && pifh->reserved == 0) { - // Modplug Tracker 1.00a5, instruments 560 bytes apart + // ModPlug Tracker 1.00a5, instruments 560 bytes apart m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, 00); - interpretModplugmade = true; + interpretModPlugMade = true; } } else // case: type == MOD_TYPE_MPT @@ -744,8 +744,8 @@ if(rows <= ModSpecs::itEx.patternRowsMax && rows > ModSpecs::it.patternRowsMax) { - interpretModplugmade = true; - hasModplugExtensions = true; + interpretModPlugMade = true; + hasModPlugExtensions = true; } if ((rows < GetModSpecifications().patternRowsMin) || (rows > GetModSpecifications().patternRowsMax)) @@ -902,8 +902,8 @@ // Load instrument and song extensions. if(mptStartPos >= dwMemPos) { - LPCBYTE ptr = LoadExtendedInstrumentProperties(lpStream + dwMemPos, lpStream + mptStartPos, &interpretModplugmade); - LoadExtendedSongProperties(GetType(), ptr, lpStream, mptStartPos, &interpretModplugmade); + LPCBYTE ptr = LoadExtendedInstrumentProperties(lpStream + dwMemPos, lpStream + mptStartPos, &interpretModPlugMade); + LoadExtendedSongProperties(GetType(), ptr, lpStream, mptStartPos, &interpretModPlugMade); } // -! NEW_FEATURE#0027 @@ -1037,7 +1037,7 @@ if ((vol >= 203) && (vol <= 212)) { m[ch].volcmd = VOLCMD_VIBRATODEPTH; m[ch].vol = vol - 203; // Old versions of ModPlug saved this as vibrato speed instead, so let's fix that - if(m_dwLastSavedWithVersion <= MAKE_VERSION_NUMERIC(1, 17, 02, 54) && interpretModplugmade) + if(m_dwLastSavedWithVersion <= MAKE_VERSION_NUMERIC(1, 17, 02, 54) && interpretModPlugMade) m[ch].volcmd = VOLCMD_VIBRATOSPEED; } else // 213-222: Unused (was velocity) @@ -1078,7 +1078,7 @@ if(GetType() == MOD_TYPE_IT) { // Set appropriate mod flags if the file was not made with MPT. - if(!interpretModplugmade) + if(!interpretModPlugMade) { SetModFlag(MSF_MIDICC_BUGEMULATION, false); SetModFlag(MSF_OLDVOLSWING, false); Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-21 11:19:26 UTC (rev 688) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-26 12:15:34 UTC (rev 689) @@ -1872,7 +1872,7 @@ { case 0x10: ExtraFinePortamentoUp(pChn, param & 0x0F); break; case 0x20: ExtraFinePortamentoDown(pChn, param & 0x0F); break; - // Modplug XM Extensions (ignore in compatible mode) + // ModPlug XM Extensions (ignore in compatible mode) case 0x50: case 0x60: case 0x70: @@ -2014,7 +2014,7 @@ if (nBreakRow < 0) nBreakRow = 0; if(nBreakRow >= 0) m_dwSongFlags |= SONG_BREAKTOROW; - // Modplug Tracker & ModPlugin allow backward jumps + // ModPlug Tracker & ModPlugin allow backward jumps #ifndef FASTSOUNDLIB if ((nPosJump < (int)m_nCurrentPattern) || ((nPosJump == (int)m_nCurrentPattern) && (nBreakRow <= (int)m_nRow))) @@ -2851,7 +2851,7 @@ // S91: Surround On case 0x01: pChn->dwFlags |= CHN_SURROUND; pChn->nPan = 128; break; //////////////////////////////////////////////////////////// - // Modplug Extensions + // ModPlug Extensions // S98: Reverb Off case 0x08: pChn->dwFlags &= ~CHN_REVERB; @@ -3595,7 +3595,7 @@ void CSoundFile::SetSpeed(UINT param) //----------------------------------- { - // Modplug Tracker and Mod-Plugin don't do this check + // ModPlug Tracker and Mod-Plugin don't do this check #ifndef MODPLUG_TRACKER #ifndef FASTSOUNDLIB // Big Hack!!! @@ -4115,7 +4115,7 @@ Specific implementations: Length detection code: - As the modplug engine already deals with pattern loops sufficiently, there's no problem with (infinite) pattern loops + As the ModPlug engine already deals with pattern loops sufficiently, there's no problem with (infinite) pattern loops in this code. Normal player code: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-08-31 21:39:34
|
Revision: 690 http://modplug.svn.sourceforge.net/modplug/?rev=690&view=rev Author: saga-games Date: 2010-08-31 21:39:27 +0000 (Tue, 31 Aug 2010) Log Message: ----------- [Ref] Renamed SONG_ITCOMPATMODE flag to SONG_ITCOMPATGXX for more clarity. Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_psm.cpp trunk/OpenMPT/soundlib/Load_ult.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/load_j2b.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -269,7 +269,7 @@ ctrlSmp::ResetSamples(m_SndFile, ctrlSmp::SmpResetVibrato); } - if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; + if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATGXX; // Convert IT/MPT to XM (instruments) if (oldTypeIsIT_MPT && newTypeIsXM) @@ -388,7 +388,7 @@ AddToLog("WARNING: Linear Frequency Slides not supported by the new format.\n"); m_SndFile.m_dwSongFlags &= ~SONG_LINEARSLIDES; } - if (!newTypeIsIT_MPT) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATMODE); + if (!newTypeIsIT_MPT) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATGXX); if (!newTypeIsS3M) m_SndFile.m_dwSongFlags &= ~SONG_FASTVOLSLIDES; if (!newTypeIsMOD) m_SndFile.m_dwSongFlags &= ~SONG_PT1XMODE; if (newTypeIsS3M || newTypeIsMOD) m_SndFile.m_dwSongFlags &= ~SONG_EXFILTERRANGE; Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -247,7 +247,7 @@ m_CheckBox1.SetCheck((m_pSndFile->m_dwSongFlags & SONG_LINEARSLIDES) ? MF_CHECKED : 0); m_CheckBox2.SetCheck((m_pSndFile->m_dwSongFlags & SONG_FASTVOLSLIDES) ? MF_CHECKED : 0); m_CheckBox3.SetCheck((m_pSndFile->m_dwSongFlags & SONG_ITOLDEFFECTS) ? MF_CHECKED : 0); - m_CheckBox4.SetCheck((m_pSndFile->m_dwSongFlags & SONG_ITCOMPATMODE) ? MF_CHECKED : 0); + m_CheckBox4.SetCheck((m_pSndFile->m_dwSongFlags & SONG_ITCOMPATGXX) ? MF_CHECKED : 0); m_CheckBox5.SetCheck((m_pSndFile->m_dwSongFlags & SONG_EXFILTERRANGE) ? MF_CHECKED : 0); m_CheckBoxPT1x.SetCheck((m_pSndFile->m_dwSongFlags & SONG_PT1XMODE) ? MF_CHECKED : 0); @@ -356,9 +356,9 @@ //-------------------------- { if (m_CheckBox4.GetCheck()) - m_pSndFile->m_dwSongFlags |= SONG_ITCOMPATMODE; + m_pSndFile->m_dwSongFlags |= SONG_ITCOMPATGXX; else - m_pSndFile->m_dwSongFlags &= ~SONG_ITCOMPATMODE; + m_pSndFile->m_dwSongFlags &= ~SONG_ITCOMPATGXX; } Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -563,7 +563,7 @@ if (pifh->flags & 0x08) m_dwSongFlags |= SONG_LINEARSLIDES; if (pifh->flags & 0x10) m_dwSongFlags |= SONG_ITOLDEFFECTS; - if (pifh->flags & 0x20) m_dwSongFlags |= SONG_ITCOMPATMODE; + if (pifh->flags & 0x20) m_dwSongFlags |= SONG_ITCOMPATGXX; if ((pifh->flags & 0x80) || (pifh->special & 0x08)) m_dwSongFlags |= SONG_EMBEDMIDICFG; if (pifh->flags & 0x1000) m_dwSongFlags |= SONG_EXFILTERRANGE; @@ -1228,7 +1228,7 @@ if (m_nInstruments) header.flags |= 0x04; if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; - if (m_dwSongFlags & SONG_ITCOMPATMODE) header.flags |= 0x20; + if (m_dwSongFlags & SONG_ITCOMPATGXX) header.flags |= 0x20; if (m_dwSongFlags & SONG_EXFILTERRANGE) header.flags |= 0x1000; header.globalvol = m_nDefaultGlobalVolume >> 1; header.mv = CLAMP(m_nSamplePreAmp, 0, 128); @@ -1862,7 +1862,7 @@ if (m_nInstruments) header.flags |= 0x04; if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; - if (m_dwSongFlags & SONG_ITCOMPATMODE) header.flags |= 0x20; + if (m_dwSongFlags & SONG_ITCOMPATGXX) header.flags |= 0x20; //if (m_dwSongFlags & SONG_EXFILTERRANGE) header.flags |= 0x1000; header.globalvol = m_nDefaultGlobalVolume >> 1; header.mv = CLAMP(m_nSamplePreAmp, 0, 128); Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -201,7 +201,7 @@ m_nRestartPos = pfh->wRestart; m_nDefaultSpeed = pfh->bTicksPerLine; m_nDefaultTempo = 125; - m_dwSongFlags = SONG_ITCOMPATMODE; + m_dwSongFlags = SONG_ITCOMPATGXX; m_nDefaultRowsPerBeat = pfh->bLinesPerBeat; m_nDefaultRowsPerMeasure = m_nDefaultRowsPerBeat * 4; if ((pfh->wSamplesPerTick > 100) && (pfh->wSamplesPerTick < 5000)) Modified: trunk/OpenMPT/soundlib/Load_psm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_psm.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Load_psm.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -149,7 +149,7 @@ // Yep, this seems to be a valid file. m_nType = MOD_TYPE_PSM; - m_dwSongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATMODE; + m_dwSongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX; SetModFlag(MSF_COMPATIBLE_PLAY, true); m_nChannels = 0; Modified: trunk/OpenMPT/soundlib/Load_ult.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ult.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Load_ult.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -326,7 +326,7 @@ dwMemPos += 32; m_nType = MOD_TYPE_ULT; - m_dwSongFlags = SONG_ITCOMPATMODE | SONG_ITOLDEFFECTS; // this will be converted to IT format by MPT. + m_dwSongFlags = SONG_ITCOMPATGXX | SONG_ITOLDEFFECTS; // this will be converted to IT format by MPT. SetModFlag(MSF_COMPATIBLE_PLAY, true); ASSERT_CAN_READ(1); Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2010-08-31 21:39:27 UTC (rev 690) @@ -293,7 +293,7 @@ #define SONG_EMBEDMIDICFG 0x0001 // Embed macros in file #define SONG_FASTVOLSLIDES 0x0002 // Old Scream Tracker 3.0 volume slides #define SONG_ITOLDEFFECTS 0x0004 // Old Impulse Tracker effect implementations -#define SONG_ITCOMPATMODE 0x0008 // IT "Compatible Gxx" +#define SONG_ITCOMPATGXX 0x0008 // IT "Compatible Gxx" (IT's flag to behave more like other trackers when it comes to portamento effects) #define SONG_LINEARSLIDES 0x0010 // Linear slides vs. Amiga slides #define SONG_PATTERNLOOP 0x0020 // Loop current pattern (pattern editor) #define SONG_STEP 0x0040 // Song is in "step" mode (pattern editor) Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -557,7 +557,7 @@ // Reset envelopes if (bResetEnv) { - if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_dwSongFlags & SONG_ITCOMPATMODE) + if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_dwSongFlags & SONG_ITCOMPATGXX) || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) //IT compatibility tentative fix: Reset envelopes when instrument changes. || (IsCompatibleMode(TRK_IMPULSETRACKER) && bInstrumentChanged)) @@ -808,7 +808,7 @@ if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) - || ((m_dwSongFlags & SONG_ITCOMPATMODE) && (pChn->nRowInstr))) + || ((m_dwSongFlags & SONG_ITCOMPATGXX) && (pChn->nRowInstr))) { if ((m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && (pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) { @@ -818,7 +818,7 @@ pChn->dwFlags &= ~CHN_NOTEFADE; pChn->nFadeOutVol = 65536; } - if ((!bPorta) || (!(m_dwSongFlags & SONG_ITCOMPATMODE)) || (pChn->nRowInstr)) + if ((!bPorta) || (!(m_dwSongFlags & SONG_ITCOMPATGXX)) || (pChn->nRowInstr)) { if ((!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) || (pChn->nRowInstr)) { @@ -2319,7 +2319,7 @@ pChn->dwFlags |= CHN_PORTAMENTO; //IT compatibility 03 - if(!(m_dwSongFlags & SONG_ITCOMPATMODE) && IsCompatibleMode(TRK_IMPULSETRACKER)) + if(!(m_dwSongFlags & SONG_ITCOMPATGXX) && IsCompatibleMode(TRK_IMPULSETRACKER)) { if(param == 0) param = pChn->nOldPortaUpDown; pChn->nOldPortaUpDown = param; Modified: trunk/OpenMPT/soundlib/load_j2b.cpp =================================================================== --- trunk/OpenMPT/soundlib/load_j2b.cpp 2010-08-26 12:15:34 UTC (rev 689) +++ trunk/OpenMPT/soundlib/load_j2b.cpp 2010-08-31 21:39:27 UTC (rev 690) @@ -488,7 +488,7 @@ memcpy(m_szNames[0], mainchunk->songname, 32); SpaceToNullStringFixed(m_szNames[0], 31); - m_dwSongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATMODE; + m_dwSongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX; if(!(mainchunk->flags & 0x01)) m_dwSongFlags |= SONG_LINEARSLIDES; if(mainchunk->channels < 1) return false; m_nChannels = min(mainchunk->channels, MAX_BASECHANNELS); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-08-31 22:09:24
|
Revision: 693 http://modplug.svn.sourceforge.net/modplug/?rev=693&view=rev Author: saga-games Date: 2010-08-31 22:09:17 +0000 (Tue, 31 Aug 2010) Log Message: ----------- [Fix] IT Compatibility: Slightly changed envelope handling to look more like in Schism Tracker. This fixes a combination of Envelope Carry + Portamento as it can be found in "electric bunny" by Alpha C. [Mod] OpenMPT: Version is now 1.19.00.01 Modified Paths: -------------- trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2010-08-31 21:43:58 UTC (rev 692) +++ trunk/OpenMPT/mptrack/version.h 2010-08-31 22:09:17 UTC (rev 693) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 19 #define VER_MINOR 00 -#define VER_MINORMINOR 00 +#define VER_MINORMINOR 01 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-31 21:43:58 UTC (rev 692) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-08-31 22:09:17 UTC (rev 693) @@ -568,7 +568,8 @@ if (!(pIns->VolEnv.dwFlags & ENV_CARRY)) resetEnvelopes(pChn, ENV_RESET_VOL); if (!(pIns->PanEnv.dwFlags & ENV_CARRY)) resetEnvelopes(pChn, ENV_RESET_PAN); if (!(pIns->PitchEnv.dwFlags & ENV_CARRY)) resetEnvelopes(pChn, ENV_RESET_PITCH); - } else { + } else + { resetEnvelopes(pChn); } // IT Compatibility: Always reset autovibrato settings when there's an instrument number @@ -579,7 +580,7 @@ } } else if ((pIns) && (!(pIns->VolEnv.dwFlags & ENV_ENABLED))) { - resetEnvelopes(pChn); + resetEnvelopes(pChn, IsCompatibleMode(TRK_IMPULSETRACKER) ? ENV_RESET_VOL : ENV_RESET_ALL); } } // Invalid sample ? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2012-07-14 22:16:07
|
Revision: 1327 http://modplug.svn.sourceforge.net/modplug/?rev=1327&view=rev Author: saga-games Date: 2012-07-14 22:15:55 +0000 (Sat, 14 Jul 2012) Log Message: ----------- [Ref] Introduced a new class, FlagSet, which makes working with flag sets easier. To use a flag set with this class, it has to be created with the FLAGSET macro. Modified Paths: -------------- trunk/OpenMPT/common/misc_util.cpp trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectInfo.cpp trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/InputHandler.h trunk/OpenMPT/mptrack/MIDIMacroDialog.h trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/PatternClipboard.cpp trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/mptrack/test/test.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/LOAD_DMF.CPP trunk/OpenMPT/soundlib/Load_669.cpp trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_gdm.cpp trunk/OpenMPT/soundlib/Load_imf.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_psm.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Load_ult.cpp trunk/OpenMPT/soundlib/Load_wav.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/ModChannel.cpp trunk/OpenMPT/soundlib/ModChannel.h trunk/OpenMPT/soundlib/ModInstrument.cpp trunk/OpenMPT/soundlib/ModInstrument.h trunk/OpenMPT/soundlib/PlaybackEventer.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/XMTools.cpp trunk/OpenMPT/soundlib/load_j2b.cpp trunk/OpenMPT/soundlib/mod_specifications.h trunk/OpenMPT/soundlib/modcommand.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.h trunk/OpenMPT/soundlib/patternContainer.cpp Added Paths: ----------- trunk/OpenMPT/common/FlagSet.h Added: trunk/OpenMPT/common/FlagSet.h =================================================================== --- trunk/OpenMPT/common/FlagSet.h (rev 0) +++ trunk/OpenMPT/common/FlagSet.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -0,0 +1,166 @@ +/* + * FlagSet.h + * --------- + * Purpose: A flexible and typesafe flag set class. + * Notes : Mostly taken from http://stackoverflow.com/questions/4226960/type-safer-bitflags-in-c + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include <string> + +template <typename enum_t> +class FlagSet +{ +public: + // Default constructor (no flags set) + FlagSet() : flags(enum_t(0)) + { + + } + + // Value constructor + explicit FlagSet(enum_t value) : flags(value) + { + + } + + // Explicit conversion operator + operator enum_t() const + { + return flags; + } + + operator std::string() const + { + return to_string(); + } + + // Test if one or more flags are set. Returns true if at least one of the given flags is set. + bool operator[] (enum_t flag) const + { + return test(flag); + } + + // String representation of flag set + std::string to_string() const + { + std::string str(size(), '0'); + + for(size_t x = 0; x < size(); ++x) + { + str[size() - x - 1] = (flags & (1 << x) ? '1' : '0'); + } + + return str; + } + + // Set all flags. + FlagSet &set() + { + flags = ~enum_t(0); + return *this; + } + + // Set one or more flags. + FlagSet &set(enum_t flag) + { + flags = (flags | flag); + return *this; + } + + // Set or clear one or more flags. + FlagSet &set(enum_t flag, bool val) + { + flags = (val ? (flags | flag) : (flags & ~flag)); + return *this; + } + + // Clear or flags. + FlagSet &reset() + { + flags = enum_t(0); + return *this; + } + + // Clear one or more flags. + FlagSet &reset(enum_t flag) + { + flags &= ~flag; + return *this; + } + + // Toggle all flags. + FlagSet &flip() + { + flags = ~flags; + return *this; + } + + // Toggle one or more flags. + FlagSet &flip(enum_t flag) + { + flags ^= flag; + return *this; + } + + // Returns the size of the flag set in bits + size_t size() const + { + return sizeof(enum_t) * 8; + } + + // Test if one or more flags are set. Returns true if at least one of the given flags is set. + bool test(enum_t flag) const + { + return (flags & flag) > 0; + } + + // Test if any flag is set. + bool any() const + { + return flags > 0; + } + + // Test if no flags are set. + bool none() const + { + return flags == 0; + } + + FlagSet<enum_t> &operator = (const enum_t other) + { + flags = other; + return *this; + } + + FlagSet<enum_t> &operator &= (const enum_t other) + { + flags &= other; + return *this; + } + + FlagSet<enum_t> &operator |= (const enum_t other) + { + flags |= other; + return *this; + } + +private: + enum_t flags; + +}; + + +// Declaration of a typesafe flag set enum. +// Usage: FLAGSET(enumName) { foo = 1, bar = 2, ... } +#define FLAGSET(enum_t) \ + enum enum_t; \ + /* Declare typesafe logical operators for flag set */ \ + inline enum_t operator | (enum_t a, enum_t b) { return static_cast<enum_t>(+a | +b); } \ + inline enum_t operator & (enum_t a, enum_t b) { return static_cast<enum_t>(+a & +b); } \ + inline enum_t &operator &= (enum_t &a, enum_t b) { a = (a & b); return a; } \ + inline enum_t &operator |= (enum_t &a, enum_t b) { a = (a | b); return a; } \ + inline enum_t operator ~ (enum_t a) { return static_cast<enum_t>(~(+a)); } \ + enum enum_t Modified: trunk/OpenMPT/common/misc_util.cpp =================================================================== --- trunk/OpenMPT/common/misc_util.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/common/misc_util.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -47,7 +47,7 @@ { LPVOID lpMsgBuf; - FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, nErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Modified: trunk/OpenMPT/mptrack/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -250,7 +250,7 @@ name.Append(".AutoSave."); //append backup tag name.Append(timeStamp); //append timestamp name.Append("."); //append extension - if((pModDoc->GetSoundFile()->m_dwSongFlags & SONG_ITPROJECT) != 0) + if(pModDoc->GetSoundFile()->m_SongFlags[SONG_ITPROJECT]) { name.Append("itp"); } else @@ -289,7 +289,7 @@ break; case MOD_TYPE_IT: - success = (pSndFile->m_dwSongFlags & SONG_ITPROJECT) ? + success = pSndFile->m_SongFlags[SONG_ITPROJECT] ? pSndFile->SaveITProject(fileName) : pSndFile->SaveIT(fileName); break; Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -831,8 +831,8 @@ switch(currentTab) { case 0: - if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_MUTE) FillRect(pDC.hdc,&btn,red); - else if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_SOLO) FillRect(pDC.hdc,&btn,green); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_MUTE]) FillRect(pDC.hdc,&btn,red); + else if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_SOLO]) FillRect(pDC.hdc,&btn,green); else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 1: @@ -844,7 +844,7 @@ else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 2: - if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_NOFX) FillRect(pDC.hdc,&btn,red); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_NOFX]) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,green); break; case 3: Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -311,7 +311,7 @@ if ((!wParam) && (pSndFile->m_nInstruments > 0)) { - nIns = pModDoc->FindSampleParent(nIns); + nIns = pModDoc->FindSampleParent(static_cast<SAMPLEINDEX>(nIns)); if(nIns == INSTRUMENTINDEX_INVALID) { nIns = 0; Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -542,7 +542,7 @@ EndWaitCursor(); - if(unusedInsSamples && !((pSndFile->GetType() == MOD_TYPE_IT) && (pSndFile->m_dwSongFlags & SONG_ITPROJECT))) + if(unusedInsSamples && !((pSndFile->GetType() == MOD_TYPE_IT) && pSndFile->m_SongFlags[SONG_ITPROJECT])) { // We don't remove an instrument's unused samples in an ITP. wsprintf(s, "OpenMPT detected %d sample%s referenced by an instrument,\n" @@ -722,7 +722,7 @@ if (!pSndFile->GetNumInstruments()) return false; deleteInstrumentSamples removeSamples = doNoDeleteAssociatedSamples; - if (!((pSndFile->GetType() == MOD_TYPE_IT) && (pSndFile->m_dwSongFlags & SONG_ITPROJECT))) // Never remove an instrument's samples in ITP. + if(!pSndFile->m_SongFlags[SONG_ITPROJECT]) // Never remove an instrument's samples in ITP. { if(Reporting::Confirm("Remove samples associated with an instrument if they are unused?", "Removing unused instruments") == cnfYes) { @@ -902,7 +902,7 @@ m_pModDoc->ChangeModType(MOD_TYPE_IT); pSndFile->m_nMixLevels = mixLevels_compatible; pSndFile->m_nTempoMode = tempo_mode_classic; - pSndFile->m_dwSongFlags = SONG_LINEARSLIDES; + pSndFile->m_SongFlags = SONG_LINEARSLIDES; pSndFile->m_MidiCfg.Reset(); // Global vars @@ -919,7 +919,7 @@ pSndFile->Instruments[i]->nFadeOut = 256; pSndFile->Instruments[i]->nGlobalVol = 64; pSndFile->Instruments[i]->nPan = 128; - pSndFile->Instruments[i]->dwFlags &= ~INS_SETPANNING; + pSndFile->Instruments[i]->dwFlags.reset(INS_SETPANNING); pSndFile->Instruments[i]->nMixPlug = 0; pSndFile->Instruments[i]->nVolSwing = 0; Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -260,7 +260,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" // case MOD_TYPE_IT: pszModType = "IT (Impulse Tracker)"; break; - case MOD_TYPE_IT: pszModType = m_pSndFile->m_dwSongFlags & SONG_ITPROJECT ? "ITP (IT Project)" : "IT (Impulse Tracker)"; break; + case MOD_TYPE_IT: pszModType = m_pSndFile->m_SongFlags[SONG_ITPROJECT] ? "ITP (IT Project)" : "IT (Impulse Tracker)"; break; case MOD_TYPE_MPT: pszModType = "MPTM (OpenMPT)"; break; // -! NEW_FEATURE#0023 Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1257,7 +1257,7 @@ SetDlgItemInt(IDC_EDIT8, pIns->nGlobalVol); // Panning SetDlgItemInt(IDC_EDIT9, (m_pModDoc->GetModType() & MOD_TYPE_IT) ? (pIns->nPan / 4) : pIns->nPan); - m_CheckPanning.SetCheck((pIns->dwFlags & INS_SETPANNING) ? TRUE : FALSE); + m_CheckPanning.SetCheck(pIns->dwFlags[INS_SETPANNING] ? TRUE : FALSE); // Midi if (pIns->nMidiProgram>0 && pIns->nMidiProgram<=128) SetDlgItemInt(IDC_EDIT10, pIns->nMidiProgram); @@ -1927,10 +1927,9 @@ ModInstrument *pIns = m_pSndFile->Instruments[m_nInstrument]; if ((!IsLocked()) && (pIns)) { - const BOOL b = m_CheckPanning.GetCheck(); + const bool b = m_CheckPanning.GetCheck() != BST_UNCHECKED; - if (b) pIns->dwFlags |= INS_SETPANNING; - else pIns->dwFlags &= ~INS_SETPANNING; + pIns->dwFlags.set(INS_SETPANNING, b); if(b && m_pSndFile->GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT)) { Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -424,7 +424,7 @@ { SendViewMessage(VIEWMSG_FOLLOWSONG, IsDlgButtonChecked(IDC_PATTERN_FOLLOWSONG)); if (m_pSndFile) { - SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_dwSongFlags)); + SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_SongFlags)); } OnSpacingChanged(); SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); @@ -488,7 +488,7 @@ if (lParam == -1) { //Toggle loop state - setLoop = !(m_pSndFile->m_dwSongFlags&SONG_PATTERNLOOP); + setLoop = !m_pSndFile->m_SongFlags[SONG_PATTERNLOOP]; } else { setLoop = (lParam != 0); @@ -496,11 +496,11 @@ if (setLoop) { - m_pSndFile->m_dwSongFlags |= SONG_PATTERNLOOP; + m_pSndFile->m_SongFlags.set(SONG_PATTERNLOOP); CheckDlgButton(IDC_PATTERN_LOOP, BST_CHECKED); } else { - m_pSndFile->m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_pSndFile->m_SongFlags.reset(SONG_PATTERNLOOP); CheckDlgButton(IDC_PATTERN_LOOP, BST_UNCHECKED); } @@ -1158,19 +1158,19 @@ m_pSndFile->m_MidiCfg = dlg.m_MidiCfg; if (dlg.m_bEmbed) { - m_pSndFile->m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_pSndFile->m_SongFlags.set(SONG_EMBEDMIDICFG); m_pModDoc->SetModified(); } else { - if (m_pSndFile->m_dwSongFlags & SONG_EMBEDMIDICFG) m_pModDoc->SetModified(); - m_pSndFile->m_dwSongFlags &= ~SONG_EMBEDMIDICFG; + if (m_pSndFile->m_SongFlags[SONG_EMBEDMIDICFG]) m_pModDoc->SetModified(); + m_pSndFile->m_SongFlags.reset(SONG_EMBEDMIDICFG); // If this macro is not the default IT macro, display a warning. if(!m_pSndFile->m_MidiCfg.IsMacroDefaultSetupUsed()) { if(Reporting::Confirm(_T("You have chosen not to embed MIDI macros. However, the current macro configuration differs from the default macro configuration that is assumed when loading a file that has no macros embedded. This can result in data loss and broken playback.\nWould you like to embed MIDI macros now?")) == cnfYes) { - m_pSndFile->m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_pSndFile->m_SongFlags.set(SONG_EMBEDMIDICFG); m_pModDoc->SetModified(); } } Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -115,7 +115,7 @@ COrderList::COrderList() //---------------------- { - m_hFont = NULL; + m_hFont = nullptr; m_pParent = nullptr; m_cxFont = m_cyFont = 0; m_pModDoc = nullptr; @@ -311,7 +311,7 @@ if ((n < pSndFile->Patterns.Size()) && (pSndFile->Patterns[n]) && !bShiftClick) { bool bIsPlaying = (pMainFrm->GetModPlaying() == m_pModDoc); - if ((bIsPlaying) && (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP)) + if(bIsPlaying && pSndFile->m_SongFlags[SONG_PATTERNLOOP]) { CriticalSection cs; // update channel parameters and play time @@ -326,14 +326,14 @@ { CriticalSection cs; - DWORD dwPaused = pSndFile->m_dwSongFlags & (SONG_PAUSED|SONG_STEP|SONG_PATTERNLOOP); + SongFlags pausedFlags = pSndFile->m_SongFlags & (SONG_PAUSED | SONG_STEP | SONG_PATTERNLOOP); // update channel parameters and play time m_pModDoc->SetElapsedTime(m_nScrollPos, 0); pSndFile->m_nCurrentOrder = m_nScrollPos; pSndFile->SetCurrentOrder(m_nScrollPos); - pSndFile->m_dwSongFlags |= dwPaused; + pSndFile->m_SongFlags.set(pausedFlags); if (bIsPlaying) pMainFrm->ResetNotificationBuffer(); } Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -583,7 +583,7 @@ // ((m_bInItemRect) && ((m_nDragItem & DRAGITEM_MASK) == DRAGITEM_CHNHEADER) && ((m_nDragItem & DRAGITEM_VALUEMASK) == ncolhdr)) ? TRUE : FALSE, DT_CENTER); // rect.bottom = rect.top + COLHDR_HEIGHT; DrawButtonRect(hdc, &rect, s, - (pSndFile->ChnSettings[ncolhdr].dwFlags & CHN_MUTE) ? TRUE : FALSE, + pSndFile->ChnSettings[ncolhdr].dwFlags[CHN_MUTE] ? TRUE : FALSE, ((m_bInItemRect) && ((m_nDragItem & DRAGITEM_MASK) == DRAGITEM_CHNHEADER) && ((m_nDragItem & DRAGITEM_VALUEMASK) == ncolhdr)) ? TRUE : FALSE, pModDoc->IsChannelRecord(static_cast<CHANNELINDEX>(ncolhdr)) ? DT_RIGHT : DT_CENTER); @@ -959,11 +959,11 @@ { tx_col = MODCOLOR_NOTE; - if((pSndFile->m_dwSongFlags & SONG_PT1XMODE) && (m->note < NOTE_MIDDLEC - 12 || m->note >= NOTE_MIDDLEC + 2 * 12)) + if(pSndFile->m_SongFlags[SONG_PT1XMODE] && (m->note < NOTE_MIDDLEC - 12 || m->note >= NOTE_MIDDLEC + 2 * 12)) { // MOD "ProTracker 1.x" flag: Highlight notes that are not supported by Amiga trackers. tx_col = MODCOLOR_DODGY_COMMANDS; - } else if((pSndFile->m_dwSongFlags & SONG_AMIGALIMITS) && m->instr != 0 && m->instr <= pSndFile->GetNumSamples()) + } else if(pSndFile->m_SongFlags[SONG_AMIGALIMITS] && m->instr != 0 && m->instr <= pSndFile->GetNumSamples()) { // S3M "Force Amiga Limits": Highlight notes that exceed the Amiga's frequency range. UINT period = pSndFile->GetPeriodFromNote(m->note, 0, pSndFile->GetSample(m->instr).nC5Speed); @@ -1695,14 +1695,14 @@ //xtraInfo.Format("Chan: %d; macro: %X; cutoff: %X; reso: %X; pan: %X", xtraInfo.Format("Chn:%d; Vol:%X; Mac:%X; Cut:%X%s; Res:%X; Pan:%X%s", - nChn+1, - pSndFile->Chn[nChn].nGlobalVol, - pSndFile->Chn[nChn].nActiveMacro, - pSndFile->Chn[nChn].nCutOff, - (pSndFile->Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", - pSndFile->Chn[nChn].nResonance, - pSndFile->Chn[nChn].nPan, - (pSndFile->Chn[nChn].dwFlags & CHN_SURROUND) ? "-S" : ""); + nChn + 1, + pSndFile->Chn[nChn].nGlobalVol, + pSndFile->Chn[nChn].nActiveMacro, + pSndFile->Chn[nChn].nCutOff, + (pSndFile->Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", + pSndFile->Chn[nChn].nResonance, + pSndFile->Chn[nChn].nPan, + pSndFile->Chn[nChn].dwFlags[CHN_SURROUND] ? "-S" : ""); pMainFrm->SetXInfoText(xtraInfo); } Modified: trunk/OpenMPT/mptrack/EffectInfo.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectInfo.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/EffectInfo.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -648,13 +648,12 @@ case CMD_TREMOR: if(param) { - BYTE ontime = (BYTE)(param >> 4), offtime = (BYTE)(param & 0x0F); - if(sndFile.m_dwSongFlags & SONG_ITOLDEFFECTS) + uint8 ontime = (uint8)(param >> 4), offtime = (uint8)(param & 0x0F); + if(sndFile.m_SongFlags[SONG_ITOLDEFFECTS] || (sndFile.GetType() & MOD_TYPE_XM)) { ontime++; offtime++; - } - else + } else { if(ontime == 0) ontime = 1; if(offtime == 0) offtime = 1; Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -117,7 +117,7 @@ CatchModifierChange(wParam, keyEventType, scancode); } - if(!InterceptSpecialKeys( wParam, lParam ) && !Bypass()) + if(!InterceptSpecialKeys( wParam, lParam ) && !IsBypassed()) { // only execute command when the input handler is not locked // and the input is not a consequence of special key interception. @@ -444,8 +444,8 @@ } -bool CInputHandler::Bypass() -//-------------------------- +bool CInputHandler::IsBypassed() +//------------------------------ { return m_bBypass; } @@ -556,7 +556,7 @@ default: return "Unknown Item."; } - s += activeCommandSet->GetKeyTextFromCommand(c, 0); + s += GetKeyTextFromCommand(c); return s; } Modified: trunk/OpenMPT/mptrack/InputHandler.h =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/InputHandler.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -77,7 +77,7 @@ bool SelectionPressed(); bool CtrlPressed(); bool AltPressed(); - bool Bypass(); + bool IsBypassed(); void Bypass(bool); WORD GetModifierMask(); void SetModifierMask(WORD mask); Modified: trunk/OpenMPT/mptrack/MIDIMacroDialog.h =================================================================== --- trunk/OpenMPT/mptrack/MIDIMacroDialog.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MIDIMacroDialog.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -20,10 +20,7 @@ //=================================== { public: - CMidiMacroSetup(CSoundFile &sndFile, CWnd *parent = NULL) : CDialog(IDD_MIDIMACRO, parent), m_SndFile(sndFile), m_MidiCfg(sndFile.m_MidiCfg) - { - m_bEmbed = (m_SndFile.m_dwSongFlags & SONG_EMBEDMIDICFG) != 0; - } + CMidiMacroSetup(CSoundFile &sndFile, CWnd *parent = NULL) : CDialog(IDD_MIDIMACRO, parent), m_SndFile(sndFile), m_MidiCfg(sndFile.m_MidiCfg), m_bEmbed(m_SndFile.m_SongFlags[SONG_EMBEDMIDICFG]) { } bool m_bEmbed; MIDIMacroConfig m_MidiCfg; Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -483,21 +483,24 @@ } // Check for extended filter range flag - if(m_SndFile.m_dwSongFlags & SONG_EXFILTERRANGE) + if(m_SndFile.m_SongFlags[SONG_EXFILTERRANGE]) { AddToLog("Found extended filter range\n"); foundHacks = true; if(autofix) - m_SndFile.m_dwSongFlags &= ~SONG_EXFILTERRANGE; + m_SndFile.m_SongFlags.reset(SONG_EXFILTERRANGE); } // Embedded MIDI configuration in XM files - if((m_SndFile.m_dwSongFlags & SONG_EMBEDMIDICFG) != 0 && m_SndFile.GetType() == MOD_TYPE_XM) + if(m_SndFile.m_SongFlags[SONG_EMBEDMIDICFG] != 0 && m_SndFile.GetType() == MOD_TYPE_XM) { AddToLog("Found embedded MIDI macros\n"); foundHacks = true; if(autofix) - m_SndFile.m_dwSongFlags &= ~SONG_EMBEDMIDICFG; + { + m_SndFile.m_MidiCfg.Reset(); + m_SndFile.m_SongFlags.reset(SONG_EMBEDMIDICFG); + } } // Player flags Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1089,9 +1089,9 @@ const ModChannelEnvInfo &chnEnv = pChn->GetEnvelope(notifyEnv); - if (chnEnv.flags & ENV_ENABLED) + if(chnEnv.flags[ENV_ENABLED]) { - DWORD pos = chnEnv.nEnvPosition; + uint32 pos = chnEnv.nEnvPosition; if(m_pSndFile->IsCompatibleMode(TRK_IMPULSETRACKER | TRK_FASTTRACKER2)) { // Impulse Tracker / Fasttracker 2 envelope handling (see SndMix.cpp for details) @@ -1318,7 +1318,7 @@ CSoundFile *pSndFile = pModDoc->GetSoundFile(); if ((!pSndFile) || (!pSndFile->GetType())) return FALSE; const bool bPaused = pSndFile->IsPaused(); - const bool bPatLoop = (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP) != 0; + const bool bPatLoop = pSndFile->m_SongFlags[SONG_PATTERNLOOP]; pSndFile->ResetChannels(); // Select correct bidi loop mode when playing a module. pSndFile->SetupITBidiMode(); @@ -1350,7 +1350,7 @@ { if (bPaused) { - pSndFile->m_dwSongFlags |= SONG_PAUSED; + pSndFile->m_SongFlags.set(SONG_PAUSED); } else { pModDoc->SetPause(FALSE); @@ -1405,7 +1405,7 @@ //m_pSndFile->LoopPattern(-1); //Commented above line - why loop should be disabled when pausing? - m_pSndFile->m_dwSongFlags &= ~SONG_PAUSED; + m_pSndFile->m_SongFlags.reset(SONG_PAUSED); if (m_pSndFile == &m_WaveFile) { m_pSndFile = NULL; Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -191,7 +191,7 @@ #define PATTERN_MIDIRECORD 0x100000 // MIDI Record on by default #define PATTERN_NOCLOSEDIALOG 0x200000 // Don't use OpenMPT's custom close dialog with a list of saved files when closing the main window #define PATTERN_DBLCLICKSELECT 0x400000 // Double-clicking pattern selects whole channel -#define PATTERN_OLDCTXMENUSTYLE 0x800000 // mpt 1.16 pattern context menu style +#define PATTERN_OLDCTXMENUSTYLE 0x800000 // Hide pattern context menu entries instead of greying them out. #define PATTERN_SYNCMUTE 0x1000000 // maintain sample sync on mute #define PATTERN_AUTODELAY 0x2000000 // automatically insert delay commands in pattern when entering notes #define PATTERN_NOTEFADE 0x4000000 // alt. note fade behaviour when entering notes Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -643,7 +643,7 @@ CSoundFile::gdwMixingFreq = m_pWaveFormat->nSamplesPerSec; CSoundFile::gnBitsPerSample = m_pWaveFormat->wBitsPerSample; CSoundFile::gnChannels = m_pWaveFormat->nChannels; - m_pSndFile->m_dwSongFlags &= ~(SONG_PAUSED | SONG_STEP); + m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); // -> CODE#0024 // -> DESC="wav export update" // if ((m_bNormalize) && (m_pWaveFormat->wBitsPerSample <= 16)) @@ -949,7 +949,7 @@ BOOL CDoAcmConvert::OnInitDialog() -//--------------------------------- +//-------------------------------- { CDialog::OnInitDialog(); SetWindowText("Encoding File..."); @@ -1059,7 +1059,7 @@ m_pSndFile->ResetChannels(); CSoundFile::InitPlayer(TRUE); CSoundFile::gdwSoundSetup |= SNDMIX_DIRECTTODISK; - m_pSndFile->m_dwSongFlags &= ~(SONG_PAUSED | SONG_STEP); + m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); m_pSndFile->visitedSongRows.Initialize(true); @@ -1194,37 +1194,3 @@ SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); EndDialog(retval); } - - -/* - -TEXT("IARL"), TEXT("Archival Location"), TEXT("Indicates where the subject of the file is archived."), -TEXT("IART"), TEXT("Artist"), TEXT("Lists the artist of the original subject of the file. For example, \"Michaelangelo.\""), -TEXT("ICMS"), TEXT("Commissioned"), TEXT("Lists the name of the person or organization that commissioned the subject of the file." - " For example, \"Pope Julian II.\""), -TEXT("ICMT"), TEXT("Comments"), TEXT("Provides general comments about the file or the subject of the file. If the comment is " - "several sentences long, end each sentence with a period. Do not include newline characters."), -TEXT("ICOP"), TEXT("Copyright"), TEXT("Records the copyright information for the file. For example, \"Copyright Encyclopedia " - "International 1991.\" If there are multiple copyrights, separate them by a semicolon followed " - "by a space."), -TEXT("ICRD"), TEXT("Creation date"), TEXT("Specifies the date the subject of the file was created. List dates in year-month-day " - "format, padding one-digit months and days with a zero on the left. For example, " - "'1553-05-03' for May 3, 1553."), -TEXT("IENG"), TEXT("Engineer"), TEXT("Stores the name of the engineer who worked on the file. If there are multiple engineers, " - "separate the names by a semicolon and a blank. For example, \"Smith, John; Adams, Joe.\""), -TEXT("IGNR"), TEXT("Genre"), TEXT("Describes the original work, such as, \"landscape,\" \"portrait,\" \"still life,\" etc."), -TEXT("IKEY"), TEXT("Keywords"), TEXT("Provides a list of keywords that refer to the file or subject of the file. Separate " - "multiple keywords with a semicolon and a blank. For example, \"Seattle; aerial view; scenery.\""), -TEXT("IMED"), TEXT("Medium"), TEXT("Describes the original subject of the file, such as, \"computer image,\" \"drawing,\"" - "\"lithograph,\" and so forth."), -TEXT("INAM"), TEXT("Name"), TEXT("Stores the title of the subject of the file, such as, \"Seattle From Above.\""), -TEXT("IPRD"), TEXT("Product"), TEXT("Specifies the name of the title the file was originally intended for, such as \"Encyclopedia" - " of Pacific Northwest Geography.\""), -TEXT("ISBJ"), TEXT("Subject"), TEXT("Describes the contents of the file, such as \"Aerial view of Seattle.\""), -TEXT("ISFT"), TEXT("Software"), TEXT("Identifies the name of the software package used to create the file, such as " - "\"Microsoft WaveEdit.\""), -TEXT("ISRC"), TEXT("Source"), TEXT("Identifies the name of the person or organization who supplied the original subject of the file." - " For example, \"Trey Research.\""), -TEXT("ITCH"), TEXT("Technician"), TEXT("Identifies the technician who digitized the subject file. For example, \"Smith, John.\""), - -*/ Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -421,10 +421,10 @@ { if(newTypeIsMOD_XM || newTypeIsS3M) { - if(m_SndFile.ChnSettings[nChn].nVolume != 64 || (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SURROUND)) + if(m_SndFile.ChnSettings[nChn].nVolume != 64 || m_SndFile.ChnSettings[nChn].dwFlags[CHN_SURROUND]) { m_SndFile.ChnSettings[nChn].nVolume = 64; - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; + m_SndFile.ChnSettings[nChn].dwFlags.reset(CHN_SURROUND); CHANGEMODTYPE_WARNING(wChannelVolSurround); } } @@ -461,12 +461,12 @@ m_SndFile.ChangeModTypeTo(nNewType); // Song flags - if(!(CSoundFile::GetModSpecifications(nNewType).songFlags & SONG_LINEARSLIDES) && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) + if(!(CSoundFile::GetModSpecifications(nNewType).songFlags & SONG_LINEARSLIDES) && m_SndFile.m_SongFlags[SONG_LINEARSLIDES]) { CHANGEMODTYPE_WARNING(wLinearSlides); } - if(oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATGXX; - m_SndFile.m_dwSongFlags &= SONG_PLAY_FLAGS | CSoundFile::GetModSpecifications(nNewType).songFlags; + if(oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_SongFlags.set(SONG_ITCOMPATGXX); + m_SndFile.m_SongFlags &= (CSoundFile::GetModSpecifications(nNewType).songFlags | SONG_PLAY_FLAGS); // Adjust mix levels if(newTypeIsMOD || newTypeIsS3M) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -48,7 +48,7 @@ case MOD_TYPE_MOD: return FileFilterMOD; case MOD_TYPE_XM: return FileFilterXM; case MOD_TYPE_S3M: return FileFilterS3M; - case MOD_TYPE_IT: return (sndFile.m_dwSongFlags & SONG_ITPROJECT) ? FileFilterITP : FileFilterIT; + case MOD_TYPE_IT: return (sndFile.m_SongFlags[SONG_ITPROJECT] ? FileFilterITP : FileFilterIT); case MOD_TYPE_MPT: return FileFilterMPT; default: return FileFilterNone; } @@ -175,17 +175,17 @@ if(CTrackApp::IsProject()) { - m_SndFile.m_dwSongFlags |= SONG_ITPROJECT; + m_SndFile.m_SongFlags.set(SONG_ITPROJECT); } theApp.GetDefaultMidiMacro(&m_SndFile.m_MidiCfg); if (m_SndFile.m_nType & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) { - m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; + m_SndFile.m_SongFlags.set(SONG_LINEARSLIDES); if(!m_SndFile.m_MidiCfg.IsMacroDefaultSetupUsed()) { - m_SndFile.m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_SndFile.m_SongFlags.set(SONG_EMBEDMIDICFG); } } @@ -452,7 +452,7 @@ case MOD_TYPE_MOD: bOk = m_SndFile.SaveMod(lpszPathName); break; case MOD_TYPE_S3M: bOk = m_SndFile.SaveS3M(lpszPathName); break; case MOD_TYPE_XM: bOk = m_SndFile.SaveXM(lpszPathName); break; - case MOD_TYPE_IT: bOk = (m_SndFile.m_dwSongFlags & SONG_ITPROJECT) ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName); break; + case MOD_TYPE_IT: bOk = (m_SndFile.m_SongFlags[SONG_ITPROJECT] ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName)); break; case MOD_TYPE_MPT: bOk = m_SndFile.SaveIT(lpszPathName); break; } EndWaitCursor(); @@ -473,7 +473,7 @@ } } else { - if(type == MOD_TYPE_IT && m_SndFile.m_dwSongFlags & SONG_ITPROJECT) + if(type == MOD_TYPE_IT && m_SndFile.m_SongFlags[SONG_ITPROJECT]) Reporting::Error(_T("ITP projects need to have a path set for each instrument...")); else ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); @@ -487,7 +487,7 @@ BOOL CModDoc::SaveModified() //-------------------------- { - if((m_SndFile.m_nType & MOD_TYPE_IT) && m_SndFile.m_dwSongFlags & SONG_ITPROJECT && !(m_SndFile.m_dwSongFlags & SONG_ITPEMBEDIH)) + if((m_SndFile.GetType() & MOD_TYPE_IT) && m_SndFile.m_SongFlags[SONG_ITPROJECT] && !m_SndFile.m_SongFlags[SONG_ITPEMBEDIH]) { bool unsavedInstrument = false; @@ -572,7 +572,7 @@ // lpszDefExt = "it"; // lpszFilter = "Impulse Tracker Modules (*.it)|*.it||"; // strcpy(fext, ".it"); - if(m_SndFile.m_dwSongFlags & SONG_ITPROJECT) + if(m_SndFile.m_SongFlags[SONG_ITPROJECT]) { // Special case... defaultExtension = "itp"; @@ -717,7 +717,7 @@ for (CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) { - m_SndFile.ChnSettings[nChn].dwFlags = 0; + m_SndFile.ChnSettings[nChn].dwFlags.reset(); m_SndFile.ChnSettings[nChn].nVolume = 64; m_SndFile.ChnSettings[nChn].nPan = 128; m_SndFile.Chn[nChn].nGlobalVol = 64; @@ -744,7 +744,7 @@ } if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM)) { - m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; + m_SndFile.m_SongFlags.set(SONG_LINEARSLIDES); } } m_SndFile.SetCurrentPos(0); @@ -910,7 +910,7 @@ { if ((i < GetNumChannels()) || (m_SndFile.Chn[i].nMasterChn)) { - m_SndFile.Chn[i].dwFlags |= CHN_KEYOFF | CHN_NOTEFADE; + m_SndFile.Chn[i].dwFlags.set(CHN_KEYOFF | CHN_NOTEFADE); m_SndFile.Chn[i].nFadeOutVol = 0; } } @@ -918,7 +918,7 @@ if (pMainFrm->GetModPlaying() != this) { - m_SndFile.m_dwSongFlags |= SONG_PAUSED; + m_SndFile.m_SongFlags.set(SONG_PAUSED); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } CMainFrame::EnableLowLatencyMode(); @@ -936,7 +936,7 @@ // reset channel properties; in theory the chan is completely unused anyway. pChn->nPos = pChn->nPosLo = pChn->nLength = 0; pChn->dwFlags &= CHN_SAMPLEFLAGS; - pChn->dwFlags &= ~(CHN_MUTE); + pChn->dwFlags.reset(CHN_MUTE); pChn->nGlobalVol = 64; pChn->nInsVol = 64; pChn->nPan = 128; @@ -966,7 +966,7 @@ pChn->nPos = pChn->nPosLo = pChn->nLength = 0; pChn->nLoopStart = sample.nLoopStart; pChn->nLoopEnd = sample.nLoopEnd; - pChn->dwFlags = sample.uFlags & (CHN_SAMPLEFLAGS & ~CHN_MUTE); + pChn->dwFlags = static_cast<ChannelFlags>(sample.uFlags) & (CHN_SAMPLEFLAGS & ~CHN_MUTE); pChn->nPan = 128; if (sample.uFlags & CHN_PANNING) pChn->nPan = sample.nPan; pChn->nInsVol = sample.nGlobalVol; @@ -989,13 +989,7 @@ } // Handle extra-loud flag - if ((!(CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_NOEXTRALOUD)) && (nsmp)) - { - pChn->dwFlags |= CHN_EXTRALOUD; - } else - { - pChn->dwFlags &= ~CHN_EXTRALOUD; - } + pChn->dwFlags.set(CHN_EXTRALOUD, !(CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_NOEXTRALOUD) && nsmp); // Handle custom start position if(sampleOffset > 0 && pChn->pModSample) @@ -1038,7 +1032,7 @@ { CriticalSection cs; m_SndFile.NoteChange(nChn, note); - if (pause) m_SndFile.m_dwSongFlags |= SONG_PAUSED; + if (pause) m_SndFile.m_SongFlags.set(SONG_PAUSED); } return nChn; } @@ -1074,18 +1068,18 @@ } //end rewbs.vstiLive - const DWORD mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); + const ChannelFlags mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); ModChannel *pChn = &m_SndFile.Chn[m_SndFile.m_nChannels]; for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { // Fade all channels > m_nChannels which are playing this note. // Could conflict with NNAs. - if ((!(pChn->dwFlags & mask)) && (pChn->nLength) && ((note == pChn->nNewNote) || (!note))) + if(!pChn->dwFlags[mask] && pChn->nLength && (note == pChn->nNewNote || !note)) { m_SndFile.KeyOff(i); - if (!m_SndFile.m_nInstruments) pChn->dwFlags &= ~CHN_LOOP; - if (fade) pChn->dwFlags |= CHN_NOTEFADE; + if (!m_SndFile.m_nInstruments) pChn->dwFlags.reset(CHN_LOOP); + if (fade) pChn->dwFlags.set(CHN_NOTEFADE); if (note) break; } } @@ -1102,10 +1096,10 @@ ModChannel *pChn = &m_SndFile.Chn[m_SndFile.GetNumChannels()]; for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { - if ((pChn->nLength) && (!(pChn->dwFlags & (CHN_NOTEFADE|CHN_KEYOFF|CHN_MUTE))) - && ((note == pChn->nNewNote) || (!note)) - && ((pChn->pModSample == &m_SndFile.GetSample(nsmp)) || (!nsmp)) - && ((pChn->pModInstrument == m_SndFile.Instruments[nins]) || (!nins))) return true; + if(pChn->nLength != 0 && !pChn->dwFlags[CHN_NOTEFADE | CHN_KEYOFF| CHN_MUTE] + && (note == pChn->nNewNote || !note) + && (pChn->pModSample == &m_SndFile.GetSample(nsmp) || !nsmp) + && (pChn->pModInstrument == m_SndFile.Instruments[nins] || !nins)) return true; } return false; } @@ -1120,19 +1114,13 @@ } // Mark channel as muted in channel settings - if (doMute) - { - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_MUTE; - } else - { - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_MUTE; - } + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_MUTE, doMute); const bool success = UpdateChannelMuteStatus(nChn); if(success) { //Mark IT/MPTM/S3M as modified - if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_S3M)) + if(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_S3M)) { CMainFrame::GetMainFrame()->ThreadSafeSetModified(this); } @@ -1145,19 +1133,19 @@ bool CModDoc::UpdateChannelMuteStatus(CHANNELINDEX nChn) //------------------------------------------------------ { - const DWORD muteType = (CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_SYNCMUTE) ? CHN_SYNCMUTE : CHN_MUTE; + const ChannelFlags muteType = (CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_SYNCMUTE) ? CHN_SYNCMUTE : CHN_MUTE; if (nChn >= m_SndFile.GetNumChannels()) { return false; } - const bool doMute = (m_SndFile.ChnSettings[nChn].dwFlags & CHN_MUTE) != 0; + const bool doMute = m_SndFile.ChnSettings[nChn].dwFlags[CHN_MUTE]; // Mute pattern channel if (doMute) { - m_SndFile.Chn[nChn].dwFlags |= muteType; + m_SndFile.Chn[nChn].dwFlags.set(muteType); // Kill VSTi notes on muted channel. PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PrioritiseInstrument, EvenIfMuted); if ((nPlug) && (nPlug<=MAX_MIXPLUGINS)) @@ -1172,7 +1160,7 @@ } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[nChn].dwFlags &= ~(CHN_SYNCMUTE|CHN_MUTE); + m_SndFile.Chn[nChn].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } // Mute any NNA'd channels @@ -1182,11 +1170,11 @@ { if (doMute) { - m_SndFile.Chn[i].dwFlags |= muteType; + m_SndFile.Chn[i].dwFlags.set(muteType); } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[i].dwFlags &= ~(CHN_SYNCMUTE|CHN_MUTE); + m_SndFile.Chn[i].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } } } @@ -1200,16 +1188,15 @@ //-------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SOLO) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_SOLO]; } bool CModDoc::SoloChannel(CHANNELINDEX nChn, bool bSolo) //------------------------------------------------------ { if (nChn >= m_SndFile.m_nChannels) return false; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (bSolo) m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SOLO; - else m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SOLO; + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_SOLO, bSolo); return true; } // -! NEW_FEATURE#0012 @@ -1218,25 +1205,22 @@ // -> CODE#0015 // -> DESC="channels management dlg" bool CModDoc::IsChannelNoFx(CHANNELINDEX nChn) const -//------------------------------------------ +//-------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_NOFX) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_NOFX]; } + bool CModDoc::NoFxChannel(CHANNELINDEX nChn, bool bNoFx, bool updateMix) //---------------------------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return false; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (bNoFx){ - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_NOFX; - if(updateMix) m_SndFile.Chn[nChn].dwFlags |= CHN_NOFX; - } - else{ - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_NOFX; - if(updateMix) m_SndFile.Chn[nChn].dwFlags &= ~CHN_NOFX; - } + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_NOFX, bNoFx); + if(updateMix) m_SndFile.Chn[nChn].dwFlags.set(CHN_NOFX, bNoFx); + return true; } @@ -1320,53 +1304,49 @@ //-------------------------------------------------------------- { if ((nInstr < 1) || (nInstr > m_SndFile.GetNumInstruments()) || (!m_SndFile.Instruments[nInstr])) return false; - if (bMute) m_SndFile.Instruments[nInstr]->dwFlags |= INS_MUTE; - else m_SndFile.Instruments[nInstr]->dwFlags &= ~INS_MUTE; + m_SndFile.Instruments[nInstr]->dwFlags.set(INS_MUTE, bMute); return true; } -bool CModDoc::SurroundChannel(CHANNELINDEX nChn, bool bSurround) +bool CModDoc::SurroundChannel(CHANNELINDEX nChn, bool surround) //-------------------------------------------------------------- { - DWORD d = (bSurround ? CHN_SURROUND : 0); - - if (nChn >= m_SndFile.GetNumChannels()) return false; - if (!(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT))) d = 0; - if (d != (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SURROUND)) + if(nChn >= m_SndFile.GetNumChannels()) return false; + + if(!(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT))) surround = false; + + if(surround != m_SndFile.ChnSettings[nChn].dwFlags[CHN_SURROUND]) { - if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (d) + // Update channel configuration + if(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_SURROUND, surround); + if(surround) { - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SURROUND; m_SndFile.ChnSettings[nChn].nPan = 128; - } else - { - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; } - } - if (d) + + // Update playing channel + m_SndFile.Chn[nChn].dwFlags.set(CHN_SURROUND, surround); + if(surround) { - m_SndFile.Chn[nChn].dwFlags |= CHN_SURROUND; m_SndFile.Chn[nChn].nPan = 128; - } else - { - m_SndFile.Chn[nChn].dwFlags &= ~CHN_SURROUND; } return true; } -bool CModDoc::SetChannelGlobalVolume(CHANNELINDEX nChn, UINT nVolume) -//------------------------------------------------------------------- +bool CModDoc::SetChannelGlobalVolume(CHANNELINDEX nChn, uint16 nVolume) +//--------------------------------------------------------------------- { bool bOk = false; if ((nChn >= m_SndFile.GetNumChannels()) || (nVolume > 64)) return false; if (m_SndFile.ChnSettings[nChn].nVolume != nVolume) { m_SndFile.ChnSettings[nChn].nVolume = nVolume; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = true; } m_SndFile.Chn[nChn].nGlobalVol = nVolume; @@ -1374,16 +1354,16 @@ } -bool CModDoc::SetChannelDefaultPan(CHANNELINDEX nChn, UINT nPan) -//-------------------------------------------------------------- +bool CModDoc::SetChannelDefaultPan(CHANNELINDEX nChn, uint16 nPan) +//---------------------------------------------------------------- { bool bOk = false; if ((nChn >= m_SndFile.GetNumChannels()) || (nPan > 256)) return false; if (m_SndFile.ChnSettings[nChn].nPan != nPan) { m_SndFile.ChnSettings[nChn].nPan = nPan; - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; - if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + m_SndFile.ChnSettings[nChn].dwFlags.reset(CHN_SURROUND); + if (m_SndFile.GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = true; } m_SndFile.Chn[nChn].nPan = nPan; @@ -1395,7 +1375,7 @@ //--------------------------------------------------- { if (nChn >= m_SndFile.GetNumChannels()) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_MUTE) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_MUTE]; } @@ -1411,7 +1391,7 @@ //----------------------------------------------------------- { if ((!nInstr) || (nInstr > m_SndFile.GetNumInstruments()) || (!m_SndFile.Instruments[nInstr])) return false; - return (m_SndFile.Instruments[nInstr]->dwFlags & INS_MUTE) != 0; + return m_SndFile.Instruments[nInstr]->dwFlags[INS_MUTE]; } @@ -1574,7 +1554,7 @@ int nRenderPasses = 1; // Channel mode vector<bool> usedChannels; - vector<DWORD> channelFlags; + vector<ChannelFlags> channelFlags; // Instrument mode vector<bool> instrMuteState; @@ -1585,7 +1565,7 @@ CheckUsedChannels(usedChannels); nRenderPasses = m_SndFile.GetNumChannels(); - channelFlags.resize(nRenderPasses, 0); + channelFlags.resize(nRenderPasses, ChannelFlags(0)); for(CHANNELINDEX i = 0; i < m_SndFile.GetNumChannels(); i++) { // Save channels' flags @@ -1593,7 +1573,7 @@ // Ignore muted channels if(channelFlags[i] & CHN_MUTE) usedChannels[i] = false; // Mute each channel - m_SndFile.ChnSettings[i].dwFlags |= CHN_MUTE; + m_SndFile.ChnSettings[i].dwFlags.set(CHN_MUTE); } } // Instrument mode: Same as channel mode, but renders per instrument (or sample) @@ -1637,7 +1617,7 @@ if(wsdlg.m_bChannelMode) { // Re-mute previously processed channel - if(i > 0) m_SndFile.ChnSettings[i - 1].dwFlags |= CHN_MUTE; + if(i > 0) m_SndFile.ChnSettings[i - 1].dwFlags.set(CHN_MUTE); // Was this channel actually muted? Don't process it then. if(usedChannels[i] == false) @@ -1648,7 +1628,7 @@ else wsprintf(sFilenameAdd, "-%03d.wav", i + 1); // Unmute channel to process - m_SndFile.ChnSettings[i].dwFlags &= ~CHN_MUTE; + m_SndFile.ChnSettings[i].dwFlags.reset(CHN_MUTE); } // Instrument mode if(wsdlg.m_bInstrumentMode) @@ -1693,7 +1673,7 @@ // Render song (or current channel, or current sample/instrument) m_SndFile.visitedSongRows.Initialize(true); m_SndFile.SetCurrentPos(0); - m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_SndFile.m_SongFlags.reset(SONG_PATTERNLOOP); if (wsdlg.m_bSelectPlay) { m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); @@ -1779,7 +1759,7 @@ pMainFrm->PauseMod(); m_SndFile.SetCurrentPos(0); - m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_SndFile.m_SongFlags.reset(SONG_PATTERNLOOP); // Saving file CFileTagging *pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_FileTags : NULL; @@ -1893,7 +1873,7 @@ } bool isPlaying = (pMainFrm->GetModPlaying() == this); - if ((isPlaying) && (!(m_SndFile.m_dwSongFlags & (SONG_PAUSED|SONG_STEP/*|SONG_PATTERNLOOP*/)))) + if(isPlaying && !m_SndFile.m_SongFlags[SONG_PAUSED | SONG_STEP/*|SONG_PATTERNLOOP*/]) { OnPlayerPause(); return; @@ -1903,7 +1883,7 @@ for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) if (!m_SndFile.Chn[i].nMasterChn) { - m_SndFile.Chn[i].dwFlags |= (CHN_NOTEFADE|CHN_KEYOFF); + m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); if (!isPlaying) m_SndFile.Chn[i].nLength = 0; } @@ -1919,8 +1899,7 @@ cs.Leave(); - //m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED); - m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED|SONG_PATTERNLOOP); + m_SndFile.m_SongFlags.reset(SONG_STEP | SONG_PAUSED | SONG_PATTERNLOOP); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } } @@ -1934,7 +1913,7 @@ { if (pMainFrm->GetModPlaying() == this) { - bool isLooping = (m_SndFile.m_dwSongFlags & SONG_PATTERNLOOP) != 0; + bool isLooping = m_SndFile.m_SongFlags[SONG_PATTERNLOOP]; UINT nPat = m_SndFile.m_nPattern; UINT nRow = m_SndFile.m_nRow; UINT nNextRow = m_SndFile.m_nNextRow; @@ -1996,8 +1975,7 @@ pMainFrm->PauseMod(); - //m_SndFile.m_dwSongFlags &= ~SONG_STEP; - m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PATTERNLOOP); + m_SndFile.m_SongFlags.reset(SONG_STEP | SONG_PATTERNLOOP); m_SndFile.SetCurrentPos(0); m_SndFile.visitedSongRows.Initialize(true); pMainFrm->ResetElapsedTime(); @@ -2306,10 +2284,10 @@ pSndFile->Chn[i].nPatternLoopCount = 0; pSndFile->Chn[i].nPatternLoop = 0; pSndFile->Chn[i].nFadeOutVol = 0; - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] == nPat)) pSndFile->m_nCurrentOrder = pSndFile->m_nNextOrder = nOrd; - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = 0; @@ -2364,10 +2342,10 @@ // Cut instruments/samples for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] == nPat)) pSndFile->m_nCurrentOrder = pSndFile->m_nNextOrder = nOrd; - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = nRow; @@ -2422,9 +2400,9 @@ // Cut instruments/samples for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->SetCurrentOrder(nOrd); if (pSndFile->Order[nOrd] == nPat) pSndFile->DontLoopPattern(nPat, nRow); @@ -2555,7 +2533,7 @@ switch(nNewType) { case MOD_TYPE_XM: newPath += ".xm"; break; - case MOD_TYPE_IT: newPath += m_SndFile.m_dwSongFlags & SONG_ITPROJECT ? ".itp" : ".it"; break; + case MOD_TYPE_IT: newPath += m_SndFile.m_SongFlags[SONG_ITPROJECT] ? ".itp" : ".it"; break; case MOD_TYPE_MPT: newPath += ".mptm"; break; case MOD_TYPE_S3M: newPath += ".s3m"; break; case MOD_TYPE_MOD: newPath += ".mod"; break; @@ -2565,8 +2543,8 @@ if(nNewType != MOD_TYPE_IT || (nNewType == MOD_TYPE_IT && ( - (!strcmp(ext, ".it") && (m_SndFile.m_dwSongFlags & SONG_ITPROJECT)) || - (!strcmp(ext, ".itp") && !(m_SndFile.m_dwSongFlags & SONG_ITPROJECT)) + (!strcmp(ext, ".it") && m_SndFile.m_SongFlags[SONG_ITPROJECT]) || + (!strcmp(ext, ".itp") && !m_SndFile.m_SongFlags[SONG_ITPROJECT]) ) ) ) @@ -2590,12 +2568,12 @@ { CHANNELINDEX nStoppedChannel = CHANNELINDEX_INVALID; // Search for available channel - for (CHANNELINDEX j = m_SndFile.m_nChannels; j < MAX_CHANNELS; j++) + for(CHANNELINDEX j = m_SndFile.m_nChannels; j < MAX_CHANNELS; j++) { ModChannel *p = &m_SndFile.Chn[j]; - if (!p->nLength) + if(!p->nLength) return j; - else if(p->dwFlags & CHN_NOTEFADE) + else if(p->dwFlags[CHN_NOTEFADE]) nStoppedChannel = j; } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Moddoc.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -260,8 +260,8 @@ bool IsChannelSolo(CHANNELINDEX nChn) const; // -! NEW_FEATURE#0012 bool SurroundChannel(CHANNELINDEX nChn, bool bSurround); - bool SetChannelGlobalVolume(CHANNELINDEX nChn, UINT nVolume); - bool SetChannelDefaultPan(CHANNELINDEX nChn, UINT nPan); + bool SetChannelGlobalVolume(CHANNELINDEX nChn, uint16 nVolume); + bool SetChannelDefaultPan(CHANNELINDEX nChn, uint16 nPan); bool IsChannelMuted(CHANNELINDEX nChn) const; bool IsSampleMuted(SAMPLEINDEX nSample) const; bool IsInstrumentMuted(INSTRUMENTINDEX nInstr) const; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -246,7 +246,7 @@ for(CHANNELINDEX nChn = GetNumChannels(); nChn < MAX_BASECHANNELS; nChn++) { m_SndFile.InitChannel(nChn); - m_SndFile.Chn[nChn].dwFlags |= CHN_MUTE; + m_SndFile.Chn[nChn].dwFlags.set(CHN_MUTE); } return GetNumChannels(); @@ -760,7 +760,8 @@ } strcpy(s, pszEnvHdr); - wsprintf(s + strlen(s), pszEnvFmt, env.nNodes, env.nSustainStart, env.nSustainEnd, env.nLoopStart, env.nLoopEnd, (env.dwFlags & ENV_SUSTAIN) ? 1 : 0, (env.dwFlags & ENV_LOOP) ? 1 : 0, (env.dwFlags & ENV_CARRY) ? 1 : 0); + wsprintf(s + strlen(s), pszEnvFmt, env.nNodes, env.nSustainStart, env.nSustainEnd, env.nLoopStart, env.nLoopEnd, + env.dwFlags[ENV_SUSTAIN] ? 1 : 0, env.dwFlags[ENV_LOOP] ? 1 : 0, env.dwFlags[ENV_CARRY] ? 1 : 0); for (UINT i = 0; i < env.nNodes; i++) { if (strlen(s) >= sizeof(s)-32) break; @@ -825,7 +826,10 @@ env.nLoopStart = loopBegin; env.nLoopEnd = loopEnd; env.nReleaseNode = releaseNode; - env.dwFlags = (env.dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0) | (nPoints > 0 ? ENV_ENABLED : 0); + env.dwFlags.set(ENV_LOOP, bLoop != 0); + env.dwFlags.set(ENV_SUSTAIN, bSus != 0); + env.dwFlags.set(ENV_CARRY, bCarry != 0); + env.dwFlags.set(ENV_ENABLED, nPoints > 0); int oldn = 0; for (UINT i=0; i<nPoints; i++) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1074,7 +1074,7 @@ if(pSndFile != nullptr) { nNewType = pSndFile->GetBestSaveFormat(); - bIsProject = ((pSndFile->m_dwSongFlags & SONG_ITPROJECT) != 0); + bIsProject = pSndFile->m_SongFlags[SONG_ITPROJECT]; } } Modified: trunk/OpenMPT/mptrack/PatternClipboard.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternClipboard.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/PatternClipboard.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -489,11 +489,24 @@ { case CMD_SPEED: case CMD_TEMPO: - if(!clipboardHasS3MCommands) m[col].command = (m[col].param < tempoMin) ? CMD_SPEED : CMD_TEMPO; - else + if(!clipboardHasS3MCommands) { - if ((m[col].command == CMD_SPEED) && (m[col].param >= tempoMin)) m[col].param = CMD_TEMPO; else - if ((m[col].command == CMD_TEMPO) && (m[col].param < tempoMin)) m[col].param = CMD_SPEED; + if(m[col].param < tempoMin) + { + m[col].command = CMD_SPEED; + } else + { + m[col].command = CMD_TEMPO; + } + } else + { + if(m[col].command == CMD_SPEED && m[col].param >= tempoMin) + { + m[col].param = CMD_TEMPO; + } else if(m[col].command == CMD_TEMPO && m[col].param < tempoMin) + { + m[col].param = CMD_SPEED; + } } break; } @@ -503,7 +516,16 @@ { case CMD_SPEED: case CMD_TEMPO: - if(!clipboardHasS3MCommands) m[col].command = (m[col].param < tempoMin) ? CMD_SPEED : CMD_TEMPO; + if(!clipboardHasS3MCommands) + { + if(m[col].param < tempoMin) + { + m[col].command = CMD_SPEED; + } else + { + m[col].command = CMD_TEMPO; + } + } break; } } @@ -545,7 +567,6 @@ } return success; - } Modified: trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1708,8 +1708,8 @@ SetDlgItemInt(IDC_EDIT2, settings.nPan, FALSE); volSlider.SetPos(settings.nVolume); panSlider.SetPos(settings.nPan / 4u); - CheckDlgButton(IDC_CHECK1, (settings.dwFlags & CHN_MUTE) ? TRUE : FALSE); - CheckDlgButton(IDC_CHECK2, (settings.dwFlags & CHN_SURROUND) ? TRUE : FALSE); + CheckDlgButton(IDC_CHECK1, (settings.dwFlags[CHN_MUTE]) ? TRUE : FALSE); + CheckDlgButton(IDC_CHECK2, (settings.dwFlags[CHN_SURROUND]) ? TRUE : FALSE); char description[16]; sprintf(description, "Channel %d:", channel + 1); Modified: trunk/OpenMPT/mptrack/View_gen.cpp ===========================... [truncated message content] |
From: <sag...@us...> - 2013-04-26 20:45:19
|
Revision: 1976 http://sourceforge.net/p/modplug/code/1976 Author: saga-games Date: 2013-04-26 20:45:10 +0000 (Fri, 26 Apr 2013) Log Message: ----------- [Fix] Also apply extra-smooth ramping with no and linear interpolation (it's not 1995 anymore). [Fix] Per-instrument ramping settings were ignored during wave export if CHN_FASTRAMP wasn't set (was probably not very noticeable). [Fix] A few DIGI-related things were missing. Modified Paths: -------------- trunk/OpenMPT/installer/filetypes.iss trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/installer/filetypes.iss =================================================================== --- trunk/OpenMPT/installer/filetypes.iss 2013-04-26 20:35:20 UTC (rev 1975) +++ trunk/OpenMPT/installer/filetypes.iss 2013-04-26 20:45:10 UTC (rev 1976) @@ -22,7 +22,8 @@ Name: "associate_exotic\669"; Description: "Composer 669 / UNIS 669 (669)"; Name: "associate_exotic\amf"; Description: "ASYLUM Music Format / Advanced Music Format (AMF)"; Name: "associate_exotic\ams"; Description: "Extreme's Tracker / Velvet Studio (AMS)"; -Name: "associate_exotic\dbm"; Description: "DigiBooster (DBM)"; +Name: "associate_exotic\dbm"; Description: "Digi Booster Pro (DBM)"; +Name: "associate_exotic\digi"; Description: "Digi Booster (DIGI)"; Name: "associate_exotic\dmf"; Description: "X-Tracker (DMF)"; Name: "associate_exotic\dsm"; Description: "DSIK (DSM)"; Name: "associate_exotic\far"; Description: "Farandole Composer (FAR)"; @@ -63,6 +64,7 @@ Root: HKCR; Subkey: ".amf"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\amf Root: HKCR; Subkey: ".ams"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\ams Root: HKCR; Subkey: ".dbm"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\dbm +Root: HKCR; Subkey: ".digi"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\digi Root: HKCR; Subkey: ".dmf"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\dmf Root: HKCR; Subkey: ".dsm"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\dsm Root: HKCR; Subkey: ".far"; ValueType: string; ValueName: ""; ValueData: "OpenMPTFile"; Flags: uninsdeletevalue; Tasks: associate_exotic\far Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-04-26 20:35:20 UTC (rev 1975) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-04-26 20:45:10 UTC (rev 1976) @@ -1149,7 +1149,7 @@ "Impulse Tracker Projects (*.itp)|*.itp;*.itpz|" // -! NEW_FEATURE#0023 "OpenMPT Modules (*.mptm)|*.mptm;*.mptmz|" - "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.dsm;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b|" + "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.digi;*.dsm;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b|" "Wave Files (*.wav)|*.wav|" "Midi Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" "All Files (*.*)|*.*||", Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-04-26 20:35:20 UTC (rev 1975) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-04-26 20:45:10 UTC (rev 1976) @@ -4674,7 +4674,7 @@ //----------------------------------------------------------------------------------- { if (!period) return 0; - if (GetType() & (MOD_TYPE_MED|MOD_TYPE_MOD|MOD_TYPE_MTM|MOD_TYPE_669|MOD_TYPE_OKT|MOD_TYPE_AMF0)) + if (GetType() & (MOD_TYPE_MED|MOD_TYPE_MOD|MOD_TYPE_DIGI|MOD_TYPE_MTM|MOD_TYPE_669|MOD_TYPE_OKT|MOD_TYPE_AMF0)) { return (3546895L*4) / period; } else Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-26 20:35:20 UTC (rev 1975) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-26 20:45:10 UTC (rev 1976) @@ -1553,9 +1553,9 @@ if(pChn->dwFlags[CHN_VOLUMERAMP] && (pChn->leftVol != pChn->newLeftVol || pChn->rightVol != pChn->newRightVol)) { const bool rampUp = (pChn->newLeftVol > pChn->leftVol) || (pChn->newRightVol > pChn->rightVol); - LONG rampLength, globalRampLength, instrRampLength = 0; + int32 rampLength, globalRampLength, instrRampLength = 0; rampLength = globalRampLength = (rampUp ? gnVolumeRampUpSamplesActual : m_MixerSettings.glVolumeRampDownSamples); - //XXXih: add real support for bidi ramping here + //XXXih: add real support for bidi ramping here if(pChn->pModInstrument != nullptr && rampUp) { @@ -1569,23 +1569,15 @@ rampLength = 1; } - LONG leftDelta = ((pChn->newLeftVol - pChn->leftVol) << VOLUMERAMPPRECISION); - LONG rightDelta = ((pChn->newRightVol - pChn->rightVol) << VOLUMERAMPPRECISION); -// if (IsRenderingToDisc() -// || m_Resampler.IsHQ()) - if(IsRenderingToDisc() || (m_Resampler.IsHQ() && !enableCustomRamp)) + int32 leftDelta = ((pChn->newLeftVol - pChn->leftVol) << VOLUMERAMPPRECISION); + int32 rightDelta = ((pChn->newRightVol - pChn->rightVol) << VOLUMERAMPPRECISION); + if(!enableCustomRamp) { + // Extra-smooth ramping, unless we're forced to use the default values if((pChn->leftVol | pChn->rightVol) && (pChn->newLeftVol | pChn->newRightVol) && !pChn->dwFlags[CHN_FASTVOLRAMP]) { rampLength = m_nBufferCount; - if(rampLength > (1 << (VOLUMERAMPPRECISION-1))) - { - rampLength = (1 << (VOLUMERAMPPRECISION-1)); - } - if(rampLength < globalRampLength) - { - rampLength = globalRampLength; - } + Limit(rampLength, globalRampLength, 1 << (VOLUMERAMPPRECISION - 1)); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-09-25 16:27:36
|
Revision: 2752 http://sourceforge.net/p/modplug/code/2752 Author: manxorist Date: 2013-09-25 16:27:29 +0000 (Wed, 25 Sep 2013) Log Message: ----------- [Ref] Rename PLATFORM_[BIG|LITTLE]_ENDIAN to MPT_PLATFORM_[BIG|LITLE]_ENDIAN . Modified Paths: -------------- trunk/OpenMPT/common/BuildSettings.h trunk/OpenMPT/common/CompilerDetect.h trunk/OpenMPT/common/serialization_utils.h trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/soundlib/Endianness.h Modified: trunk/OpenMPT/common/BuildSettings.h =================================================================== --- trunk/OpenMPT/common/BuildSettings.h 2013-09-25 15:37:14 UTC (rev 2751) +++ trunk/OpenMPT/common/BuildSettings.h 2013-09-25 16:27:29 UTC (rev 2752) @@ -187,7 +187,7 @@ #undef MODPLUG_NO_FILESAVE // tests recommend file saving #endif -#if defined(PLATFORM_BIG_ENDIAN) && !defined(MODPLUG_NO_FILESAVE) +#if defined(MPT_PLATFORM_BIG_ENDIAN) && !defined(MODPLUG_NO_FILESAVE) #define MODPLUG_NO_FILESAVE // file saving is broken on big endian #endif Modified: trunk/OpenMPT/common/CompilerDetect.h =================================================================== --- trunk/OpenMPT/common/CompilerDetect.h 2013-09-25 15:37:14 UTC (rev 2751) +++ trunk/OpenMPT/common/CompilerDetect.h 2013-09-25 16:27:29 UTC (rev 2752) @@ -91,42 +91,42 @@ #if MPT_COMPILER_MSVC - #define PLATFORM_LITTLE_ENDIAN + #define MPT_PLATFORM_LITTLE_ENDIAN #elif MPT_COMPILER_GCC #if MPT_GCC_AT_LEAST(4,6,0) #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - #define PLATFORM_BIG_ENDIAN + #define MPT_PLATFORM_BIG_ENDIAN #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define PLATFORM_LITTLE_ENDIAN + #define MPT_PLATFORM_LITTLE_ENDIAN #endif #endif #elif MPT_COMPILER_CLANG #if MPT_CLANG_AT_LEAST(3,2,0) #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - #define PLATFORM_BIG_ENDIAN + #define MPT_PLATFORM_BIG_ENDIAN #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define PLATFORM_LITTLE_ENDIAN + #define MPT_PLATFORM_LITTLE_ENDIAN #endif #endif #endif // fallback: -#if !defined(PLATFORM_BIG_ENDIAN) && !defined(PLATFORM_LITTLE_ENDIAN) +#if !defined(MPT_PLATFORM_BIG_ENDIAN) && !defined(MPT_PLATFORM_LITTLE_ENDIAN) // taken from boost/detail/endian.hpp #if (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) \ || (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) \ || (defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN)) - #define PLATFORM_BIG_ENDIAN + #define MPT_PLATFORM_BIG_ENDIAN #elif (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) \ || (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) \ || (defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN)) - #define PLATFORM_LITTLE_ENDIAN + #define MPT_PLATFORM_LITTLE_ENDIAN #elif defined(__sparc) || defined(__sparc__) \ || defined(_POWER) || defined(__powerpc__) \ || defined(__ppc__) || defined(__hpux) || defined(__hppa) \ || defined(_MIPSEB) || defined(_POWER) \ || defined(__s390__) - #define PLATFORM_BIG_ENDIAN + #define MPT_PLATFORM_BIG_ENDIAN #elif defined(__i386__) || defined(__alpha__) \ || defined(__ia64) || defined(__ia64__) \ || defined(_M_IX86) || defined(_M_IA64) \ @@ -134,8 +134,8 @@ || defined(__amd64__) || defined(_M_AMD64) \ || defined(__x86_64) || defined(__x86_64__) \ || defined(_M_X64) || defined(__bfin__) - #define PLATFORM_LITTLE_ENDIAN + #define MPT_PLATFORM_LITTLE_ENDIAN #else - #error "unkown endianness" + #error "unknown endianness" #endif #endif Modified: trunk/OpenMPT/common/serialization_utils.h =================================================================== --- trunk/OpenMPT/common/serialization_utils.h 2013-09-25 15:37:14 UTC (rev 2751) +++ trunk/OpenMPT/common/serialization_utils.h 2013-09-25 16:27:29 UTC (rev 2752) @@ -126,7 +126,7 @@ STATIC_ASSERT(sizeof(conv) == sizeof(T)); STATIC_ASSERT(sizeof(conv.b) == sizeof(T)); conv.t = data; - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN std::reverse(conv.b, conv.b+sizeof(T)); #endif oStrm.write(conv.b, sizeof(data)); @@ -144,7 +144,7 @@ STATIC_ASSERT(sizeof(conv) == sizeof(T)); STATIC_ASSERT(sizeof(conv.b) == sizeof(T)); conv.t = data; - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN std::reverse(conv.b, conv.b+sizeof(T)); #endif oStrm.write(conv.b, MIN(bytecount, sizeof(data))); @@ -180,7 +180,7 @@ STATIC_ASSERT(sizeof(conv) == sizeof(T)); STATIC_ASSERT(sizeof(conv.b) == sizeof(T)); iStrm.read(conv.b, sizeof(T)); - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN std::reverse(conv.b, conv.b+sizeof(T)); #endif data = conv.t; @@ -202,7 +202,7 @@ STATIC_ASSERT(sizeof(conv.b) == sizeof(T)); memset(conv.b, 0, sizeof(T)); iStrm.read(conv.b, (std::min)((size_t)bytecount, sizeof(data))); - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN std::reverse(conv.b, conv.b+sizeof(T)); #endif data = conv.t; @@ -482,7 +482,7 @@ IdLE(T val) { conv.t = val; - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN std::reverse(conv.b, conv.b+sizeof(T)); #endif } Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2013-09-25 15:37:14 UTC (rev 2751) +++ trunk/OpenMPT/common/typedefs.h 2013-09-25 16:27:29 UTC (rev 2752) @@ -208,7 +208,7 @@ int24() { bytes[0] = bytes[1] = bytes[2] = 0; } explicit int24(int other) { - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN bytes[0] = ((unsigned int)other>>16)&0xff; bytes[1] = ((unsigned int)other>> 8)&0xff; bytes[2] = ((unsigned int)other>> 0)&0xff; @@ -220,7 +220,7 @@ } operator int() const { - #ifdef PLATFORM_BIG_ENDIAN + #ifdef MPT_PLATFORM_BIG_ENDIAN return ((int8)bytes[0] * 65536) + (bytes[1] * 256) + bytes[2]; #else return ((int8)bytes[2] * 65536) + (bytes[1] * 256) + bytes[0]; Modified: trunk/OpenMPT/soundlib/Endianness.h =================================================================== --- trunk/OpenMPT/soundlib/Endianness.h 2013-09-25 15:37:14 UTC (rev 2751) +++ trunk/OpenMPT/soundlib/Endianness.h 2013-09-25 16:27:29 UTC (rev 2752) @@ -38,7 +38,7 @@ #endif // Deprecated. Use "SwapBytesXX" versions below. -#ifdef PLATFORM_BIG_ENDIAN +#ifdef MPT_PLATFORM_BIG_ENDIAN // PPC inline uint32 LittleEndian(uint32 x) { return bswap32(x); } inline uint16 LittleEndianW(uint16 x) { return bswap16(x); } @@ -58,7 +58,7 @@ typedef int32 ALIGN(1) unaligned_int32; typedef int16 ALIGN(1) unaligned_int16; -#ifdef PLATFORM_BIG_ENDIAN +#ifdef MPT_PLATFORM_BIG_ENDIAN // PPC inline uint32 SwapBytesBE_(unaligned_uint32 *value) { return *value; } inline uint16 SwapBytesBE_(unaligned_uint16 *value) { return *value; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2014-03-14 17:46:19
|
Revision: 3884 http://sourceforge.net/p/modplug/code/3884 Author: saga-games Date: 2014-03-14 17:46:12 +0000 (Fri, 14 Mar 2014) Log Message: ----------- [Fix] Plugin editor: Selecting presets > 1000 is now possible. [Imp] Plugin editor: Speed up preset menu generation by creating sub menus on demand Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/AbstractVstEditor.h trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2014-03-14 14:21:57 UTC (rev 3883) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2014-03-14 17:46:12 UTC (rev 3884) @@ -26,6 +26,9 @@ #ifndef NO_VST +#define PRESETS_PER_COLUMN 32 +#define PRESETS_PER_GROUP 128 + UINT CAbstractVstEditor::clipboardFormat = RegisterClipboardFormat("VST Preset Data"); BEGIN_MESSAGE_MAP(CAbstractVstEditor, CDialog) @@ -47,7 +50,7 @@ ON_COMMAND(ID_VSTPRESETBACKWARDJUMP,OnVSTPresetBackwardJump) ON_COMMAND(ID_VSTPRESETFORWARDJUMP, OnVSTPresetForwardJump) ON_COMMAND(ID_PLUGINTOINSTRUMENT, OnCreateInstrument) - ON_COMMAND_RANGE(ID_PRESET_SET, ID_PRESET_SET + MAX_PLUGPRESETS, OnSetPreset) + ON_COMMAND_RANGE(ID_PRESET_SET, ID_PRESET_SET + PRESETS_PER_GROUP, OnSetPreset) ON_MESSAGE(WM_MOD_MIDIMSG, OnMidiMsg) ON_MESSAGE(WM_MOD_KEYCOMMAND, OnCustomKeyMsg) //rewbs.customKeys ON_COMMAND_RANGE(ID_PLUGSELECT, ID_PLUGSELECT + MAX_MIXPLUGINS, OnToggleEditor) //rewbs.patPlugName @@ -62,6 +65,7 @@ m_Menu.LoadMenu(IDR_VSTMENU); m_nInstrument = GetBestInstrumentCandidate(); m_nLearnMacro = -1; + currentPresetMenu = 0; } CAbstractVstEditor::~CAbstractVstEditor() @@ -251,7 +255,7 @@ void CAbstractVstEditor::OnSetPreset(UINT nID) //-------------------------------------------- { - int nIndex = nID - ID_PRESET_SET; + int nIndex = nID - ID_PRESET_SET + currentPresetMenu * PRESETS_PER_GROUP; if(nIndex >= 0) { m_VstPlugin.SetCurrentProgram(nIndex); @@ -411,11 +415,7 @@ { if(m_VstPlugin.CanRecieveMidiEvents()) { - CModDoc *pModDoc = m_VstPlugin.GetModDoc(); - if(pModDoc == nullptr) - return false; - - if(!m_VstPlugin.isInstrument() || pModDoc->GetSoundFile()->GetModSpecifications().instrumentsMax == 0 || + if(!m_VstPlugin.isInstrument() || m_VstPlugin.GetSoundFile().GetModSpecifications().instrumentsMax == 0 || Reporting::Confirm(_T("You need to assign an instrument to this plugin before you can play notes from here.\nCreate a new instrument and assign this plugin to the instrument?"), false, false) == cnfNo) { return false; @@ -436,90 +436,29 @@ } -void CAbstractVstEditor::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU) -//--------------------------------------------------------------------- +void CAbstractVstEditor::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) +//------------------------------------------------------------------------------ { if(!(nFlags & MF_POPUP)) { return; } - switch(nItemID) + if(hSysMenu == m_Menu.m_hMenu) { - case 0: - // Grey out paste menu item. - m_Menu.EnableMenuItem(ID_EDIT_PASTE, MF_BYCOMMAND | (IsClipboardFormatAvailable(clipboardFormat) ? 0 : MF_GRAYED)); - break; - case 1: - // Generate preset menu on click. - FillPresetMenu(); - break; - } -} - - -#define PRESETS_PER_COLUMN 32 -#define PRESETS_PER_GROUP 128 - - -void CAbstractVstEditor::FillPresetMenu() -//--------------------------------------- -{ - if(m_PresetMenu.GetMenuItemCount() != 0) - { - // Already filled... - return; - } - - const VstInt32 numProgs = m_VstPlugin.GetNumPrograms(); - const VstInt32 curProg = m_VstPlugin.GetCurrentProgram(); - - const int numSubMenus = ((numProgs - 1) / PRESETS_PER_GROUP) + 1; - if(numSubMenus > 1) - { - // Create sub menus if necessary - m_pPresetMenuGroup.resize(numSubMenus); - for(int bank = 0, prog = 1; bank < numSubMenus; bank++, prog += PRESETS_PER_GROUP) + // Main menu + switch(nItemID) { - m_pPresetMenuGroup[bank] = new CMenu(); - m_pPresetMenuGroup[bank]->CreatePopupMenu(); - - CString label; - label.Format("Bank %d (%d-%d)", bank + 1, prog, std::min(prog + PRESETS_PER_GROUP - 1, numProgs)); - m_PresetMenu.AppendMenu(MF_POPUP | (bank % 32 == 0 ? MF_MENUBREAK : 0), reinterpret_cast<UINT_PTR>(m_pPresetMenuGroup[bank]->m_hMenu), label); + case 0: + // Grey out paste menu item. + m_Menu.EnableMenuItem(ID_EDIT_PASTE, MF_BYCOMMAND | (IsClipboardFormatAvailable(clipboardFormat) ? 0 : MF_GRAYED)); + break; } - } - - int subMenuIndex = 0; - int entryInThisMenu = 0; - int entryInThisColumn = 0; - - // If there would be only one sub menu, we add directly to factory menu - CMenu *targetMenu = (numProgs > PRESETS_PER_GROUP) ? m_pPresetMenuGroup[subMenuIndex] : &m_PresetMenu; - - for(VstInt32 p = 0; p < numProgs; p++) + } else if(hSysMenu == m_Menu.GetSubMenu(1)->m_hMenu) { - CString programName = m_VstPlugin.GetFormattedProgramName(p); - programName.Replace("&", "&&"); - UINT splitMenuFlag = 0; - - if(entryInThisMenu++ == PRESETS_PER_GROUP) - { - // Advance to next preset group (sub menu) - subMenuIndex++; - targetMenu = m_pPresetMenuGroup[subMenuIndex]; - entryInThisMenu = 1; - entryInThisColumn = 1; - } else if(entryInThisColumn++ == PRESETS_PER_COLUMN) - { - // Advance to next menu column - entryInThisColumn = 1; - splitMenuFlag = MF_MENUBARBREAK; - } - - targetMenu->AppendMenu(MF_STRING | (p == curProg ? MF_CHECKED : MF_UNCHECKED) | splitMenuFlag, ID_PRESET_SET + p, programName); + // Preset menu + currentPresetMenu = nItemID; + GeneratePresetMenu(nItemID * PRESETS_PER_GROUP, *m_pPresetMenuGroup[nItemID]); } - - m_nCurProg = curProg; } @@ -558,19 +497,77 @@ // Add Factory menu to main menu m_Menu.InsertMenu(1, MF_BYPOSITION | MF_POPUP | (numProgs ? 0 : MF_GRAYED), reinterpret_cast<UINT_PTR>(m_PresetMenu.m_hMenu), "&Presets"); - // Depending on the plugin and its number of presets, creating the menu entries can take quite a while (e.g. Synth1), - // so we fill the menu only on demand (when it is clicked), so that the editor GUI creation doesn't take forever. + if(m_PresetMenu.GetMenuItemCount() != 0) + { + // Already filled... + return; + } + + const int numSubMenus = (numProgs + (PRESETS_PER_GROUP - 1)) / PRESETS_PER_GROUP; + + if(numSubMenus > 1) + { + // Depending on the plugin and its number of presets, filling the sub menus can take quite a while (e.g. Synth1), + // so we fill the menus only on demand (when they are opened), so that the editor GUI creation doesn't take forever. + m_pPresetMenuGroup.resize(numSubMenus); + for(int bank = 0, prog = 1; bank < numSubMenus; bank++, prog += PRESETS_PER_GROUP) + { + m_pPresetMenuGroup[bank] = new CMenu(); + m_pPresetMenuGroup[bank]->CreatePopupMenu(); + + CString label; + label.Format("Bank %d (%d-%d)", bank + 1, prog, std::min(prog + PRESETS_PER_GROUP - 1, numProgs)); + m_PresetMenu.AppendMenu(MF_POPUP | (bank % 32 == 0 ? MF_MENUBREAK : 0), reinterpret_cast<UINT_PTR>(m_pPresetMenuGroup[bank]->m_hMenu), label); + } + } else + { + // If there would be only one sub menu, we add presets directly to factory menu + GeneratePresetMenu(0, m_PresetMenu); + } + + currentPresetMenu = 0; + m_nCurProg = curProg; } +void CAbstractVstEditor::GeneratePresetMenu(int32 offset, CMenu &parent) +//---------------------------------------------------------------------- +{ + const VstInt32 numProgs = m_VstPlugin.GetNumPrograms(); + const VstInt32 curProg = m_VstPlugin.GetCurrentProgram(); + const VstInt32 endProg = std::min(offset + PRESETS_PER_GROUP, numProgs); + + if(parent.GetMenuItemCount() != 0) + { + // Already generated. + return; + } + + for(VstInt32 p = offset, row = 0, id = 0; p < endProg; p++, row++, id++) + { + CString programName = m_VstPlugin.GetFormattedProgramName(p); + programName.Replace("&", "&&"); + UINT splitMenuFlag = 0; + + if(row == PRESETS_PER_COLUMN) + { + // Advance to next menu column + row = 0; + splitMenuFlag = MF_MENUBARBREAK; + } + + parent.AppendMenu(MF_STRING | (p == curProg ? MF_CHECKED : MF_UNCHECKED) | splitMenuFlag, ID_PRESET_SET + id, programName); + } +} + + void CAbstractVstEditor::UpdateInputMenu() //---------------------------------------- { CMenu *pInfoMenu = m_Menu.GetSubMenu(2); pInfoMenu->DeleteMenu(0, MF_BYPOSITION); - CModDoc* pModDoc = m_VstPlugin.GetModDoc(); - CSoundFile* pSndFile = pModDoc->GetSoundFile(); + const CSoundFile &sndFile = m_VstPlugin.GetSoundFile(); if(m_InputMenu.m_hMenu) { @@ -599,7 +596,7 @@ { m_InputMenu.AppendMenu(MF_SEPARATOR); } - name.Format("Chn%02d: %s", inputChannels[nChn] + 1, pSndFile->ChnSettings[inputChannels[nChn]].szName); + name.Format("Chn%02d: %s", inputChannels[nChn] + 1, sndFile.ChnSettings[inputChannels[nChn]].szName); m_InputMenu.AppendMenu(MF_STRING, NULL, name); } @@ -612,7 +609,7 @@ { m_InputMenu.AppendMenu(MF_SEPARATOR); } - name.Format("Ins%02d: %s", inputInstruments[nIns], pSndFile->GetInstrumentName(inputInstruments[nIns])); + name.Format("Ins%02d: %s", inputInstruments[nIns], sndFile.GetInstrumentName(inputInstruments[nIns])); if(inputInstruments[nIns] == m_nInstrument) checked = true; m_InputMenu.AppendMenu(MF_STRING | (checked ? MF_CHECKED : 0), ID_SELECTINST + inputInstruments[nIns], name); } @@ -672,12 +669,6 @@ bool greyed; int action; - CModDoc *pModDoc = m_VstPlugin.GetModDoc(); - if(!pModDoc) - { - return; - } - CMenu *pInfoMenu = m_Menu.GetSubMenu(2); pInfoMenu->DeleteMenu(2, MF_BYPOSITION); @@ -695,7 +686,7 @@ action = NULL; greyed = true; - const MIDIMacroConfig &midiCfg = pModDoc->GetSoundFile()->m_MidiCfg; + const MIDIMacroConfig &midiCfg = m_VstPlugin.GetSoundFile().m_MidiCfg; const parameteredMacroType macroType = midiCfg.GetParameteredMacroType(nMacro); @@ -706,7 +697,7 @@ greyed = false; } else { - macroName = midiCfg.GetParameteredMacroName(nMacro, m_VstPlugin.GetSlot(), *pModDoc->GetSoundFile()); + macroName = midiCfg.GetParameteredMacroName(nMacro, m_VstPlugin.GetSlot(), m_VstPlugin.GetSoundFile()); if(macroType != sfx_plug || macroName.Left(3) != "N/A") { greyed = false; Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.h =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.h 2014-03-14 14:21:57 UTC (rev 3883) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.h 2014-03-14 17:46:12 UTC (rev 3884) @@ -19,16 +19,21 @@ class CAbstractVstEditor: public CDialog { - protected: - //{{AFX_VIRTUAL(CNoteMapWnd) - virtual BOOL PreTranslateMessage(MSG* pMsg); - //}}AFX_VIRTUAL + CMenu m_Menu; + CMenu m_PresetMenu; + std::vector<CMenu *> m_pPresetMenuGroup; + CMenu m_InputMenu; + CMenu m_OutputMenu; + CMenu m_MacroMenu; + CMenu m_OptionsMenu; + static UINT clipboardFormat; + int32 currentPresetMenu; - public: CVstPlugin &m_VstPlugin; int m_nCurProg; + CAbstractVstEditor(CVstPlugin &plugin); virtual ~CAbstractVstEditor(); void SetupMenu(bool force = false); @@ -72,18 +77,10 @@ DECLARE_MESSAGE_MAP() -private: - CMenu m_Menu; - CMenu m_PresetMenu; - std::vector<CMenu *> m_pPresetMenuGroup; - CMenu m_InputMenu; - CMenu m_OutputMenu; - CMenu m_MacroMenu; - CMenu m_OptionsMenu; - static UINT clipboardFormat; - - void FillPresetMenu(); +protected: + virtual BOOL PreTranslateMessage(MSG* pMsg); void UpdatePresetMenu(bool force = false); + void GeneratePresetMenu(int32 offset, CMenu &parent); void UpdateInputMenu(); void UpdateOutputMenu(); void UpdateMacroMenu(); Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2014-03-14 14:21:57 UTC (rev 3883) +++ trunk/OpenMPT/mptrack/resource.h 2014-03-14 17:46:12 UTC (rev 3884) @@ -1110,7 +1110,7 @@ #define ID_MODTREE_SAVEITEM 33917 #define ID_PLUGIN_SETUP 33918 #define ID_PRESET_SET 33920 -// From here: Command range [ID_PRESET_SET, ID_PRESET_SET + MAX_PLUGPRESETS] +// From here: Command range [ID_PRESET_SET, ID_PRESET_SET + PRESETS_PER_GROUP] #define ID_PLUGSELECT 35000 // From here: Command range [ID_PLUGSELECT, ID_PLUGSELECT + MAX_MIXPLUGINS] #define ID_VSTMACRO_INFO 36002 Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2014-03-14 14:21:57 UTC (rev 3883) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2014-03-14 17:46:12 UTC (rev 3884) @@ -65,8 +65,6 @@ #define MAX_PATTERNNAME 32 #define MAX_CHANNELNAME 20 -#define MAX_PLUGPRESETS 1000 //rewbs.plugPresets - enum MODTYPE { MOD_TYPE_NONE = 0x00, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2014-10-23 19:27:56
|
Revision: 4474 http://sourceforge.net/p/modplug/code/4474 Author: manxorist Date: 2014-10-23 19:27:47 +0000 (Thu, 23 Oct 2014) Log Message: ----------- [Ref] libopenmpt: Work-around missing <cstdint> on pre-C++0x GCC versions the same way we do for MSVC2008. Modified Paths: -------------- trunk/OpenMPT/build/vs2008/libopenmpt/libopenmpt.vcproj trunk/OpenMPT/libopenmpt/libopenmpt.hpp trunk/OpenMPT/libopenmpt/libopenmpt_c.cpp trunk/OpenMPT/libopenmpt/libopenmpt_config.h trunk/OpenMPT/libopenmpt/libopenmpt_cxx.cpp trunk/OpenMPT/libopenmpt/libopenmpt_ext.cpp trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp Removed Paths: ------------- trunk/OpenMPT/build/vs2008/libopenmpt/cstdint.h Deleted: trunk/OpenMPT/build/vs2008/libopenmpt/cstdint.h =================================================================== --- trunk/OpenMPT/build/vs2008/libopenmpt/cstdint.h 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/build/vs2008/libopenmpt/cstdint.h 2014-10-23 19:27:47 UTC (rev 4474) @@ -1,14 +0,0 @@ -#pragma once -#if (_MSC_VER >= 1500) && (_MSC_VER < 1600) // VS2008 -#include "stdint.h" -namespace std { - typedef int8_t int8_t; - typedef int16_t int16_t; - typedef int32_t int32_t; - typedef int64_t int64_t; - typedef uint8_t uint8_t; - typedef uint16_t uint16_t; - typedef uint32_t uint32_t; - typedef uint64_t uint64_t; -} -#endif Modified: trunk/OpenMPT/build/vs2008/libopenmpt/libopenmpt.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/libopenmpt/libopenmpt.vcproj 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/build/vs2008/libopenmpt/libopenmpt.vcproj 2014-10-23 19:27:47 UTC (rev 4474) @@ -810,22 +810,6 @@ </Filter> </Filter> </Filter> - <Filter - Name="build" - > - <Filter - Name="vs2008" - > - <Filter - Name="libopenmt" - > - <File - RelativePath=".\cstdint.h" - > - </File> - </Filter> - </Filter> - </Filter> </Files> <Globals> </Globals> Modified: trunk/OpenMPT/libopenmpt/libopenmpt.hpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt.hpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt.hpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -19,9 +19,7 @@ #include <string> #include <vector> -#ifdef MPT_ANCIENT_VS2008 -#include "cstdint.h" -#else +#ifndef LIBOPENMPT_ANCIENT_COMPILER #include <cstdint> #endif Modified: trunk/OpenMPT/libopenmpt/libopenmpt_c.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_c.cpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_c.cpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -265,7 +265,7 @@ double openmpt_could_open_propability( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * user ) { try { openmpt::callbacks_istream istream( stream_callbacks, stream ); -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER return openmpt::module_impl::could_open_propability( istream, effort, std::tr1::shared_ptr<openmpt::logfunc_logger>( new openmpt::logfunc_logger( logfunc ? logfunc : openmpt_log_func_default, user ) ) ); #else return openmpt::module_impl::could_open_propability( istream, effort, std::make_shared<openmpt::logfunc_logger>( logfunc ? logfunc : openmpt_log_func_default, user ) ); @@ -295,7 +295,7 @@ } } openmpt::callbacks_istream istream( stream_callbacks, stream ); -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER mod->impl = new openmpt::module_impl( istream, std::tr1::shared_ptr<openmpt::logfunc_logger>( new openmpt::logfunc_logger( mod->logfunc, mod->user ) ), ctls_map ); #else mod->impl = new openmpt::module_impl( istream, std::make_shared<openmpt::logfunc_logger>( mod->logfunc, mod->user ), ctls_map ); @@ -330,7 +330,7 @@ } } } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER mod->impl = new openmpt::module_impl( filedata, filesize, std::tr1::shared_ptr<openmpt::logfunc_logger>( new openmpt::logfunc_logger( mod->logfunc, mod->user ) ), ctls_map ); #else mod->impl = new openmpt::module_impl( filedata, filesize, std::make_shared<openmpt::logfunc_logger>( mod->logfunc, mod->user ), ctls_map ); Modified: trunk/OpenMPT/libopenmpt/libopenmpt_config.h =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_config.h 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_config.h 2014-10-23 19:27:47 UTC (rev 4474) @@ -96,11 +96,33 @@ */ #if defined(_MSC_VER) -#if (_MSC_VER >= 1500) && (_MSC_VER < 1600) // VS2008 -#define MPT_ANCIENT_VS2008 +#if (_MSC_VER >= 1500) && (_MSC_VER < 1600) +#define LIBOPENMPT_ANCIENT_COMPILER #endif #endif +#if defined(__GNUC__) +#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__*1 < 40300) +#define LIBOPENMPT_ANCIENT_COMPILER +#endif +#endif + +#ifdef __cplusplus +#ifdef LIBOPENMPT_ANCIENT_COMPILER +#include <stdint.h> +namespace std { + typedef int8_t int8_t; + typedef int16_t int16_t; + typedef int32_t int32_t; + typedef int64_t int64_t; + typedef uint8_t uint8_t; + typedef uint16_t uint16_t; + typedef uint32_t uint32_t; + typedef uint64_t uint64_t; +} +#endif +#endif + #include "libopenmpt_version.h" #endif /* LIBOPENMPT_CONFIG_H */ Modified: trunk/OpenMPT/libopenmpt/libopenmpt_cxx.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_cxx.cpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_cxx.cpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -77,7 +77,7 @@ } double could_open_propability( std::istream & stream, double effort, std::ostream & log ) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER return openmpt::module_impl::could_open_propability( stream, effort, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ) ); #else return openmpt::module_impl::could_open_propability( stream, effort, std::make_shared<std_ostream_log>( log ) ); @@ -101,7 +101,7 @@ } module::module( std::istream & stream, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( stream, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( stream, std::make_shared<std_ostream_log>( log ), ctls ); @@ -109,7 +109,7 @@ } module::module( const std::vector<std::uint8_t> & data, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( data, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( data, std::make_shared<std_ostream_log>( log ), ctls ); @@ -117,7 +117,7 @@ } module::module( const std::uint8_t * beg, const std::uint8_t * end, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( beg, end - beg, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( beg, end - beg, std::make_shared<std_ostream_log>( log ), ctls ); @@ -125,7 +125,7 @@ } module::module( const std::uint8_t * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( data, size, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( data, size, std::make_shared<std_ostream_log>( log ), ctls ); @@ -133,7 +133,7 @@ } module::module( const std::vector<char> & data, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( data, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( data, std::make_shared<std_ostream_log>( log ), ctls ); @@ -141,7 +141,7 @@ } module::module( const char * beg, const char * end, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( beg, end - beg, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( beg, end - beg, std::make_shared<std_ostream_log>( log ), ctls ); @@ -149,7 +149,7 @@ } module::module( const char * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( data, size, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( data, size, std::make_shared<std_ostream_log>( log ), ctls ); @@ -157,7 +157,7 @@ } module::module( const void * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : impl(0) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER impl = new module_impl( data, size, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ); #else impl = new module_impl( data, size, std::make_shared<std_ostream_log>( log ), ctls ); Modified: trunk/OpenMPT/libopenmpt/libopenmpt_ext.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_ext.cpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_ext.cpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -29,28 +29,28 @@ { public: -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_ext_impl( std::istream & stream, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( stream, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ) { #else module_ext_impl( std::istream & stream, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( stream, std::make_shared<std_ostream_log>( log ), ctls ) { #endif init(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_ext_impl( const std::vector<char> & data, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ) { #else module_ext_impl( const std::vector<char> & data, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, std::make_shared<std_ostream_log>( log ), ctls ) { #endif init(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_ext_impl( const char * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, size, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ) { #else module_ext_impl( const char * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, size, std::make_shared<std_ostream_log>( log ), ctls ) { #endif init(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_ext_impl( const void * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, size, std::tr1::shared_ptr<std_ostream_log>( new std_ostream_log( log ) ), ctls ) { #else module_ext_impl( const void * data, std::size_t size, std::ostream & log, const std::map< std::string, std::string > & ctls ) : module_impl( data, size, std::make_shared<std_ostream_log>( log ), ctls ) { Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -174,13 +174,13 @@ class log_forwarder : public ILog { private: -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<log_interface> destination; #else std::shared_ptr<log_interface> destination; #endif public: -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER log_forwarder( std::tr1::shared_ptr<log_interface> dest ) : destination(dest) { #else log_forwarder( std::shared_ptr<log_interface> dest ) : destination(dest) { @@ -304,17 +304,17 @@ set_render_param( module::RENDER_STEREOSEPARATION_PERCENT, 100 ); } void module_impl::init( const std::map< std::string, std::string > & ctls ) { -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER m_sndFile = std::tr1::shared_ptr<CSoundFile>(new CSoundFile()); #else m_sndFile = std::unique_ptr<CSoundFile>(new CSoundFile()); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER m_Dither = std::tr1::shared_ptr<Dither>(new Dither()); #else m_Dither = std::unique_ptr<Dither>(new Dither()); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER m_LogForwarder = std::tr1::shared_ptr<log_forwarder>(new log_forwarder(m_Log)); #else m_LogForwarder = std::unique_ptr<log_forwarder>(new log_forwarder(m_Log)); @@ -434,17 +434,17 @@ std::transform( lowercase_ext.begin(), lowercase_ext.end(), lowercase_ext.begin(), tolower ); return std::find( extensions.begin(), extensions.end(), lowercase_ext ) != extensions.end(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER double module_impl::could_open_propability( std::istream & stream, double effort, std::tr1::shared_ptr<log_interface> log ) { #else double module_impl::could_open_propability( std::istream & stream, double effort, std::shared_ptr<log_interface> log ) { #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<CSoundFile> sndFile( new CSoundFile() ); #else std::unique_ptr<CSoundFile> sndFile( new CSoundFile() ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<log_forwarder> logForwarder( new log_forwarder( log ) ); #else std::unique_ptr<log_forwarder> logForwarder( new log_forwarder( log ) ); @@ -481,7 +481,7 @@ } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( std::istream & stream, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( std::istream & stream, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { @@ -490,33 +490,33 @@ load( FileReader( &stream ) ); apply_libopenmpt_defaults(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( const std::vector<std::uint8_t> & data, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( const std::vector<std::uint8_t> & data, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #endif init( ctls ); -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER load( FileReader( &(data[0]), data.size() ) ); #else load( FileReader( data.data(), data.size() ) ); #endif apply_libopenmpt_defaults(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( const std::vector<char> & data, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( const std::vector<char> & data, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #endif init( ctls ); -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER load( FileReader( &(data[0]), data.size() ) ); #else load( FileReader( data.data(), data.size() ) ); #endif apply_libopenmpt_defaults(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( const std::uint8_t * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( const std::uint8_t * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { @@ -525,7 +525,7 @@ load( FileReader( data, size ) ); apply_libopenmpt_defaults(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( const char * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( const char * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { @@ -534,7 +534,7 @@ load( FileReader( data, size ) ); apply_libopenmpt_defaults(); } -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl::module_impl( const void * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { #else module_impl::module_impl( const void * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ) : m_Log(log) { Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp 2014-10-23 18:17:24 UTC (rev 4473) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp 2014-10-23 19:27:47 UTC (rev 4474) @@ -54,23 +54,23 @@ class module_impl { protected: -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<log_interface> m_Log; #else std::shared_ptr<log_interface> m_Log; #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<log_forwarder> m_LogForwarder; #else std::unique_ptr<log_forwarder> m_LogForwarder; #endif double m_currentPositionSeconds; -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<OpenMPT::CSoundFile> m_sndFile; #else std::unique_ptr<OpenMPT::CSoundFile> m_sndFile; #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER std::tr1::shared_ptr<OpenMPT::Dither> m_Dither; #else std::unique_ptr<OpenMPT::Dither> m_Dither; @@ -98,37 +98,37 @@ public: static std::vector<std::string> get_supported_extensions(); static bool is_extension_supported( const std::string & extension ); -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER static double could_open_propability( std::istream & stream, double effort, std::tr1::shared_ptr<log_interface> log ); #else static double could_open_propability( std::istream & stream, double effort, std::shared_ptr<log_interface> log ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( std::istream & stream, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( std::istream & stream, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( const std::vector<std::uint8_t> & data, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( const std::vector<std::uint8_t> & data, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( const std::vector<char> & data, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( const std::vector<char> & data, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( const std::uint8_t * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( const std::uint8_t * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( const char * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( const char * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #endif -#ifdef MPT_ANCIENT_VS2008 +#ifdef LIBOPENMPT_ANCIENT_COMPILER module_impl( const void * data, std::size_t size, std::tr1::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); #else module_impl( const void * data, std::size_t size, std::shared_ptr<log_interface> log, const std::map< std::string, std::string > & ctls ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2014-11-19 21:33:44
|
Revision: 4604 http://sourceforge.net/p/modplug/code/4604 Author: saga-games Date: 2014-11-19 21:33:29 +0000 (Wed, 19 Nov 2014) Log Message: ----------- [Fix] VST: Regularly send effEditIdle to plugins with open editors. [New] Debug mode: Added /noTests command line switch which disables testing. [Mod] OpenMPT: Version is now 1.24.00.17 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/soundlib/plugins/PluginManager.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2014-11-19 21:31:48 UTC (rev 4603) +++ trunk/OpenMPT/common/versionNumber.h 2014-11-19 21:33:29 UTC (rev 4604) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 24 #define VER_MINOR 00 -#define VER_MINORMINOR 16 +#define VER_MINORMINOR 17 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR) "." VER_STRINGIZE(VER_MAJOR) "." VER_STRINGIZE(VER_MINOR) "." VER_STRINGIZE(VER_MINORMINOR) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2014-11-19 21:31:48 UTC (rev 4603) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2014-11-19 21:33:29 UTC (rev 4604) @@ -327,12 +327,18 @@ public: bool m_bNoDls, m_bNoPlugins, m_bNoAssembly, m_bPortable; +#ifdef _DEBUG + bool m_bNoTests; +#endif public: CMPTCommandLineInfo() { m_bNoDls = m_bNoPlugins = m_bNoAssembly = m_bPortable = false; +#ifdef _DEBUG + m_bNoTests = false; +#endif } virtual void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast) { @@ -344,6 +350,9 @@ if (!lstrcmpi(lpszParam, _T("portable"))) { m_bPortable = true; return; } if (!lstrcmpi(lpszParam, _T("fullMemDump"))) { ExceptionHandler::fullMemDump = true; return; } if (!lstrcmpi(lpszParam, _T("noAssembly"))) { m_bNoAssembly = true; return; } +#ifdef _DEBUG + if (!lstrcmpi(lpszParam, _T("noTests"))) { m_bNoTests = true; return; } +#endif } CCommandLineInfo::ParseParam(lpszParam, bFlag, bLast); } @@ -1019,7 +1028,10 @@ EndWaitCursor(); - Test::DoTests(); +#ifdef _DEBUG + if(!cmdInfo.m_bNoTests) + Test::DoTests(); +#endif if(TrackerSettings::Instance().m_SoundSettingsOpenDeviceAtStartup) { @@ -1390,7 +1402,7 @@ { DWORD curTime = timeGetTime(); //rewbs.vstCompliance: call @ 50Hz - if (curTime - m_dwLastPluginIdleCall > 20) //20ms since last call? + if (curTime - m_dwLastPluginIdleCall > 20 || curTime < m_dwLastPluginIdleCall) { m_pPluginManager->OnIdle(); m_dwLastPluginIdleCall = curTime; Modified: trunk/OpenMPT/soundlib/plugins/PluginManager.cpp =================================================================== --- trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2014-11-19 21:31:48 UTC (rev 4603) +++ trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2014-11-19 21:33:29 UTC (rev 4604) @@ -620,6 +620,7 @@ if (editor && editor->m_hWnd) { editor->UpdateParamDisplays(); + p->Dispatch(effEditIdle, 0, 0, nullptr, 0.0f); } //end rewbs. VSTCompliance: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2014-11-30 20:14:53
|
Revision: 4619 http://sourceforge.net/p/modplug/code/4619 Author: saga-games Date: 2014-11-30 20:14:43 +0000 (Sun, 30 Nov 2014) Log Message: ----------- [New] When loading a module with missing samples, a dialog with all missing samples, including the functionality to relocate them, is now shown. [Mod] OpenMPT: Version is now 1.24.00.19 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Sndfile.h Added Paths: ----------- trunk/OpenMPT/mptrack/CListCtrl.h trunk/OpenMPT/mptrack/ExternalSamples.cpp trunk/OpenMPT/mptrack/ExternalSamples.h Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/common/versionNumber.h 2014-11-30 20:14:43 UTC (rev 4619) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 24 #define VER_MINOR 00 -#define VER_MINORMINOR 18 +#define VER_MINORMINOR 19 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR) "." VER_STRINGIZE(VER_MAJOR) "." VER_STRINGIZE(VER_MINOR) "." VER_STRINGIZE(VER_MINORMINOR) Added: trunk/OpenMPT/mptrack/CListCtrl.h =================================================================== --- trunk/OpenMPT/mptrack/CListCtrl.h (rev 0) +++ trunk/OpenMPT/mptrack/CListCtrl.h 2014-11-30 20:14:43 UTC (rev 4619) @@ -0,0 +1,37 @@ +/* + * CListCtrl.h + * ----------- + * Purpose: A class that extends MFC's CListCtrl to handle unicode strings in ANSI builds. + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + + +OPENMPT_NAMESPACE_BEGIN + + +class CListCtrlW : public CListCtrl +{ +public: + +#ifndef UNICODE + BOOL SetItemText(int nItem, int nSubItem, const WCHAR *lpszText) + { + ASSERT(::IsWindow(m_hWnd)); + ASSERT((GetStyle() & LVS_OWNERDATA)==0); + LVITEMW lvi; + lvi.iSubItem = nSubItem; + lvi.pszText = (LPWSTR) lpszText; + return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXTW, nItem, (LPARAM)&lvi); + } + + using CListCtrl::SetItemText; +#endif +}; + + +OPENMPT_NAMESPACE_END Property changes on: trunk/OpenMPT/mptrack/CListCtrl.h ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/x-chdr \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: trunk/OpenMPT/mptrack/ExternalSamples.cpp =================================================================== --- trunk/OpenMPT/mptrack/ExternalSamples.cpp (rev 0) +++ trunk/OpenMPT/mptrack/ExternalSamples.cpp 2014-11-30 20:14:43 UTC (rev 4619) @@ -0,0 +1,223 @@ +/* + * ExternalSamples.cpp + * ------------------- + * Purpose: Dialog for locating missing external samples + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include "stdafx.h" +#include "Moddoc.h" +#include "ExternalSamples.h" +#include "FileDialog.h" +#include "FolderScanner.h" +#include "TrackerSettings.h" +#include "Reporting.h" +#include "resource.h" + +OPENMPT_NAMESPACE_BEGIN + +BEGIN_MESSAGE_MAP(ExternalSamplesDlg, CDialog) + //{{AFX_MSG_MAP(ExternalSamplesDlg) + ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnSetPath) + ON_COMMAND(IDC_BUTTON1, OnScanFolder) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +void ExternalSamplesDlg::DoDataExchange(CDataExchange* pDX) +//--------------------------------------------------------- +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CModTypeDlg) + DDX_Control(pDX, IDC_LIST1, m_List); + //}}AFX_DATA_MAP +} + + +ExternalSamplesDlg::ExternalSamplesDlg(CModDoc &modDoc, CWnd *parent) : CDialog(IDD_MISSINGSAMPLES, parent), modDoc(modDoc), sndFile(modDoc.GetrSoundFile()), isScanning(false) +//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +{ +} + + +BOOL ExternalSamplesDlg::OnInitDialog() +//------------------------------------- +{ + CDialog::OnInitDialog(); + + // Initialize table + const struct + { + const TCHAR *text; + int width; + } labels[] = + { + { _T("Sample"), 128 }, + { _T("External Filename"), 308 }, + }; + for(int i = 0; i < CountOf(labels); i++) + { + m_List.InsertColumn(i, labels[i].text, LVCFMT_LEFT, labels[i].width); + } + m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_FULLROWSELECT); + + GenerateList(); + SetWindowTextW(m_hWnd, (L"Missing External Samples - " + modDoc.GetPathNameMpt().GetFullFileName().AsNative()).c_str()); + + return TRUE; +} + + +void ExternalSamplesDlg::GenerateList() +//------------------------------------- +{ + m_List.SetRedraw(FALSE); + m_List.DeleteAllItems(); + CString s; + for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) + { + if(sndFile.IsExternalSampleMissing(smp)) + { + s.Format("%02u: ", smp); + s += sndFile.GetSampleName(smp); + int insertAt = m_List.InsertItem(m_List.GetItemCount(), s); + if(insertAt == -1) + continue; + m_List.SetItemText(insertAt, 1, sndFile.GetSamplePath(smp).AsNative().c_str()); + m_List.SetItemData(insertAt, smp); + } + } + m_List.SetRedraw(TRUE); + + // Yay, we managed to find all samples! + if(!m_List.GetItemCount()) + { + OnOK(); + } +} + + +void ExternalSamplesDlg::OnSetPath(NMHDR *, LRESULT *) +//---------------------------------------------------- +{ + const int item = m_List.GetSelectionMark(); + if(item == -1) return; + const SAMPLEINDEX smp = static_cast<SAMPLEINDEX>(m_List.GetItemData(item)); + + const mpt::PathString path = modDoc.GetrSoundFile().GetSamplePath(smp); + FileDialog dlg = OpenFileDialog() + .ExtensionFilter("All Samples|*.wav;*.flac|All files(*.*)|*.*||"); // Only show samples that we actually can save as well. + if(TrackerSettings::Instance().previewInFileDialogs) + dlg.EnableAudioPreview(); + if(path.empty()) + dlg.WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)); + else + dlg.DefaultFilename(path); + if(!dlg.Show()) return; + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + + SetSample(smp, dlg.GetFirstFile()); + modDoc.UpdateAllViews(NULL, HINT_SAMPLEINFO | HINT_SMPNAMES | HINT_SAMPLEDATA | (smp << HINT_SHIFT_SMP)); + GenerateList(); +} + + +void ExternalSamplesDlg::OnScanFolder() +//------------------------------------- +{ + if(isScanning) + { + isScanning = false; + return; + } + + BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES), _T("Select a folder to search for missing samples...")); + if(dlg.Show()) + { + TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetDirectory(), DIR_SAMPLES); + + FolderScanner scan(dlg.GetDirectory(), true); + mpt::PathString fileName; + + isScanning = true; + SetDlgItemText(IDC_BUTTON1, "&Cancel"); + GetDlgItem(IDOK)->EnableWindow(FALSE); + BeginWaitCursor(); + + DWORD lastTick = GetTickCount(); + int foundFiles = 0; + + bool anyMissing = true; + while(scan.NextFile(fileName) && isScanning && anyMissing) + { + anyMissing = false; + for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) + { + if(sndFile.IsExternalSampleMissing(smp)) + { + if(!mpt::PathString::CompareNoCase(sndFile.GetSamplePath(smp).GetFullFileName(), fileName.GetFullFileName())) + { + if(SetSample(smp, fileName)) + { + foundFiles++; + } + } else + { + anyMissing = true; + } + } + } + + const DWORD tick = GetTickCount(); + if(tick < lastTick || tick > lastTick + 100) + { + lastTick = tick; + ::SetDlgItemTextW(m_hWnd, IDC_STATIC1, fileName.AsNative().c_str()); + MSG msg; + while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } + } + EndWaitCursor(); + GetDlgItem(IDOK)->EnableWindow(TRUE); + SetDlgItemText(IDC_BUTTON1, "&Scan Folder..."); + SetDlgItemText(IDC_STATIC1, ""); + + modDoc.UpdateAllViews(NULL, HINT_SAMPLEINFO | HINT_SMPNAMES | HINT_SAMPLEDATA); + + if(foundFiles) + { + Reporting::Information(mpt::String::Print("%1 sample paths were relocated.", foundFiles)); + } else if(isScanning) + { + Reporting::Information("No matching sample names found."); + } + isScanning = false; + GenerateList(); + } + +} + + +bool ExternalSamplesDlg::SetSample(SAMPLEINDEX smp, const mpt::PathString &fileName) +//---------------------------------------------------------------------------------- +{ + modDoc.GetSampleUndo().PrepareUndo(smp, sundo_replace, "Replace"); + if(!sndFile.LoadExternalSample(smp, fileName)) + { + Reporting::Information(L"Unable to load sample:\n" + fileName.AsNative()); + modDoc.GetSampleUndo().RemoveLastUndoStep(smp); + return false; + } else + { + modDoc.SetModified(); + return true; + } +} + +OPENMPT_NAMESPACE_END Property changes on: trunk/OpenMPT/mptrack/ExternalSamples.cpp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/x-c++src \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: trunk/OpenMPT/mptrack/ExternalSamples.h =================================================================== --- trunk/OpenMPT/mptrack/ExternalSamples.h (rev 0) +++ trunk/OpenMPT/mptrack/ExternalSamples.h 2014-11-30 20:14:43 UTC (rev 4619) @@ -0,0 +1,45 @@ +/* + * ExternalSamples.h + * ----------------- + * Purpose: Dialog for locating missing external samples + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include "CListCtrl.h" +#include "../common/thread.h" + +OPENMPT_NAMESPACE_BEGIN + +class CModDoc; +class CSoundFile; + +//======================================= +class ExternalSamplesDlg : public CDialog +//======================================= +{ +protected: + CModDoc &modDoc; + CSoundFile &sndFile; + CListCtrlW m_List; + bool isScanning; + +public: + ExternalSamplesDlg(CModDoc &modDoc, CWnd *parent); + +protected: + void GenerateList(); + bool SetSample(SAMPLEINDEX smp, const mpt::PathString &fileName); + + virtual void DoDataExchange(CDataExchange* pDX); + virtual BOOL OnInitDialog(); + + afx_msg void OnSetPath(NMHDR *, LRESULT *); + afx_msg void OnScanFolder(); + + DECLARE_MESSAGE_MAP() +}; + +OPENMPT_NAMESPACE_END Property changes on: trunk/OpenMPT/mptrack/ExternalSamples.h ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/x-chdr \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2014-11-30 20:14:43 UTC (rev 4619) @@ -33,6 +33,7 @@ #include "../soundlib/FileReader.h" #include <shlwapi.h> #include "FileDialog.h" +#include "ExternalSamples.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -130,15 +131,16 @@ ///////////////////////////////////////////////////////////////////////////// // CModDoc construction/destruction -CModDoc::CModDoc() : m_LogMode(LogModeInstantReporting), m_PatternUndo(*this), m_SampleUndo(*this) -//------------------------------------------------------------------------------------------------ +CModDoc::CModDoc() + : m_LogMode(LogModeInstantReporting) + , m_hWndFollow(nullptr) + , m_bHasValidPath(false) + , m_notifyType(Notification::Default) + , m_notifyItem(0) + , m_PatternUndo(*this) + , m_SampleUndo(*this) +//--------------------------------------- { - m_bHasValidPath = false; - m_hWndFollow = NULL; - - m_notifyType = Notification::Default; - m_notifyItem = 0; - // Set the creation date of this file (or the load time if we're loading an existing file) time(&m_creationTime); @@ -386,6 +388,17 @@ SetModifiedFlag(FALSE); // (bModified); m_bHasValidPath=true; + // Check if there are any missing samples, and if there are, show a dialog to relocate them. + for(SAMPLEINDEX smp = 1; smp <= GetNumSamples(); smp++) + { + if(m_SndFile.IsExternalSampleMissing(smp)) + { + ExternalSamplesDlg dlg(*this, CMainFrame::GetMainFrame()); + dlg.DoModal(); + break; + } + } + return TRUE; } @@ -519,7 +532,7 @@ //----------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->OnDocumentClosed(this); + if(pMainFrm) pMainFrm->OnDocumentClosed(this); CDocument::OnCloseDocument(); } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2014-11-30 20:14:43 UTC (rev 4619) @@ -22,7 +22,7 @@ #include "../soundlib/FileReader.h" #include "FileDialog.h" #include "Globals.h" -#include "FolderScanner.h" +#include "ExternalSamples.h" OPENMPT_NAMESPACE_BEGIN @@ -2582,17 +2582,17 @@ anyModified = true; } } - if(sample.uFlags[SMP_KEEPONDISK] && sample.pSample == nullptr) + if(sndFile->IsExternalSampleMissing(smp)) { anyMissing = true; } if(anyPath && anyModified && anyMissing) break; } - if(menuForThisSample || anyPath || anyModified || anyMissing) + if(menuForThisSample || anyPath || anyModified) { AppendMenu(hMenu, MF_SEPARATOR, NULL, _T("")); - if(menuForThisSample) AppendMenu(hMenu, MF_STRING | (sndFile->GetType() == MOD_TYPE_MPT ? 0 : MF_GRAYED), ID_MODTREE_SETPATH, _T("Set P&ath")); + if(menuForThisSample) AppendMenu(hMenu, MF_STRING | ((sndFile->GetType() == MOD_TYPE_MPT || hasPath) ? 0 : MF_GRAYED), ID_MODTREE_SETPATH, _T("Set P&ath")); if(menuForThisSample) AppendMenu(hMenu, MF_STRING | ((hasPath && sample.HasSampleData() && sample.uFlags[SMP_MODIFIED]) ? 0 : MF_GRAYED), ID_MODTREE_SAVEITEM, _T("&Save")); if(anyModified) AppendMenu(hMenu, MF_STRING, ID_MODTREE_SAVEALL, _T("&Save All")); if(menuForThisSample) AppendMenu(hMenu, MF_STRING | (hasPath ? 0 : MF_GRAYED), ID_MODTREE_RELOADITEM, _T("&Reload")); @@ -3280,46 +3280,8 @@ { return; } - BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES), _T("Select a folder to search for missing samples...")); - int foundFiles = 0; - if(dlg.Show()) - { - FolderScanner scan(dlg.GetDirectory(), true); - mpt::PathString fileName; - CSoundFile &sndFile = pModDoc->GetrSoundFile(); - - BeginWaitCursor(); - while(scan.NextFile(fileName)) - { - for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) - { - ModSample &sample = sndFile.GetSample(smp); - if(sample.uFlags[SMP_KEEPONDISK] && sample.pSample == nullptr && !mpt::PathString::CompareNoCase(sndFile.GetSamplePath(smp).GetFullFileName(), fileName.GetFullFileName())) - { - pModDoc->GetSampleUndo().PrepareUndo(smp, sundo_replace, "Replace"); - if(!sndFile.LoadExternalSample(smp, fileName)) - { - pModDoc->GetSampleUndo().RemoveLastUndoStep(smp); - } else - { - pModDoc->SetModified(); - foundFiles++; - } - } - } - } - EndWaitCursor(); - } - pModDoc->UpdateAllViews(NULL, HINT_SAMPLEINFO | HINT_SMPNAMES | HINT_SAMPLEDATA); - OnRefreshTree(); - - if(foundFiles) - { - Reporting::Information(mpt::String::Print("%1 sample paths were relocated.", foundFiles)); - } else - { - Reporting::Information("No matching sample names found."); - } + ExternalSamplesDlg dlg(*pModDoc, CMainFrame::GetMainFrame()); + dlg.DoModal(); } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/mptrack.rc 2014-11-30 20:14:43 UTC (rev 4619) @@ -24,6 +24,17 @@ // Dialog // +IDD_MISSINGSAMPLES DIALOGEX 0, 0, 316, 185 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,262,164,50,14 + LTEXT "The following external samples could not be found.\nDouble-click an entry to set its new file location.\nClick ""Scan Folder"" to search for matching filenames of all missing samples in a folder.",IDC_STATIC,6,6,306,24 + CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,36,306,120 + PUSHBUTTON "&Scan Folder...",IDC_BUTTON1,7,164,60,14 + LTEXT "",IDC_STATIC1,72,167,186,8,SS_PATHELLIPSIS +END + IDD_CLEANUP_SONG DIALOGEX 0, 0, 394, 154 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cleanup" @@ -335,6 +346,14 @@ #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN + IDD_MISSINGSAMPLES, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 312 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + IDD_CLEANUP_SONG, DIALOG BEGIN LEFTMARGIN, 7 Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2014-11-30 20:14:43 UTC (rev 4619) @@ -540,6 +540,10 @@ > </File> <File + RelativePath=".\ExternalSamples.cpp" + > + </File> + <File RelativePath="..\soundlib\Fastmix.cpp" > </File> @@ -1158,6 +1162,10 @@ > </File> <File + RelativePath=".\CListCtrl.h" + > + </File> + <File RelativePath=".\ColourEdit.h" > </File> @@ -1238,6 +1246,10 @@ > </File> <File + RelativePath=".\ExternalSamples.h" + > + </File> + <File RelativePath=".\FileDialog.h" > </File> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2014-11-30 20:14:43 UTC (rev 4619) @@ -828,6 +828,7 @@ <ClCompile Include="EffectInfo.cpp" /> <ClCompile Include="EffectVis.cpp" /> <ClCompile Include="ExceptionHandler.cpp" /> + <ClCompile Include="ExternalSamples.cpp" /> <ClCompile Include="FileDialog.cpp" /> <ClCompile Include="FolderScanner.cpp" /> <ClCompile Include="Globals.cpp" /> @@ -1030,6 +1031,7 @@ <ClInclude Include="Childfrm.h" /> <ClInclude Include="CImageListEx.h" /> <ClInclude Include="CleanupSong.h" /> + <ClInclude Include="CListCtrl.h" /> <ClInclude Include="ColourEdit.h" /> <ClInclude Include="CommandSet.h" /> <ClInclude Include="CreditStatic.h" /> @@ -1042,6 +1044,7 @@ <ClInclude Include="DefaultVstEditor.h" /> <ClInclude Include="EffectInfo.h" /> <ClInclude Include="ExceptionHandler.h" /> + <ClInclude Include="ExternalSamples.h" /> <ClInclude Include="FileDialog.h" /> <ClInclude Include="FolderScanner.h" /> <ClInclude Include="Globals.h" /> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2014-11-30 20:14:43 UTC (rev 4619) @@ -535,6 +535,9 @@ <ClCompile Include="FolderScanner.cpp"> <Filter>Source Files\mptrack</Filter> </ClCompile> + <ClCompile Include="ExternalSamples.cpp"> + <Filter>Source Files\mptrack\Dialogs</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\soundlib\Loaders.h"> @@ -1041,6 +1044,12 @@ <ClInclude Include="FolderScanner.h"> <Filter>Header Files\mptrack</Filter> </ClInclude> + <ClInclude Include="ExternalSamples.h"> + <Filter>Header Files\mptrack\Dialogs</Filter> + </ClInclude> + <ClInclude Include="CListCtrl.h"> + <Filter>Header Files\mptrack</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="res\bitmap1.bmp"> Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/mptrack/resource.h 2014-11-30 20:14:43 UTC (rev 4619) @@ -135,6 +135,7 @@ #define IDD_OPTIONS_SAMPLEEDITOR 535 #define IDD_SCANPLUGINS 536 #define IDD_RESAMPLE 537 +#define IDD_MISSINGSAMPLES 538 #define IDC_BUTTON1 1001 #define IDC_BUTTON2 1002 #define IDC_BUTTON3 1003 @@ -1251,7 +1252,7 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 538 +#define _APS_NEXT_RESOURCE_VALUE 539 #define _APS_NEXT_COMMAND_VALUE 44645 #define _APS_NEXT_CONTROL_VALUE 2483 #define _APS_NEXT_SYMED_VALUE 901 Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2014-11-30 20:14:43 UTC (rev 4619) @@ -655,7 +655,10 @@ } if(!LoadExternalSample(i + 1, filename)) { +#ifndef MODPLUG_TRACKER + // OpenMPT has its own way of reporting this error AddToLog(LogError, mpt::String::Print(MPT_USTRING("Unable to load sample %1: %2"), i, filename.ToUnicode())); +#endif // MODPLUG_TRACKER } } else { Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2014-11-30 20:14:43 UTC (rev 4619) @@ -198,7 +198,7 @@ // Note: The order of these fields differs a bit in MTIOModule_MT2.cpp - maybe just typos, I'm not sure. -// This struct follows the safe format of MadTracker 2.6.1. +// This struct follows the save format of MadTracker 2.6.1. struct PACKED MT2InstrSynth { uint8 synthID; @@ -926,7 +926,7 @@ } // Read sample headers - std::vector<bool> sampleInterpolation(256, true); + std::bitset<256> sampleNoInterpolation; for(SAMPLEINDEX i = 0; i < 256; i++) { char sampleName[32]; @@ -967,11 +967,11 @@ if(sampleHeader.flags & 5) { // External sample - strcpy(mptSmp.filename, "Ext"); + mptSmp.uFlags.set(SMP_KEEPONDISK); } if(sampleHeader.flags & 8) { - sampleInterpolation[i] = false; + sampleNoInterpolation[i] = true; for(INSTRUMENTINDEX drum = 0; drum < 8; drum++) { if(drumMap[drum] != 0 && Instruments[drumMap[drum]] != nullptr) @@ -1018,7 +1018,7 @@ mptSmp.nVibRate = insHeader.vibrate; mptSmp.nGlobalVol = uint16(group.vol) * 2; mptSmp.nFineTune = group.pitch; - if(!sampleInterpolation[sample - 1]) + if(sampleNoInterpolation[sample - 1]) { mptIns->nResampling = SRCMODE_NEAREST; } @@ -1039,7 +1039,7 @@ ModSample &mptSmp = Samples[i + 1]; const uint32 freq = Util::Round<uint32>(mptSmp.nC5Speed * std::pow(2.0, -(mptSmp.RelativeTone - 49 - (mptSmp.nFineTune / 128.0)) / 12.0)); - if(strcmp(mptSmp.filename, "Ext")) + if(!mptSmp.uFlags[SMP_KEEPONDISK]) { SampleIO( mptSmp.uFlags[CHN_16BIT] ? SampleIO::_16bit : SampleIO::_8bit, @@ -1082,7 +1082,10 @@ } if(!LoadExternalSample(i + 1, path)) { +#ifndef MODPLUG_TRACKER + // OpenMPT has its own way of reporting this error AddToLog(LogError, mpt::String::Print(MPT_USTRING("Unable to load sample %1: %2"), i, path.ToUnicode())); +#endif // MODPLUG_TRACKER } #else #if defined(MPT_WITH_CHARSET_LOCALE) Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2014-11-30 02:02:03 UTC (rev 4618) +++ trunk/OpenMPT/soundlib/Sndfile.h 2014-11-30 20:14:43 UTC (rev 4619) @@ -534,6 +534,7 @@ void ResetSamplePath(SAMPLEINDEX smp) { if(m_samplePaths.size() >= smp) m_samplePaths[smp - 1] = mpt::PathString(); Samples[smp].uFlags.reset(SMP_KEEPONDISK | SMP_MODIFIED);} mpt::PathString GetSamplePath(SAMPLEINDEX smp) const { if(m_samplePaths.size() >= smp) return m_samplePaths[smp - 1]; else return mpt::PathString(); } bool SampleHasPath(SAMPLEINDEX smp) const { if(m_samplePaths.size() >= smp) return !m_samplePaths[smp - 1].empty(); else return false; } + bool IsExternalSampleMissing(SAMPLEINDEX smp) const { return Samples[smp].uFlags[SMP_KEEPONDISK] && Samples[smp].pSample == nullptr; } bool LoadExternalSample(SAMPLEINDEX smp, const mpt::PathString &filename); #endif // MPT_EXTERNAL_SAMPLES This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-06-17 13:56:16
|
Revision: 5330 http://sourceforge.net/p/modplug/code/5330 Author: manxorist Date: 2015-06-17 13:56:08 +0000 (Wed, 17 Jun 2015) Log Message: ----------- [Ref] ComponentManager: Allow querying the state of the managed components. [Imp] About Dialog: Show the state of all components. Modified Paths: -------------- trunk/OpenMPT/common/ComponentManager.cpp trunk/OpenMPT/common/ComponentManager.h trunk/OpenMPT/mptrack/AboutDialog.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp trunk/OpenMPT/pluginBridge/BridgeWrapper.h trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp trunk/OpenMPT/sounddev/SoundDeviceASIO.h trunk/OpenMPT/sounddev/SoundDeviceDirectSound.cpp trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp trunk/OpenMPT/sounddev/SoundDevicePortAudio.h trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp trunk/OpenMPT/sounddev/SoundDeviceWaveout.h trunk/OpenMPT/soundlib/Load_mo3.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp Modified: trunk/OpenMPT/common/ComponentManager.cpp =================================================================== --- trunk/OpenMPT/common/ComponentManager.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/common/ComponentManager.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -170,9 +170,10 @@ #if MPT_COMPONENT_MANAGER -ComponentFactoryBase::ComponentFactoryBase(const std::string &id) -//--------------------------------------------------------------- +ComponentFactoryBase::ComponentFactoryBase(const std::string &id, const std::string &settingsKey) +//----------------------------------------------------------------------------------------------- : m_ID(id) + , m_SettingsKey(settingsKey) { return; } @@ -192,9 +193,20 @@ } -void ComponentFactoryBase::Initialize(ComponentManager &componentManager, MPT_SHARED_PTR<IComponent> component) -//------------------------------------------------------------------------------------------------------------- +std::string ComponentFactoryBase::GetSettingsKey() const +//------------------------------------------------------ { + return m_SettingsKey; +} + + +void ComponentFactoryBase::Initialize(ComponentManager &componentManager, MPT_SHARED_PTR<IComponent> component) const +//------------------------------------------------------------------------------------------------------------------- +{ + if(componentManager.IsComponentBlocked(GetSettingsKey())) + { + return; + } componentManager.InitializeComponent(component); } @@ -280,6 +292,7 @@ return; } RegisteredComponent registeredComponent; + registeredComponent.settingsKey = componentFactory.GetSettingsKey(); registeredComponent.factoryMethod = componentFactory.GetStaticConstructor(); registeredComponent.instance = MPT_SHARED_PTR<IComponent>(); m_Components.insert(std::make_pair(componentFactory.GetID(), registeredComponent)); @@ -306,6 +319,13 @@ } +bool ComponentManager::IsComponentBlocked(const std::string &settingsKey) const +//----------------------------------------------------------------------------- +{ + return m_Settings.IsBlocked(settingsKey); +} + + void ComponentManager::InitializeComponent(MPT_SHARED_PTR<IComponent> component) const //------------------------------------------------------------------------------------ { @@ -317,10 +337,6 @@ { return; } - if(m_Settings.IsBlocked(component->GetSettingsKey())) - { - return; - } component->Initialize(); } @@ -352,6 +368,58 @@ } +std::vector<std::string> ComponentManager::GetRegisteredComponents() const +{ + std::vector<std::string> result; + for(TComponentMap::const_iterator it = m_Components.begin(); it != m_Components.end(); ++it) + { + result.push_back((*it).first); + } + return result; +} + + +ComponentInfo ComponentManager::GetComponentInfo(std::string name) const +{ + ComponentInfo result; + result.name = name; + result.state = ComponentStateUnregistered; + result.settingsKey = ""; + result.type = ComponentTypeUnknown; + TComponentMap::const_iterator it = m_Components.find(name); + if(it == m_Components.end()) + { + result.state = ComponentStateUnregistered; + return result; + } + result.settingsKey = it->second.settingsKey; + if(IsComponentBlocked(it->second.settingsKey)) + { + result.state = ComponentStateBlocked; + return result; + } + MPT_SHARED_PTR<IComponent> component = ((*it).second.instance) ? it->second.instance : MPT_SHARED_PTR<IComponent>(); + if(!component) + { + result.state = ComponentStateUnintialized; + return result; + } + result.type = component->GetType(); + if(!component->IsInitialized()) + { + result.state = ComponentStateUnintialized; + return result; + } + if(!component->IsAvailable()) + { + result.state = ComponentStateUnavailable; + return result; + } + result.state = ComponentStateAvailable; + return result; +} + + #endif // MPT_COMPONENT_MANAGER Modified: trunk/OpenMPT/common/ComponentManager.h =================================================================== --- trunk/OpenMPT/common/ComponentManager.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/common/ComponentManager.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -30,6 +30,7 @@ enum ComponentType { + ComponentTypeUnknown = 0, ComponentTypeBuiltin, // PortAudio ComponentTypeSystem, // uxtheme.dll, mf.dll ComponentTypeSystemInstallable, // acm mp3 codec @@ -56,7 +57,6 @@ public: - virtual std::string GetSettingsKey() const = 0; virtual ComponentType GetType() const = 0; virtual bool IsInitialized() const = 0; // Initialize() has been called @@ -230,6 +230,7 @@ virtual ~IComponentFactory() { } public: virtual std::string GetID() const = 0; + virtual std::string GetSettingsKey() const = 0; virtual MPT_SHARED_PTR<IComponent> Construct(ComponentManager &componentManager) const = 0; virtual ComponentFactoryMethod GetStaticConstructor() const = 0; }; @@ -240,12 +241,14 @@ { private: std::string m_ID; + std::string m_SettingsKey; protected: - ComponentFactoryBase(const std::string &id); - static void Initialize(ComponentManager &componentManager, MPT_SHARED_PTR<IComponent> component); + ComponentFactoryBase(const std::string &id, const std::string &settingsKey); + void Initialize(ComponentManager &componentManager, MPT_SHARED_PTR<IComponent> component) const; public: virtual ~ComponentFactoryBase(); virtual std::string GetID() const; + virtual std::string GetSettingsKey() const; virtual MPT_SHARED_PTR<IComponent> Construct(ComponentManager &componentManager) const = 0; virtual ComponentFactoryMethod GetStaticConstructor() const = 0; }; @@ -256,8 +259,8 @@ : public ComponentFactoryBase { public: - ComponentFactory(const std::string &id) - : ComponentFactoryBase(id) + ComponentFactory() + : ComponentFactoryBase(T::g_ID, T::g_SettingsKey) { return; } @@ -268,14 +271,14 @@ public: virtual MPT_SHARED_PTR<IComponent> Construct(ComponentManager &componentManager) const { - return StaticConstruct(componentManager); - } - static MPT_SHARED_PTR<IComponent> StaticConstruct(ComponentManager &componentManager) - { MPT_SHARED_PTR<IComponent> component = mpt::make_shared<T>(); Initialize(componentManager, component); return component; } + static MPT_SHARED_PTR<IComponent> StaticConstruct(ComponentManager &componentManager) + { + return ComponentFactory().Construct(componentManager); + } virtual ComponentFactoryMethod GetStaticConstructor() const { return &StaticConstruct; @@ -302,6 +305,25 @@ }; +enum ComponentState +{ + ComponentStateUnregistered, + ComponentStateBlocked, + ComponentStateUnintialized, + ComponentStateUnavailable, + ComponentStateAvailable, +}; + + +struct ComponentInfo +{ + std::string name; + ComponentState state; + std::string settingsKey; + ComponentType type; +}; + + class ComponentManager { friend class ComponentFactoryBase; @@ -314,6 +336,7 @@ private: struct RegisteredComponent { + std::string settingsKey; ComponentFactoryMethod factoryMethod; MPT_SHARED_PTR<IComponent> instance; }; @@ -321,11 +344,14 @@ const IComponentManagerSettings &m_Settings; TComponentMap m_Components; private: + bool IsComponentBlocked(const std::string &settingsKey) const; void InitializeComponent(MPT_SHARED_PTR<IComponent> component) const; public: void Register(const IComponentFactory &componentFactory); void Startup(); MPT_SHARED_PTR<IComponent> GetComponent(const IComponentFactory &componentFactory); + std::vector<std::string> GetRegisteredComponents() const; + ComponentInfo GetComponentInfo(std::string name) const; }; @@ -337,23 +363,24 @@ bool ComponentListPush(ComponentListEntry *entry); -#define MPT_DECLARE_COMPONENT_MEMBERS public: static const char * const g_ID; +#define MPT_DECLARE_COMPONENT_MEMBERS public: static const char * const g_ID; static const char * const g_SettingsKey; -#define MPT_REGISTERED_COMPONENT(name) \ +#define MPT_REGISTERED_COMPONENT(name, settingsKey) \ static void RegisterComponent ## name (ComponentManager &componentManager) \ { \ - componentManager.Register(ComponentFactory< name >( #name )); \ + componentManager.Register(ComponentFactory< name >()); \ } \ static ComponentListEntry Component ## name ## ListEntry = { nullptr, & RegisterComponent ## name }; \ static bool Component ## name ## Registered = ComponentListPush(& Component ## name ## ListEntry ); \ const char * const name :: g_ID = #name ; \ + const char * const name :: g_SettingsKey = settingsKey ; \ /**/ template <typename type> MPT_SHARED_PTR<type> GetComponent() { - return MPT_DYNAMIC_POINTER_CAST<type>(ComponentManager::Instance()->GetComponent(ComponentFactory<type>(type::g_ID))); + return MPT_DYNAMIC_POINTER_CAST<type>(ComponentManager::Instance()->GetComponent(ComponentFactory<type>())); } @@ -362,7 +389,7 @@ #define MPT_DECLARE_COMPONENT_MEMBERS -#define MPT_REGISTERED_COMPONENT(name) +#define MPT_REGISTERED_COMPONENT(name, settingsKey) template <typename type> Modified: trunk/OpenMPT/mptrack/AboutDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/AboutDialog.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/AboutDialog.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -280,9 +280,10 @@ m_Tab.SubclassDlgItem(IDC_TABABOUT, this); m_Tab.InsertItem(TCIF_TEXT, 0, _T("OpenMPT"), 0, 0, 0, 0); - m_Tab.InsertItem(TCIF_TEXT, 1, _T("Credits"), 0, 0, 0, 0); - m_Tab.InsertItem(TCIF_TEXT, 2, _T("License"), 0, 0, 0, 0); - m_Tab.InsertItem(TCIF_TEXT, 3, _T("Contact"), 0, 0, 0, 0); + m_Tab.InsertItem(TCIF_TEXT, 1, _T("Components"), 0, 0, 0, 0); + m_Tab.InsertItem(TCIF_TEXT, 2, _T("Credits"), 0, 0, 0, 0); + m_Tab.InsertItem(TCIF_TEXT, 3, _T("License"), 0, 0, 0, 0); + m_Tab.InsertItem(TCIF_TEXT, 4, _T("Contact"), 0, 0, 0, 0); m_Tab.SetCurSel(0); m_CheckScroll.SetCheck(TrackerSettings::Instance().MiscAboutScrollText ? BST_CHECKED : BST_UNCHECKED); @@ -293,12 +294,12 @@ mpt::ustring text; text += GetTabText(0); text += MPT_USTRING("\n\n\n"); - text += GetTabText(1); + text += GetTabText(2); text += MPT_USTRING("\n\n\n"); + text += GetTabText(4); + text += MPT_USTRING("\n\n\n"); text += GetTabText(3); text += MPT_USTRING("\n\n\n"); - text += GetTabText(2); - text += MPT_USTRING("\n\n\n"); m_static.SetCredits(mpt::ToCString(mpt::String::Replace(text, MPT_USTRING("\n"), MPT_USTRING("|")))); m_static.StartScrolling(); @@ -411,12 +412,78 @@ text += MPT_UFORMAT("Settings%2: %1", theApp.GetConfigFileName(), theApp.IsPortableMode() ? MPT_USTRING(" (portable)") : MPT_USTRING("")) + lf; break; case 1: + { + if(!TrackerSettings::Instance().ComponentsKeepLoaded) + { + text += MPT_USTRING("Components are loaded and unloaded as needed.") + lf; + text += lf; + std::vector<std::string> components = ComponentManager::Instance()->GetRegisteredComponents(); + for(std::size_t i = 0; i < components.size(); ++i) + { + ComponentInfo info = ComponentManager::Instance()->GetComponentInfo(components[i]); + mpt::ustring name = mpt::ToUnicode(mpt::CharsetASCII, (info.name.substr(0, 9) == "Component") ? info.name.substr(9) : info.name); + if(!info.settingsKey.empty()) + { + name = mpt::ToUnicode(mpt::CharsetASCII, info.settingsKey); + } + text += name + lf; + } + } else + { + std::vector<std::string> components = ComponentManager::Instance()->GetRegisteredComponents(); + for(int available = 1; available >= 0; --available) + { + if(available) + { + text += MPT_USTRING("Loaded Components:") + lf; + } else + { + text += lf; + text += MPT_USTRING("Unloaded Components:") + lf; + } + for(std::size_t i = 0; i < components.size(); ++i) + { + ComponentInfo info = ComponentManager::Instance()->GetComponentInfo(components[i]); + if(available && info.state != ComponentStateAvailable) continue; + if(!available && info.state == ComponentStateAvailable) continue; + mpt::ustring name = mpt::ToUnicode(mpt::CharsetASCII, (info.name.substr(0, 9) == "Component") ? info.name.substr(9) : info.name); + if(!info.settingsKey.empty()) + { + name = mpt::ToUnicode(mpt::CharsetASCII, info.settingsKey); + } + text += MPT_UFORMAT("%1: %2" + , name + , info.state == ComponentStateAvailable ? MPT_USTRING("ok") : + info.state == ComponentStateUnavailable? MPT_USTRING("missing") : + info.state == ComponentStateUnintialized ? MPT_USTRING("not loaded") : + info.state == ComponentStateBlocked ? MPT_USTRING("blocked") : + info.state == ComponentStateUnregistered ? MPT_USTRING("unregistered") : + MPT_USTRING("unknown") + ); + if(info.type != ComponentTypeUnknown) + { + text += MPT_UFORMAT(" (%1)" + , info.type == ComponentTypeBuiltin ? MPT_USTRING("builtin") : + info.type == ComponentTypeSystem ? MPT_USTRING("system") : + info.type == ComponentTypeSystemInstallable ? MPT_USTRING("system, optional") : + info.type == ComponentTypeBundled ? MPT_USTRING("bundled") : + info.type == ComponentTypeForeign ? MPT_USTRING("foreign") : + MPT_USTRING("unknown") + ); + } + text += lf; + } + } + } + } + break; + case 2: text += mpt::ToUnicode(mpt::CharsetUTF8, MptVersion::GetFullCreditsString()); break; - case 2: + case 3: text += mpt::ToUnicode(mpt::CharsetUTF8, MptVersion::GetLicenseString()); break; - case 3: + case 4: text += mpt::ToUnicode(mpt::CharsetUTF8, MptVersion::GetContactString()); break; } Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -1823,9 +1823,8 @@ { return; } - std::string GetSettingsKey() const { return "SoundTouch"; } }; -MPT_REGISTERED_COMPONENT(ComponentSoundTouch) +MPT_REGISTERED_COMPONENT(ComponentSoundTouch, "SoundTouch") int CCtrlSamples::TimeStretch(float ratio) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -750,7 +750,7 @@ }; -MPT_REGISTERED_COMPONENT(ComponentUXTheme) +MPT_REGISTERED_COMPONENT(ComponentUXTheme, "UXTheme") // Move a config file called sFileName from the App's directory (or one of its sub directories specified by sSubDir) to Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/Mptrack.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -152,7 +152,6 @@ MPT_DECLARE_COMPONENT_MEMBERS public: ComponentUXTheme() : ComponentSystemDLL(MPT_PATHSTRING("uxtheme")) { } - std::string GetSettingsKey() const { return "UXTheme"; } }; //============================= Modified: trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -334,8 +334,6 @@ return; } - std::string GetSettingsKey() const { return "LibMP3Lame"; } - protected: bool DoInitialize() @@ -470,7 +468,7 @@ return traits; } }; -MPT_REGISTERED_COMPONENT(ComponentLame) +MPT_REGISTERED_COMPONENT(ComponentLame, "LibMP3Lame") class MP3LameStreamWriter : public StreamWriterBase { @@ -679,8 +677,6 @@ return; } - std::string GetSettingsKey() const { return "BladeEnc"; } - protected: bool DoInitialize() @@ -767,7 +763,7 @@ return traits; } }; -MPT_REGISTERED_COMPONENT(ComponentBlade) +MPT_REGISTERED_COMPONENT(ComponentBlade, "BladeEnc") class MP3BladeStreamWriter : public StreamWriterBase { @@ -951,8 +947,6 @@ return; } - std::string GetSettingsKey() const { return "ACM_MP3"; } - protected: bool DoInitialize() @@ -1219,7 +1213,7 @@ return traits; } }; -MPT_REGISTERED_COMPONENT(ComponentAcmMP3) +MPT_REGISTERED_COMPONENT(ComponentAcmMP3, "ACM_MP3") class MP3AcmStreamWriter : public StreamWriterBase { Modified: trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -70,8 +70,6 @@ return; } - std::string GetSettingsKey() const { return "Opus"; } - protected: bool DoInitialize() @@ -157,7 +155,7 @@ } }; -MPT_REGISTERED_COMPONENT(ComponentOpus) +MPT_REGISTERED_COMPONENT(ComponentOpus, "Opus") Modified: trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -74,8 +74,6 @@ return; } - std::string GetSettingsKey() const { return "Vorbis"; } - protected: bool DoInitialize() @@ -181,7 +179,7 @@ return traits; } }; -MPT_REGISTERED_COMPONENT(ComponentVorbis) +MPT_REGISTERED_COMPONENT(ComponentVorbis, "Vorbis") #ifndef NO_OGG Modified: trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp =================================================================== --- trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -69,9 +69,9 @@ } -MPT_REGISTERED_COMPONENT(ComponentPluginBridge32) +MPT_REGISTERED_COMPONENT(ComponentPluginBridge32, "PluginBridge32") -MPT_REGISTERED_COMPONENT(ComponentPluginBridge64) +MPT_REGISTERED_COMPONENT(ComponentPluginBridge64, "PluginBridge64") // Check whether we need to load a 32-bit or 64-bit wrapper. Modified: trunk/OpenMPT/pluginBridge/BridgeWrapper.h =================================================================== --- trunk/OpenMPT/pluginBridge/BridgeWrapper.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/pluginBridge/BridgeWrapper.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -47,7 +47,6 @@ MPT_DECLARE_COMPONENT_MEMBERS public: ComponentPluginBridge32() : ComponentPluginBridge(32) { } - std::string GetSettingsKey() const { return "PluginBridge32"; } }; class ComponentPluginBridge64 @@ -56,7 +55,6 @@ MPT_DECLARE_COMPONENT_MEMBERS public: ComponentPluginBridge64() : ComponentPluginBridge(64) { } - std::string GetSettingsKey() const { return "PluginBridge64"; } }; class BridgeWrapper : protected BridgeCommon Modified: trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -31,7 +31,7 @@ #ifndef NO_ASIO -MPT_REGISTERED_COMPONENT(ComponentASIO) +MPT_REGISTERED_COMPONENT(ComponentASIO, "ASIO") static const double AsioSampleRateTolerance = 0.05; Modified: trunk/OpenMPT/sounddev/SoundDeviceASIO.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceASIO.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceASIO.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -33,7 +33,6 @@ public: ComponentASIO() { } virtual ~ComponentASIO() { } - std::string GetSettingsKey() const { return "ASIO"; } virtual bool DoInitialize() { return true; } }; Modified: trunk/OpenMPT/sounddev/SoundDeviceDirectSound.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceDirectSound.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceDirectSound.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -29,7 +29,7 @@ #ifndef NO_DSOUND -MPT_REGISTERED_COMPONENT(ComponentDirectSound) +MPT_REGISTERED_COMPONENT(ComponentDirectSound, "DirectSound") Modified: trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -32,7 +32,6 @@ public: ComponentDirectSound() { } virtual ~ComponentDirectSound() { } - std::string GetSettingsKey() const { return "DirectSound"; } virtual bool DoInitialize() { return true; } }; Modified: trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -582,7 +582,7 @@ #endif // MPT_COMPILER_MSVC -MPT_REGISTERED_COMPONENT(ComponentPortAudio) +MPT_REGISTERED_COMPONENT(ComponentPortAudio, "PortAudio") ComponentPortAudio::ComponentPortAudio() Modified: trunk/OpenMPT/sounddev/SoundDevicePortAudio.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDevicePortAudio.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDevicePortAudio.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -109,7 +109,6 @@ public: ComponentPortAudio(); virtual ~ComponentPortAudio(); - std::string GetSettingsKey() const { return "PortAudio"; } virtual bool DoInitialize(); bool ReInit(); }; Modified: trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -27,7 +27,7 @@ #if MPT_OS_WINDOWS -MPT_REGISTERED_COMPONENT(ComponentWaveOut) +MPT_REGISTERED_COMPONENT(ComponentWaveOut, "WaveOut") static const std::size_t WAVEOUT_MINBUFFERS = 3; Modified: trunk/OpenMPT/sounddev/SoundDeviceWaveout.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-06-17 13:56:08 UTC (rev 5330) @@ -35,7 +35,6 @@ public: ComponentWaveOut() { } virtual ~ComponentWaveOut() { } - std::string GetSettingsKey() const { return "WaveOut"; } virtual bool DoInitialize() { return true; } }; Modified: trunk/OpenMPT/soundlib/Load_mo3.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mo3.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/soundlib/Load_mo3.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -53,7 +53,6 @@ } public: ComponentUnMO3() : ComponentLibrary(ComponentTypeForeign) { } - std::string GetSettingsKey() const { return "UnMO3"; } bool DoInitialize() { #ifdef MPT_LINKED_UNMO3 @@ -79,7 +78,7 @@ #endif } }; -MPT_REGISTERED_COMPONENT(ComponentUnMO3) +MPT_REGISTERED_COMPONENT(ComponentUnMO3, "UnMO3") #endif // !NO_MO3 Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp 2015-06-17 09:58:25 UTC (rev 5329) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2015-06-17 13:56:08 UTC (rev 5330) @@ -2497,7 +2497,6 @@ }; public: ComponentMPG123() : ComponentLibrary(ComponentTypeForeign) { } - std::string GetSettingsKey() const { return "Mpg123"; } bool DoInitialize() { AddLibrary("mpg123", mpt::LibraryPath::AppFullName(MPT_PATHSTRING("libmpg123-0"))); @@ -2524,7 +2523,7 @@ return true; } }; -MPT_REGISTERED_COMPONENT(ComponentMPG123) +MPT_REGISTERED_COMPONENT(ComponentMPG123, "Mpg123") #endif // NO_MP3_SAMPLES This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-24 19:55:52
|
Revision: 5349 http://sourceforge.net/p/modplug/code/5349 Author: saga-games Date: 2015-06-24 19:55:47 +0000 (Wed, 24 Jun 2015) Log Message: ----------- [New] VST: Plugins can query the project path, but sometimes it may be inconvenient if the plugin puts its data right next to the module file. Using the hidden option [VST Plugins]ProjectPath, a custom subfolder (whose name consists of the module name plus the value of this setting) can be used for storing these files instead (tx zetaPRIME). [New] Plugin Bridge: Implement audioMasterGetChunkFile opcode. Modified Paths: -------------- trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/pluginBridge/Bridge.cpp Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-19 20:56:58 UTC (rev 5348) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-24 19:55:47 UTC (rev 5349) @@ -306,6 +306,7 @@ // Plugins , bridgeAllPlugins(conf, "VST Plugins", "BridgeAllPlugins", false) , enableAutoSuspend(conf, "VST Plugins", "EnableAutoSuspend", false) + , pluginProjectPath(conf, "VST Plugins", "ProjectPath", mpt::PathString()) // Update , UpdateLastUpdateCheck(conf, "Update", "LastUpdateCheck", mpt::Date::Unix(time_t())) , UpdateUpdateCheckPeriod(conf, "Update", "UpdateCheckPeriod", CUpdateCheck::GetUpdateCheckPeriod()) Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-19 20:56:58 UTC (rev 5348) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-24 19:55:47 UTC (rev 5349) @@ -677,6 +677,7 @@ Setting<bool> bridgeAllPlugins; Setting<bool> enableAutoSuspend; + Setting<mpt::PathString> pluginProjectPath; // Update Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-19 20:56:58 UTC (rev 5348) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-24 19:55:47 UTC (rev 5349) @@ -456,11 +456,27 @@ // get the native path of currently loading bank or project // (called from writeChunk) void* in <ptr> (char[2048], or sizeof(FSSpec)) - DEPRECATED in VST 2.4 + // Note: The shortcircuit VSTi actually uses this feature. case audioMasterGetChunkFile: #ifdef MODPLUG_TRACKER if(pVstPlugin && pVstPlugin->GetModDoc()) { - strcpy(ptr, pVstPlugin->GetModDoc()->GetPathNameMpt().ToLocale().c_str()); + mpt::PathString path = pVstPlugin->GetModDoc()->GetPathNameMpt(); + if(path.empty()) + { + return 0; + } + mpt::PathString projectPath = TrackerSettings::Instance().pluginProjectPath; + if(!projectPath.empty()) + { + // Project files should be stored in a sub directory. + // Sub directory name is original filename + custom addition. + path += projectPath; + path.EnsureTrailingSlash(); + ::CreateDirectoryW(path.AsNative().c_str(), nullptr); + path += pVstPlugin->GetModDoc()->GetPathNameMpt().GetFullFileName(); + } + strcpy(ptr, path.ToLocale().c_str()); return 1; } #endif Modified: trunk/OpenMPT/pluginBridge/Bridge.cpp =================================================================== --- trunk/OpenMPT/pluginBridge/Bridge.cpp 2015-06-19 20:56:58 UTC (rev 5348) +++ trunk/OpenMPT/pluginBridge/Bridge.cpp 2015-06-24 19:55:47 UTC (rev 5349) @@ -1039,7 +1039,12 @@ break; case audioMasterEditFile: + break; + case audioMasterGetChunkFile: + // Name in [ptr] + ptrOut = 256; + dispatchData.insert(dispatchData.end(), ptrC, ptrC + ptrOut); break; default: @@ -1119,6 +1124,11 @@ // VstFileSelect* in [ptr] // TODO break; + + case audioMasterGetChunkFile: + // Name in [ptr] + strcpy(ptr, extraData); + break; } return static_cast<VstIntPtr>(resultMsg->result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-02 22:54:35
|
Revision: 696 http://modplug.svn.sourceforge.net/modplug/?rev=696&view=rev Author: saga-games Date: 2010-09-02 22:54:25 +0000 (Thu, 02 Sep 2010) Log Message: ----------- [Mod] Original mix mode now also has a version number (1.16), so that it's clear what the "original" thing is. [Ref] Making use of MAX_GLOBAL_VOLUME as nobody did before. :) [Ref] Small changes (mostly readability / strings) here and there. Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_com.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/soundlib/LOAD_DSM.CPP trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/Load_psm.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -930,7 +930,7 @@ // Global vars pSndFile->m_nDefaultTempo = 125; pSndFile->m_nDefaultSpeed = 6; - pSndFile->m_nDefaultGlobalVolume = 256; + pSndFile->m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; pSndFile->m_nSamplePreAmp = 48; pSndFile->m_nVSTiVolume = 48; pSndFile->m_nRestartPos = 0; Modified: trunk/OpenMPT/mptrack/Ctrl_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_com.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Ctrl_com.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -174,11 +174,11 @@ if (ln > LINE_LENGTH-1) ln = LINE_LENGTH-1; s[ln] = 0; while ((ln > 0) && (((BYTE)s[ln-1]) <= ' ')) s[--ln] = 0; - if (i+1 < n) strcat(s, "\x0D"); + if (i+1 < n) strcat(s, "\r"); strcat(p, s); } UINT len = strlen(p); - while ((len > 0) && ((p[len-1] == ' ') || (p[len-1] == '\x0D'))) + while ((len > 0) && ((p[len-1] == ' ') || (p[len-1] == '\r'))) { len--; p[len] = 0; Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -299,7 +299,7 @@ PATTERNINDEX n = pSndFile->Order[m_nScrollPos]; if ((n < pSndFile->Patterns.Size()) && (pSndFile->Patterns[n]) && !bShiftClick) { - BOOL bIsPlaying = (pMainFrm->GetModPlaying() == m_pModDoc); + bool bIsPlaying = (pMainFrm->GetModPlaying() == m_pModDoc); if ((bIsPlaying) && (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP)) { BEGIN_CRITICAL(); @@ -522,8 +522,8 @@ } -static const char szClipboardOrdersHdr[] = "OpenMPT %3s\x0D\x0A"; -static const char szClipboardOrdCountFieldHdr[] = "OrdNum: %u\x0D\x0A"; +static const char szClipboardOrdersHdr[] = "OpenMPT %3s\r\n"; +static const char szClipboardOrdCountFieldHdr[] = "OrdNum: %u\r\n"; static const char szClipboardOrdersFieldHdr[] = "OrdLst: "; @@ -554,7 +554,7 @@ if (dwMemSize > sizeof(szClipboardOrdersHdr) && memcmp(p, "OpenMPT ", 8) == 0 && - memcmp(p + 11, "\x0D\x0A", 2) == 0) + memcmp(p + 11, "\r\n", 2) == 0) { char buf[8]; p += sizeof(szClipboardOrdersHdr) - 1; Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -1776,6 +1776,7 @@ break; } AfxMessageBox(str, MB_ICONERROR); + return; } // Update sample view Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2010-09-02 22:54:25 UTC (rev 696) @@ -183,7 +183,7 @@ #define PATTERN_KBDNOTEOFF 0x40000 // Record note-off events #define PATTERN_FOLLOWSONGOFF 0x80000 // follow song off by default #define PATTERN_MIDIRECORD 0x100000 // MIDI Record on by default -//#define PATTERN_ALTERNTIVEBPMSPEED 0x200000 // deprecated +//#define PATTERN_ALTERNTIVEBPMSPEED 0x200000 // deprecated //#define PATTERN_HILITETIMESIGS 0x400000 // highlight on song signature, deprecated (now always enabled) #define PATTERN_OLDCTXMENUSTYLE 0x800000 // mpt 1.16 pattern context menu style #define PATTERN_SYNCMUTE 0x1000000 // maintain sample sync on mute Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -666,12 +666,12 @@ if(m_SndFile.m_nMixLevels == mixLevels_original) { - m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = 256; + m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 48; } else { - m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = 128; + m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME / 2; m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 128; } @@ -938,7 +938,7 @@ UINT nPlugin = 0; if (pChn->pModInstrument) - nPlugin = pChn->pModInstrument->nMixPlug; // first try intrument VST + nPlugin = pChn->pModInstrument->nMixPlug; // first try instrument VST if ((!nPlugin) || (nPlugin > MAX_MIXPLUGINS) && (nCurrentChn >=0)) nPlugin = m_SndFile.ChnSettings[nCurrentChn].nMixPlugin; // Then try Channel VST @@ -1451,7 +1451,7 @@ // Saving as wave file - // Keep position of the caracter just before ".wav" in path string + // Keep position of the character just before ".wav" in path string size_t p = strlen(sFilename) - 4; TCHAR sFilenameAdd[_MAX_PATH] = _T(""); @@ -3194,7 +3194,10 @@ for(int j = 0; j < 128; j++) { if(strncmp(&szPatterns[j * 32], &szMidiZXXExt[j * 32], 32)) + { bFound = false; + break; + } } if(bFound) return i; } Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -334,7 +334,7 @@ // Not supported in MOD format m_SndFile.m_nDefaultSpeed = 6; m_SndFile.m_nDefaultTempo = 125; - m_SndFile.m_nDefaultGlobalVolume = 256; + m_SndFile.m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_SndFile.m_nSamplePreAmp = 48; m_SndFile.m_nVSTiVolume = 48; AddToLog("WARNING: Default speed, tempo and global volume will be lost.\n"); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -595,7 +595,7 @@ {PATTERN_FLATBUTTONS, "Flat Buttons", "Use flat buttons in toolbars"}, {PATTERN_SINGLEEXPAND, "Single click to expand tree", "Single-clicking in the left tree view will expand a branch"}, {PATTERN_MUTECHNMODE, "Ignored muted channels", "Notes will not be played on muted channels (unmuting will only start on a new note)."}, - {PATTERN_NOEXTRALOUD, "No loud samples", "Disable loud playback of samples in the sample/instrument editor. Sample volume depends on the sample volume slider on the general tab when activated."}, + {PATTERN_NOEXTRALOUD, "No loud samples", "Disable loud playback of samples in the sample/instrument editor. Sample volume depends on the sample volume slider on the general tab when activated (if activated, a sample volume of 256 is used)."}, {PATTERN_SHOWPREVIOUS, "Show Prev/Next patterns", "Displays grayed-out version of the previous/next patterns in the pattern editor. Does not work if \"always center active row\" is disabled."}, {PATTERN_CONTSCROLL, "Continuous scroll", "Jumps to the next pattern when moving past the end of a pattern"}, {PATTERN_KBDNOTEOFF, "Record note off", "Record note off when a key is released on the PC keyboard (Only works in instrument mode)."}, Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -1734,8 +1734,8 @@ Phi = t; spdx = 70000 + Sinus(Phi) * 10000 / 256; spdy = 0; - //spdx =(Cosinus(Phi)+Sinus(Phi<<2))*(Dist<<9)/sizex; - //spdy =(Sinus(Phi)+Cosinus(Phi>>2))*(Dist<<9)/sizey; + spdx =(Cosinus(Phi)+Sinus(Phi<<2))*(Dist<<9)/sizex; + spdy =(Sinus(Phi)+Cosinus(Phi>>2))*(Dist<<9)/sizey; srcx = 0x800000 - ((spdx * sizex) >> 1) + (spdy * sizey); srcy = 0x800000 - ((spdy * sizex) >> 1) + (spdx * sizey); for (UINT y=sizey; y; y--) Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -2460,6 +2460,7 @@ } // Get a pointer to the currently selected envelope. +// This function also implicitely validates the moddoc and soundfile pointers. INSTRUMENTENVELOPE *CViewInstrument::GetEnvelopePtr() const //--------------------------------------------------------- { Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -181,11 +181,11 @@ default: m_TempoModeBox.SetCurSel(0); break; } - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC3"), mixLevels_117RC3); - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC2"), mixLevels_117RC2); - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC1"), mixLevels_117RC1); - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Original"), mixLevels_original); - //m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Test"), mixLevels_Test); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC3"), mixLevels_117RC3); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC2"), mixLevels_117RC2); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC1"), mixLevels_117RC1); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Original (MPT 1.16)"), mixLevels_original); + //m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Test"), mixLevels_Test); switch(m_pSndFile->m_nMixLevels) { //case mixLevels_Test: m_PlugMixBox.SetCurSel(4); break; @@ -419,7 +419,7 @@ if(maxChans < m_pSndFile->GetNumChannels()) { - if(MessageBox("New modtype supports less channels than currently used, and reducing channel number is required. Continue?", "", MB_OKCANCEL) != IDOK) + if(MessageBox("New module type supports less channels than currently used, and reducing channel number is required. Continue?", "", MB_OKCANCEL) != IDOK) return false; } Modified: trunk/OpenMPT/soundlib/LOAD_DSM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2010-09-02 22:54:25 UTC (rev 696) @@ -108,7 +108,7 @@ m_nDefaultSpeed = psong->speed; m_nDefaultTempo = psong->bpm; m_nDefaultGlobalVolume = psong->globalvol << 2; - if ((!m_nDefaultGlobalVolume) || (m_nDefaultGlobalVolume > 256)) m_nDefaultGlobalVolume = 256; + if ((!m_nDefaultGlobalVolume) || (m_nDefaultGlobalVolume > MAX_GLOBAL_VOLUME)) m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_nSamplePreAmp = psong->mastervol & 0x7F; Order.ReadAsByte(psong->orders, psong->numord, sizeof(psong->orders)); Modified: trunk/OpenMPT/soundlib/Load_far.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_far.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_far.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -85,7 +85,7 @@ m_nSamplePreAmp = 0x20; m_nDefaultSpeed = pmh1->speed; m_nDefaultTempo = 80; - m_nDefaultGlobalVolume = 256; + m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; memcpy(m_szNames[0], pmh1->songname, 31); SpaceToNullStringFixed(m_szNames[0], 31); Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -506,7 +506,7 @@ if((pifh->cwtv & 0xF000) == 0x5000) { // OpenMPT Version number (Major.Minor) - // This will only be interpreted as "made with modplug" (i.e. disable compatible playback etc) if the "reserved" field is set to "OMPT" - else, compatibility was used. + // This will only be interpreted as "made with ModPlug" (i.e. disable compatible playback etc) if the "reserved" field is set to "OMPT" - else, compatibility was used. m_dwLastSavedWithVersion = (pifh->cwtv & 0x0FFF) << 16; if(pifh->reserved == LittleEndian(IT_OMPT)) interpretModPlugMade = true; @@ -572,7 +572,7 @@ // Global Volume m_nDefaultGlobalVolume = pifh->globalvol << 1; - if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256; + if (m_nDefaultGlobalVolume > MAX_GLOBAL_VOLUME) m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; if (pifh->speed) m_nDefaultSpeed = pifh->speed; m_nDefaultTempo = max(32, pifh->tempo); // tempo 31 is possible. due to conflicts with the rest of the engine, let's just clamp it to 32. m_nSamplePreAmp = min(pifh->mv, 128); Modified: trunk/OpenMPT/soundlib/Load_mid.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_mid.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -556,7 +556,7 @@ tempo = ConvertMidiTempo(nTempoUsec, &nTickMultiplier); m_nDefaultTempo = tempo; m_nDefaultSpeed = gnMidiImportSpeed; - m_nDefaultGlobalVolume = 256; + m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; midimastervol = m_nDefaultGlobalVolume; #ifdef MIDI_LOG Modified: trunk/OpenMPT/soundlib/Load_okt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_okt.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -381,7 +381,7 @@ return false; m_nDefaultTempo = 125; - m_nDefaultGlobalVolume = 256; + m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_nSamplePreAmp = m_nVSTiVolume = 48; m_nType = MOD_TYPE_OKT; m_nMinPeriod = 0x71 << 2; Modified: trunk/OpenMPT/soundlib/Load_psm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_psm.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_psm.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -889,7 +889,7 @@ m_nType = MOD_TYPE_S3M; m_nChannels = min(max(shdr->numChannelsPlay, shdr->numChannelsReal), MAX_BASECHANNELS); m_nMasterVolume = shdr->masterVolume; - m_nDefaultGlobalVolume = 256; + m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_nDefaultSpeed = shdr->songSpeed; m_nDefaultTempo = shdr->songTempo; Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_s3m.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -276,8 +276,8 @@ m_nDefaultTempo = CLAMP(m_nDefaultTempo, 32, 255); // Global Volume m_nDefaultGlobalVolume = psfh.globalvol << 2; - if(!m_nDefaultGlobalVolume && psfh.cwtv < 0x1320) m_nDefaultGlobalVolume = 256; // not very reliable, but it fixes a few tunes - if(m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256; + if(!m_nDefaultGlobalVolume && psfh.cwtv < 0x1320) m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; // not very reliable, but it fixes a few tunes + if(m_nDefaultGlobalVolume > MAX_GLOBAL_VOLUME) m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_nSamplePreAmp = CLAMP(psfh.mastervol & 0x7F, 0x10, 0x7F); // Bit 8 = Stereo (we always use stereo) // Channels m_nChannels = 4; Modified: trunk/OpenMPT/soundlib/Load_stm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_stm.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Load_stm.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -82,7 +82,7 @@ if (m_nDefaultSpeed < 1) m_nDefaultSpeed = 1; m_nDefaultTempo = 125; m_nDefaultGlobalVolume = phdr->globalvol << 2; - if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256; + if (m_nDefaultGlobalVolume > MAX_GLOBAL_VOLUME) m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; Order.ReadAsByte(phdr->patorder, 128, 128); // Setting up channels for (UINT nSet=0; nSet<4; nSet++) Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -527,8 +527,8 @@ m_nInstruments = 0; m_nFreqFactor = m_nTempoFactor = 128; m_nMasterVolume = 128; - m_nDefaultGlobalVolume = 256; - m_nGlobalVolume = 256; + m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; + m_nGlobalVolume = MAX_GLOBAL_VOLUME; m_nOldGlbVolSlide = 0; m_nDefaultSpeed = 6; m_nDefaultTempo = 125; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Sndfile.h 2010-09-02 22:54:25 UTC (rev 696) @@ -574,7 +574,8 @@ bool m_bIsRendering; UINT m_nMixChannels, m_nMixStat, m_nBufferCount; double m_dBufferDiff; - UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay; + UINT m_nTickCount, m_nTotalCount; + UINT m_nPatternDelay, m_nFrameDelay; // m_nPatternDelay = pattern delay, m_nFrameDelay = fine pattern delay ULONG m_lTotalSampleCount; // rewbs.VSTTimeInfo UINT m_nSamplesPerTick; // rewbs.betterBPM ROWINDEX m_nDefaultRowsPerBeat, m_nDefaultRowsPerMeasure; // default rows per beat and measure for this module // rewbs.betterBPM Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2010-09-02 13:02:16 UTC (rev 695) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2010-09-02 22:54:25 UTC (rev 696) @@ -1799,7 +1799,8 @@ #define kChnMasterVol nMasterVol #endif // MODPLUG_TRACKER // Adjusting volumes - if (gnChannels >= 2) { + if (gnChannels >= 2) + { int pan = ((int)pChn->nRealPan) - 128; pan *= (int)m_nStereoSeparation; pan /= 128; @@ -1810,27 +1811,34 @@ #endif LONG realvol; - if (m_pConfig->getUseGlobalPreAmp()) { + if (m_pConfig->getUseGlobalPreAmp()) + { realvol = (pChn->nRealVolume * kChnMasterVol) >> 7; - } else { + } else + { //Extra attenuation required here if we're bypassing pre-amp. realvol = (pChn->nRealVolume * kChnMasterVol) >> 8; } - if (m_pConfig->getForceSoftPanning() || gdwSoundSetup & SNDMIX_SOFTPANNING) { - if (pan < 128) { + if (m_pConfig->getForceSoftPanning() || (gdwSoundSetup & SNDMIX_SOFTPANNING)) + { + if (pan < 128) + { pChn->nNewLeftVol = (realvol * pan) >> 8; pChn->nNewRightVol = (realvol * 128) >> 8; - } else { + } else + { pChn->nNewLeftVol = (realvol * 128) >> 8; pChn->nNewRightVol = (realvol * (256 - pan)) >> 8; } - } else { + } else + { pChn->nNewLeftVol = (realvol * pan) >> 8; pChn->nNewRightVol = (realvol * (256 - pan)) >> 8; } - } else { + } else + { pChn->nNewRightVol = (pChn->nRealVolume * kChnMasterVol) >> 8; pChn->nNewLeftVol = pChn->nNewRightVol; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-02 23:45:54
|
Revision: 698 http://modplug.svn.sourceforge.net/modplug/?rev=698&view=rev Author: saga-games Date: 2010-09-02 23:45:48 +0000 (Thu, 02 Sep 2010) Log Message: ----------- [Fix] Call to uxtheme.dll should now also be secure. [Fix] Path for unmo3.dll could be one char too long (since rev.691). Modified Paths: -------------- trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/soundlib/Load_mo3.cpp Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2010-09-02 23:00:19 UTC (rev 697) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2010-09-02 23:45:48 UTC (rev 698) @@ -1540,16 +1540,24 @@ if(!bUxInited) { - HMODULE uxlib = LoadLibrary(_T("uxtheme.dll")); + // retrieve path for uxtheme.dll... + TCHAR szPath[MAX_PATH]; + SHGetSpecialFolderPath(0, szPath, CSIDL_SYSTEM, FALSE); + strncat(szPath, _TEXT("\\uxtheme.dll"), MAX_PATH - (_tcslen(szPath) + 1)); + + // ...and try to load it + HMODULE uxlib = LoadLibrary(szPath); if(uxlib) hETDT = (ETDT)GetProcAddress(uxlib, "EnableThemeDialogTexture"); bUxInited = true; } + switch(nCtlColor) { case CTLCOLOR_DLG: if(hETDT) hETDT(*pWnd, ETDT_ENABLETAB); } + return CFormView::OnCtlColor(pDC, pWnd, nCtlColor); } Modified: trunk/OpenMPT/soundlib/Load_mo3.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mo3.cpp 2010-09-02 23:00:19 UTC (rev 697) +++ trunk/OpenMPT/soundlib/Load_mo3.cpp 2010-09-02 23:45:48 UTC (rev 698) @@ -49,7 +49,7 @@ #ifdef MODPLUG_TRACKER CHAR szPath[MAX_PATH]; strcpy(szPath, theApp.GetAppDirPath()); - _tcsncat(szPath, _TEXT("unmo3.dll"), MAX_PATH - strlen(szPath)); + _tcsncat(szPath, _TEXT("unmo3.dll"), MAX_PATH - (_tcslen(szPath) + 1)); HMODULE unmo3 = LoadLibrary(szPath); #else HMODULE unmo3 = LoadLibrary(_TEXT("unmo3.dll")); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-05 23:09:03
|
Revision: 700 http://modplug.svn.sourceforge.net/modplug/?rev=700&view=rev Author: saga-games Date: 2010-09-05 23:08:56 +0000 (Sun, 05 Sep 2010) Log Message: ----------- [Fix] Mod Cleanup: Rearrange patterns was broken when using more than one sequence in the MPTM format. (tx Skaven) [Mod] OpenMPT: Version is now 1.19.00.03 Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-09-04 15:19:49 UTC (rev 699) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-09-05 23:08:56 UTC (rev 700) @@ -361,7 +361,7 @@ CHAR s[512]; bool bReordered = false; size_t nPatRemoved = 0; - PATTERNINDEX nPats, nMinToRemove = 0; + PATTERNINDEX nMinToRemove = 0; BeginWaitCursor(); // First, find all used patterns in all sequences. @@ -422,10 +422,10 @@ SEQUENCEINDEX oldSequence = pSndFile->Order.GetCurrentSequenceIndex(); // workaround, as GetSequence doesn't allow writing to sequences ATM // Re-order pattern numbers based on sequence + PATTERNINDEX nPats = 0; // last used index for(SEQUENCEINDEX nSeq = 0; nSeq < maxSeqIndex; nSeq++) { pSndFile->Order.SetSequence(nSeq); - nPats = 0; ORDERINDEX imap = 0; for (imap = 0; imap < pSndFile->Order.GetSequence(nSeq).GetLength(); imap++) { Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2010-09-04 15:19:49 UTC (rev 699) +++ trunk/OpenMPT/mptrack/version.h 2010-09-05 23:08:56 UTC (rev 700) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 19 #define VER_MINOR 00 -#define VER_MINORMINOR 02 +#define VER_MINORMINOR 03 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2010-09-04 15:19:49 UTC (rev 699) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2010-09-05 23:08:56 UTC (rev 700) @@ -477,7 +477,7 @@ // In the pattern loader above, a second condition is used: Only tempo commands // below 100 BPM are taken into account. Furthermore, only M.K. (ProTracker) // modules are checked. - // The same check is also applied to original NoiseTracker 15 sample mods. + // The same check is also applied to original Ultimate Soundtracker 15 sample mods. if((bMdKd && bHasTempoCommands && GetSongTime() >= 10 * 60) || m_nSamples == 15) { Patterns.ForEachModCommand(FixVBlankMODs()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-08 23:45:53
|
Revision: 704 http://modplug.svn.sourceforge.net/modplug/?rev=704&view=rev Author: saga-games Date: 2010-09-08 23:45:46 +0000 (Wed, 08 Sep 2010) Log Message: ----------- [Fix] MTM Loader: As MTM files were converted to MOD automatically, channel panning was lost. Now they're converted to S3M instead. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/soundlib/Load_mtm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-07 17:45:33 UTC (rev 703) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-08 23:45:46 UTC (rev 704) @@ -342,7 +342,6 @@ bModified = FALSE; break; case MOD_TYPE_AMF0: - case MOD_TYPE_MTM: case MOD_TYPE_669: m_SndFile.ChangeModTypeTo(MOD_TYPE_MOD); break; @@ -362,6 +361,7 @@ case MOD_TYPE_STM: case MOD_TYPE_DSM: case MOD_TYPE_AMF: + case MOD_TYPE_MTM: m_SndFile.ChangeModTypeTo(MOD_TYPE_S3M); break; case MOD_TYPE_IMF: Modified: trunk/OpenMPT/soundlib/Load_mtm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mtm.cpp 2010-09-07 17:45:33 UTC (rev 703) +++ trunk/OpenMPT/soundlib/Load_mtm.cpp 2010-09-08 23:45:46 UTC (rev 704) @@ -94,6 +94,7 @@ Samples[i].nLoopEnd >>= 1; } Samples[i].nPan = 128; + Samples[i].nC5Speed = TransposeToFrequency(0, Samples[i].nFineTune); } dwMemPos += 37; } @@ -130,7 +131,11 @@ } m->command = cmd; m->param = param; - if ((cmd) || (param)) ConvertModCommand(m); + if ((cmd) || (param)) + { + ConvertModCommand(m); + ConvertCommand(m, MOD_TYPE_MOD, MOD_TYPE_S3M); + } } } pSeq += 32; Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-07 17:45:33 UTC (rev 703) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-08 23:45:46 UTC (rev 704) @@ -1366,9 +1366,9 @@ if (!m_nType) return MOD_TYPE_NONE; if (m_nType & (MOD_TYPE_MOD/*|MOD_TYPE_OKT*/)) return MOD_TYPE_MOD; - if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_ULT|MOD_TYPE_FAR|MOD_TYPE_PTM)) + if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_ULT|MOD_TYPE_FAR|MOD_TYPE_PTM|MOD_TYPE_MTM)) return MOD_TYPE_S3M; - if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MED|MOD_TYPE_MTM/*|MOD_TYPE_MT2*/)) + if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MED/*|MOD_TYPE_MT2*/)) return MOD_TYPE_XM; if(m_nType & MOD_TYPE_MPT) return MOD_TYPE_MPT; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-17 12:35:45
|
Revision: 712 http://modplug.svn.sourceforge.net/modplug/?rev=712&view=rev Author: saga-games Date: 2010-09-17 12:35:39 +0000 (Fri, 17 Sep 2010) Log Message: ----------- [Fix] Mod Conversion: Q0x means "no volume change" in S3M/IT, but R0x means "continue volume change" in FT2, and converting from IT/S3M to XM didn't consider this. Q0x is now converted to R8x. [Fix] Note Properties: The meaning of Q0x was wrong for S3M/IT Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-13 23:31:58 UTC (rev 711) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-17 12:35:39 UTC (rev 712) @@ -2620,8 +2620,14 @@ break; case CMD_RETRIG: - switch(param >> 4) { - case 0: strcpy(s, "continue"); break; + switch(param >> 4) + { + case 0: + if(m_SndFile.GetType() & MOD_TYPE_XM) + strcpy(s, "continue"); + else + strcpy(s, "vol *1"); + break; case 1: strcpy(s, "vol -1"); break; case 2: strcpy(s, "vol -2"); break; case 3: strcpy(s, "vol -4"); break; Modified: trunk/OpenMPT/soundlib/modcommand.cpp =================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp 2010-09-13 23:31:58 UTC (rev 711) +++ trunk/OpenMPT/soundlib/modcommand.cpp 2010-09-17 12:35:39 UTC (rev 712) @@ -274,6 +274,13 @@ // remove fine slides if((m->param > 0xF0) || ((m->param & 0x0F) == 0x0F && m->param != 0x0F)) m->command = CMD_NONE; + case CMD_RETRIG: + // Retrig: Q0y doesn't change volume in IT/S3M, but R0y in XM takes the last x parameter + if(m->param != 0 && (m->param & 0xF0) == 0) + { + m->param |= 0x80; + } + break; default: break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-23 19:25:02
|
Revision: 715 http://modplug.svn.sourceforge.net/modplug/?rev=715&view=rev Author: saga-games Date: 2010-09-23 19:24:56 +0000 (Thu, 23 Sep 2010) Log Message: ----------- [Mod] ITP Saver/Loader: Song flags that only concern playback are not dumped into ITP files anymore (f.e. SONG_FIRSTTICK, SONG_STEP, etc.). [Mod] OpenMPT: Version is now 1.19.00.04 Modified Paths: -------------- trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2010-09-23 19:22:15 UTC (rev 714) +++ trunk/OpenMPT/mptrack/version.h 2010-09-23 19:24:56 UTC (rev 715) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 19 #define VER_MINOR 00 -#define VER_MINORMINOR 03 +#define VER_MINORMINOR 04 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Load_itp.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_itp.cpp 2010-09-23 19:22:15 UTC (rev 714) +++ trunk/OpenMPT/soundlib/Load_itp.cpp 2010-09-23 19:24:56 UTC (rev 715) @@ -82,7 +82,7 @@ // m_dwSongFlags memcpy(&id,lpStream+dwMemPos,sizeof(DWORD)); - m_dwSongFlags = id; + m_dwSongFlags = (id & SONG_FILE_FLAGS); dwMemPos += sizeof(DWORD); if(!(m_dwSongFlags & SONG_ITPROJECT)) return false; @@ -505,7 +505,7 @@ // Song global config - id = m_dwSongFlags; + id = (m_dwSongFlags & SONG_FILE_FLAGS); fwrite(&id, 1, sizeof(id), f); id = m_nDefaultGlobalVolume; fwrite(&id, 1, sizeof(id), f); Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2010-09-23 19:22:15 UTC (rev 714) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2010-09-23 19:24:56 UTC (rev 715) @@ -316,6 +316,9 @@ #define SONG_POSJUMP 0x100000 // Position jump encountered (internal flag, do not touch) #define SONG_PT1XMODE 0x200000 // ProTracker 1.x playback mode +#define SONG_FILE_FLAGS (SONG_EMBEDMIDICFG|SONG_FASTVOLSLIDES|SONG_ITOLDEFFECTS|SONG_ITCOMPATGXX|SONG_LINEARSLIDES|SONG_EXFILTERRANGE|SONG_AMIGALIMITS|SONG_ITPROJECT|SONG_ITPEMBEDIH|SONG_PT1XMODE) +#define SONG_PLAY_FLAGS (~SONG_FILE_FLAGS) + // Global Options (Renderer) #define SNDMIX_REVERSESTEREO 0x0001 // swap L/R audio channels #define SNDMIX_NOISEREDUCTION 0x0002 // reduce hiss (do not use, it's just a simple low-pass filter) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-23 22:40:16
|
Revision: 717 http://modplug.svn.sourceforge.net/modplug/?rev=717&view=rev Author: saga-games Date: 2010-09-23 22:40:09 +0000 (Thu, 23 Sep 2010) Log Message: ----------- [New] Order list: Two new shortcuts for setting an ignore (+++) / invalid (---) pattern index. [Mod] Updated DE_jojo.mkb (two new shortcuts for the orderlist, KeyHold for Pattern Duplicate) Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2010-09-23 22:37:31 UTC (rev 716) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2010-09-23 22:40:09 UTC (rev 717) @@ -599,6 +599,8 @@ DefineKeyCommand(kcInsNoteMapEditSampleMap, 1850, kcVisible, kcNoDummy, _T("Edit sample map")); DefineKeyCommand(kcInstrumentCtrlDuplicate, 1851, kcVisible, kcNoDummy, _T("Duplicate instrument")); DefineKeyCommand(kcPanic, 1852, kcVisible, kcNoDummy, _T("Panic")); + DefineKeyCommand(kcOrderlistPatIgnore, 1853, kcVisible, kcNoDummy, _T("Ignore (+++) Index")); + DefineKeyCommand(kcOrderlistPatInvalid, 1854, kcVisible, kcNoDummy, _T("Invalid (---) Index")); // Add new key commands here. #ifdef _DEBUG Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2010-09-23 22:37:31 UTC (rev 716) +++ trunk/OpenMPT/mptrack/CommandSet.h 2010-09-23 22:40:09 UTC (rev 717) @@ -1035,7 +1035,9 @@ kcOrderlistPat9, kcOrderlistPatPlus, kcOrderlistPatMinus, - kcEndOrderlistNum=kcOrderlistPatMinus, + kcOrderlistPatIgnore, + kcOrderlistPatInvalid, + kcEndOrderlistNum=kcOrderlistPatInvalid, kcEndOrderlistCommands=kcEndOrderlistNum, kcNumCommands, Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-09-23 22:37:31 UTC (rev 716) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-09-23 22:40:09 UTC (rev 717) @@ -441,6 +441,10 @@ EnterPatternNum(10); return wParam; case kcOrderlistPatPlus: EnterPatternNum(11); return wParam; + case kcOrderlistPatIgnore: + EnterPatternNum(12); return wParam; + case kcOrderlistPatInvalid: + EnterPatternNum(13); return wParam; // kCtxViewPatternsNote messages case kcSwitchToOrderList: @@ -487,6 +491,16 @@ if ((nCurNdx >= 1000) && (nCurNdx > nMaxNdx)) nCurNdx %= 1000; if ((nCurNdx >= 100) && (nCurNdx > nMaxNdx)) nCurNdx %= 100; if ((nCurNdx >= 10) && (nCurNdx > nMaxNdx)) nCurNdx %= 10; + } else if (enterNum == 10) // decrease pattern index + { + const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex(); + if (nCurNdx == 0) + nCurNdx = pSndFile->Order.GetInvalidPatIndex(); + else + { + nCurNdx--; + if ((nCurNdx > nMaxNdx) && (nCurNdx < nFirstInvalid)) nCurNdx = nMaxNdx; + } } else if (enterNum == 11) // increase pattern index { if(nCurNdx >= pSndFile->Order.GetInvalidPatIndex()) @@ -500,16 +514,15 @@ if(nCurNdx > nMaxNdx && nCurNdx < nFirstInvalid) nCurNdx = nFirstInvalid; } - } else if (enterNum == 10) // decrease pattern index + } else if (enterNum == 12) // ignore index (+++) { - const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex(); - if (nCurNdx == 0) - nCurNdx = pSndFile->Order.GetInvalidPatIndex(); - else + if (pSndFile->GetModSpecifications().hasIgnoreIndex) { - nCurNdx--; - if ((nCurNdx > nMaxNdx) && (nCurNdx < nFirstInvalid)) nCurNdx = nMaxNdx; + nCurNdx = pSndFile->Order.GetIgnoreIndex(); } + } else if (enterNum == 13) // invalid index (---) + { + nCurNdx = pSndFile->Order.GetInvalidPatIndex(); } // apply if (nCurNdx != pSndFile->Order[m_nScrollPos]) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2010-09-23 22:37:31 UTC (rev 716) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2010-09-23 22:40:09 UTC (rev 717) @@ -84,7 +84,7 @@ 2:1002:2:13:5 //Play row: Ctrl+EINGABE (KeyDown|KeyHold) 2:1317:4:18:1 //Set row jump on note entry: Alt (KeyDown) 2:1685:2:9:1 //Switch to order list: Ctrl+TABULATOR (KeyDown) -2:1806:2:68:1 //Duplicate pattern: Ctrl+D (KeyDown) +2:1806:2:68:5 //Duplicate pattern: Ctrl+D (KeyDown|KeyHold) 2:1836:2:191:1 //Edit plugin assigned to PC note: Ctrl+# (KeyDown) 2:1662:6:80:1 //Toggle channel's plugin editor: Ctrl+Alt+P (KeyDown) 2:1062:0:93:1 //Show note properties: ANWENDUNG (KeyDown) @@ -372,3 +372,5 @@ 19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold) 19:1818:0:109:1 //Decrease pattern index: - (ZEHNERTASTATUR) (KeyDown) 19:1818:0:189:1 //Decrease pattern index: - (KeyDown) +19:1853:0:73:1 //Ignore (+++) Index: I (KeyDown) +19:1854:0:32:1 //Invalid (---) Index: LEER (KeyDown) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-26 22:16:14
|
Revision: 719 http://modplug.svn.sourceforge.net/modplug/?rev=719&view=rev Author: saga-games Date: 2010-09-26 22:16:07 +0000 (Sun, 26 Sep 2010) Log Message: ----------- [New] Edit history information can now be read from IT files and saved to IT / MPTM files. This is based on an undocumented feature in Impulse Tracker. Note: There's no way to access this data from the tracker yet. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/soundlib/IT_DEFS.H trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2010-09-23 22:50:13 UTC (rev 718) +++ trunk/OpenMPT/mptrack/Moddoc.h 2010-09-26 22:16:07 UTC (rev 719) @@ -12,6 +12,7 @@ #include "sndfile.h" #include "misc_util.h" #include "Undo.h" +#include <time.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -115,6 +116,19 @@ ///////////////////////////////////////////////////////////////////////// +// File edit history +struct FileHistory +{ + // Date when the file was loaded in the the tracker or created. + tm load_date; + // Time the file was open in the editor (in seconds). + // For previous editing sessions, this stores the absolute time in seconds the editor was open. + // For the current editing session, this stores the time when editing was started (using the result of time()). + // To get the desired value in this case, use time(nullptr) - open_time. + time_t open_time; +}; + +///////////////////////////////////////////////////////////////////////// // Split Keyboard Settings (pattern editor) #define SPLIT_OCTAVE_RANGE 9 @@ -157,6 +171,7 @@ CPatternUndo m_PatternUndo; CSampleUndo m_SampleUndo; SplitKeyboardSettings m_SplitKeyboardSettings; // this is maybe not the best place to keep them, but it should do the job + vector<FileHistory> m_FileHistory; // File edit history protected: // create from serialization only CModDoc(); @@ -215,6 +230,7 @@ CPatternUndo *GetPatternUndo() { return &m_PatternUndo; } CSampleUndo *GetSampleUndo() { return &m_SampleUndo; } SplitKeyboardSettings *GetSplitKeyboardSettings() { return &m_SplitKeyboardSettings; } + vector<FileHistory> *GetFileHistory() { return &m_FileHistory; } // operations public: Modified: trunk/OpenMPT/soundlib/IT_DEFS.H =================================================================== --- trunk/OpenMPT/soundlib/IT_DEFS.H 2010-09-23 22:50:13 UTC (rev 718) +++ trunk/OpenMPT/soundlib/IT_DEFS.H 2010-09-26 22:16:07 UTC (rev 719) @@ -111,7 +111,7 @@ // IT Sample Format -typedef struct ITSAMPLESTRUCT +typedef struct tagITSAMPLESTRUCT { DWORD id; // 0x53504D49 CHAR filename[12]; @@ -135,6 +135,15 @@ BYTE vit; } ITSAMPLESTRUCT; + +// IT Header extension: Save history +typedef struct tagITHISTORYSTRUCT +{ + uint16 fatdate; // DOS/FAT date when the file was opened / created in the editor. For details, read http://msdn.microsoft.com/en-us/library/ms724247(VS.85).aspx + uint16 fattime; // DOS/FAT time when the file was opened / created in the editor. + uint32 runtime; // The time how long the file was open in the editor, in 1/18.2th seconds. (= ticks of the DOS timer) +} ITHISTORYSTRUCT; + #pragma pack() extern BYTE autovibit2xm[8]; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-23 22:50:13 UTC (rev 718) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-26 22:16:07 UTC (rev 719) @@ -668,12 +668,44 @@ dwMemPos += pifh->patnum * 4; - // Reading IT Extra Info - if (dwMemPos + 2 < dwMemLength) + // Reading IT Edit History Info + if (dwMemPos + 2 < dwMemLength && (pifh->special & 0x02)) { - UINT nflt = *((WORD *)(lpStream + dwMemPos)); + size_t nflt = LittleEndianW(*((uint16*)(lpStream + dwMemPos))); dwMemPos += 2; - if (nflt * 8 < dwMemLength - dwMemPos) dwMemPos += nflt * 8; + + GetpModDoc()->GetFileHistory()->clear(); + if (nflt * 8 <= dwMemLength - dwMemPos) + { + for(size_t n = 0; n < nflt; n++) + { +#ifdef MODPLUG_TRACKER + ITHISTORYSTRUCT it_history = *((ITHISTORYSTRUCT *)(lpStream + dwMemPos)); + it_history.fatdate = LittleEndianW(it_history.fatdate); + it_history.fattime = LittleEndianW(it_history.fattime); + it_history.runtime = LittleEndian(it_history.runtime); + + FileHistory mpt_history; + mpt_history.load_date.tm_year = ((it_history.fatdate >> 9) & 0x7F) + 80; + mpt_history.load_date.tm_mon = ((it_history.fatdate >> 5) & 0x0F) - 1; + mpt_history.load_date.tm_mday = it_history.fatdate & 0x1F; + mpt_history.load_date.tm_hour = (it_history.fattime >> 11) & 0x1F; + mpt_history.load_date.tm_min = (it_history.fattime >> 5) & 0x3F; + mpt_history.load_date.tm_sec = (it_history.fattime & 0x1F) * 2; + mpt_history.open_time = (uint64)((float)(it_history.runtime) / 18.2f); + GetpModDoc()->GetFileHistory()->push_back(mpt_history); + +#ifdef DEBUG + const uint32 seconds = (uint32)(((float)it_history.runtime) / 18.2f); + CHAR stime[128]; + wsprintf(stime, "IT Edit History: Loaded %04u-%02u-%02u %02u:%02u:%02u, open in the editor for %u:%02u:%02u (%u ticks)\n", ((it_history.fatdate >> 9) & 0x7F) + 1980, (it_history.fatdate >> 5) & 0x0F, it_history.fatdate & 0x1F, (it_history.fattime >> 11) & 0x1F, (it_history.fattime >> 5) & 0x3F, (it_history.fattime & 0x1F) * 2, seconds / 3600, (seconds / 60) % 60, seconds % 60, it_history.runtime); + Log(stime); +#endif // DEBUG + +#endif // MODPLUG_TRACKER + dwMemPos += 8; + } + } } // Reading Midi Output & Macros if (m_dwSongFlags & SONG_EMBEDMIDICFG) @@ -1034,7 +1066,8 @@ // 193-202: Portamento To if ((vol >= 193) && (vol <= 202)) { m[ch].volcmd = VOLCMD_TONEPORTAMENTO; m[ch].vol = vol - 193; } else // 203-212: Vibrato depth - if ((vol >= 203) && (vol <= 212)) { + if ((vol >= 203) && (vol <= 212)) + { m[ch].volcmd = VOLCMD_VIBRATODEPTH; m[ch].vol = vol - 203; // Old versions of ModPlug saved this as vibrato speed instead, so let's fix that if(m_dwLastSavedWithVersion <= MAKE_VERSION_NUMERIC(1, 17, 02, 54) && interpretModPlugMade) @@ -1133,12 +1166,45 @@ //end plastiq: code readability improvements #ifndef MODPLUG_NO_FILESAVE -//#define SAVEITTIMESTAMP + +// Save edit history +void SaveITEditHistory(const CSoundFile *pSndFile, FILE *f) +//--------------------------------------------------------- +{ + const size_t num = pSndFile->GetpModDoc()->GetFileHistory()->size(); + uint16 fnum = min(num, uint16_max); + fnum = LittleEndianW(fnum); + fwrite(&fnum, 2, 1, f); + + const size_t start = (num > uint16_max) ? num - uint16_max : 0; + for(size_t n = start; n < num; n++) + { + const FileHistory *mpt_history = &(pSndFile->GetpModDoc()->GetFileHistory()->at(n)); + ITHISTORYSTRUCT it_history; + // Create FAT file dates + it_history.fatdate = mpt_history->load_date.tm_mday | ((mpt_history->load_date.tm_mon + 1) << 5) | ((mpt_history->load_date.tm_year - 80) << 9); + it_history.fattime = (mpt_history->load_date.tm_sec / 2) | (mpt_history->load_date.tm_min << 5) | (mpt_history->load_date.tm_hour << 11); + if(n == num - 1) + { + // The current timestamp has to be converted first. + it_history.runtime = time(nullptr) - mpt_history->open_time; + } else + { + // Previous timestamps are left alone + it_history.runtime = mpt_history->open_time; + } + it_history.fatdate = LittleEndianW(it_history.fatdate); + it_history.fattime = LittleEndianW(it_history.fattime); + it_history.runtime = LittleEndian(it_history.runtime * 18); + fwrite(&it_history, 1, sizeof(it_history), f); + } +} + #pragma warning(disable:4100) bool CSoundFile::SaveIT(LPCSTR lpszFileName, UINT nPacking) -//------------------------------------------------------------- +//--------------------------------------------------------- { DWORD dwPatNamLen, dwChnNamLen; ITFILEHEADER header; @@ -1148,7 +1214,7 @@ DWORD inspos[MAX_INSTRUMENTS]; vector<DWORD> patpos; DWORD smppos[MAX_SAMPLES]; - DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2; + DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2 + min(GetpModDoc()->GetFileHistory()->size(), uint16_max) * 8; WORD patinfo[4]; // -> CODE#0006 // -> DESC="misc quantity changes" @@ -1224,7 +1290,7 @@ } header.flags = 0x0001; - header.special = 0x0006; + header.special = 0x02 | 0x04; // 0x02: embed file edit history if (m_nInstruments) header.flags |= 0x04; if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; @@ -1255,9 +1321,7 @@ } } if (dwChnNamLen) dwExtra += dwChnNamLen + 8; -#ifdef SAVEITTIMESTAMP - dwExtra += 8; // Time Stamp -#endif + if (m_dwSongFlags & SONG_EMBEDMIDICFG) { header.flags |= 0x80; @@ -1288,23 +1352,7 @@ if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); if (header.patnum) fwrite(&patpos[0], 4, header.patnum, f); // Writing editor history information - { -#ifdef SAVEITTIMESTAMP - SYSTEMTIME systime; - FILETIME filetime; - WORD timestamp[4]; - WORD nInfoEx = 1; - memset(timestamp, 0, sizeof(timestamp)); - fwrite(&nInfoEx, 1, 2, f); - GetSystemTime(&systime); - SystemTimeToFileTime(&systime, &filetime); - FileTimeToDosDateTime(&filetime, ×tamp[0], ×tamp[1]); - fwrite(timestamp, 1, 8, f); -#else - WORD nInfoEx = 0; - fwrite(&nInfoEx, 1, 2, f); -#endif - } + SaveITEditHistory(this, f); // Writing midi cfg if (header.flags & 0x80) { @@ -1805,7 +1853,7 @@ DWORD inspos[MAX_INSTRUMENTS]; DWORD patpos[MAX_PATTERNS]; DWORD smppos[MAX_SAMPLES]; - DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2; + DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2 + min(GetpModDoc()->GetFileHistory()->size(), uint16_max) * 8; WORD patinfo[4]; // -> CODE#0006 // -> DESC="misc quantity changes" @@ -1858,7 +1906,7 @@ } header.flags = 0x0001; - header.special = 0x0006; + header.special = 0x02 | 0x04; // 0x02: embed file edit history if (m_nInstruments) header.flags |= 0x04; if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; @@ -1886,10 +1934,7 @@ */ } // if (dwChnNamLen) dwExtra += dwChnNamLen + 8; -/*#ifdef SAVEITTIMESTAMP - dwExtra += 8; // Time Stamp -#endif -*/ + if (m_dwSongFlags & SONG_EMBEDMIDICFG) { header.flags |= 0x80; @@ -1920,23 +1965,7 @@ if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); if (header.patnum) fwrite(patpos, 4, header.patnum, f); // Writing editor history information - { -/*#ifdef SAVEITTIMESTAMP - SYSTEMTIME systime; - FILETIME filetime; - WORD timestamp[4]; - WORD nInfoEx = 1; - memset(timestamp, 0, sizeof(timestamp)); - fwrite(&nInfoEx, 1, 2, f); - GetSystemTime(&systime); - SystemTimeToFileTime(&systime, &filetime); - FileTimeToDosDateTime(&filetime, ×tamp[0], ×tamp[1]); - fwrite(timestamp, 1, 8, f); -#else -*/ WORD nInfoEx = 0; - fwrite(&nInfoEx, 1, 2, f); -//#endif - } + SaveITEditHistory(this, f); // Writing midi cfg if (header.flags & 0x80) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-23 22:50:13 UTC (rev 718) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-26 22:16:07 UTC (rev 719) @@ -562,6 +562,7 @@ memset(m_MixPlugins, 0, sizeof(m_MixPlugins)); memset(&m_SongEQ, 0, sizeof(m_SongEQ)); ResetMidiCfg(); + //for (UINT npt=0; npt<Patterns.Size(); npt++) Patterns[npt].GetNumRows() = 64; for (CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) { @@ -765,6 +766,18 @@ if ((m_nRestartPos >= Order.size()) || (Order[m_nRestartPos] >= Patterns.Size())) m_nRestartPos = 0; +#ifdef MODPLUG_TRACKER + // Set the creation date of this file (or the load time if we're loading an existing file) + { + FileHistory history; + time_t systime; + time(&systime); + localtime_s(&history.load_date, &systime); + history.open_time = systime; // Editing is starting right NOW! + pModDoc->GetFileHistory()->push_back(history); + } +#endif // MODPLUG_TRACKER + // plugin loader string sNotFound; std::list<PLUGINDEX> notFoundIDs; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-26 23:47:41
|
Revision: 720 http://modplug.svn.sourceforge.net/modplug/?rev=720&view=rev Author: saga-games Date: 2010-09-26 23:47:33 +0000 (Sun, 26 Sep 2010) Log Message: ----------- [New] The edit history can now also be viewed through a dialog. There's also a new shortcut for this dialog. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -601,6 +601,7 @@ DefineKeyCommand(kcPanic, 1852, kcVisible, kcNoDummy, _T("Panic")); DefineKeyCommand(kcOrderlistPatIgnore, 1853, kcVisible, kcNoDummy, _T("Ignore (+++) Index")); DefineKeyCommand(kcOrderlistPatInvalid, 1854, kcVisible, kcNoDummy, _T("Invalid (---) Index")); + DefineKeyCommand(kcViewEditHistory, 1855, kcVisible, kcNoDummy, _T("View Edit History")); // Add new key commands here. #ifdef _DEBUG Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/CommandSet.h 2010-09-26 23:47:33 UTC (rev 720) @@ -114,6 +114,7 @@ kcViewAddPlugin, kcViewSongProperties, kcViewMIDImapping, + kcViewEditHistory, kcHelp, kcEndView=kcHelp, Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -463,7 +463,8 @@ case ID_PLUGIN_SETUP: s="Pl&ugin Manager...\t"; c=kcViewAddPlugin; break; case ID_CHANNEL_MANAGER: s="Ch&annel Manager...\t"; c=kcViewChannelManager; break; case ID_VIEW_SONGPROPERTIES:s="Song P&roperties...\t"; c=kcViewSongProperties; break; //rewbs.graph - case ID_VIEW_MIDIMAPPING: s="&MIDI mapping...\t"; c = kcViewMIDImapping; break; + case ID_VIEW_MIDIMAPPING: s="&MIDI Mapping...\t"; c = kcViewMIDImapping; break; + case ID_VIEW_EDITHISTORY: s="Edit &History...\t"; c = kcViewEditHistory; break; /* case ID_WINDOW_NEW: s="&New Window\t"; c=kcWindowNew; break; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -2832,6 +2832,7 @@ case kcViewAddPlugin: OnPluginManager(); break; case kcViewChannelManager: OnChannelManager(); break; case kcViewMIDImapping: OnViewMIDIMapping(); break; + case kcViewEditHistory: OnViewEditHistory(); break; case kcNextDocument: MDINext(); break; case kcPrevDocument: MDIPrev(); break; @@ -3002,7 +3003,7 @@ //---------------------------------- { CModDoc* pModDoc = GetActiveDoc(); - CSoundFile* pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : 0; + CSoundFile* pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; if(!pSndFile) return; const HWND oldMIDIRecondWnd = GetMidiRecordWnd(); @@ -3012,7 +3013,17 @@ } +void CMainFrame::OnViewEditHistory() +//---------------------------------- +{ + CModDoc* pModDoc = GetActiveDoc(); + if(pModDoc != nullptr) + { + pModDoc->OnViewEditHistory(); + } +} + ///////////////////////////////////////////// //Misc helper functions ///////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2010-09-26 23:47:33 UTC (rev 720) @@ -692,6 +692,7 @@ afx_msg LRESULT OnSpecialKey(WPARAM, LPARAM); afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM); afx_msg void OnViewMIDIMapping(); + afx_msg void OnViewEditHistory(); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -52,6 +52,7 @@ ON_COMMAND(ID_VIEW_INSTRUMENTS, OnEditInstruments) ON_COMMAND(ID_VIEW_COMMENTS, OnEditComments) ON_COMMAND(ID_VIEW_GRAPH, OnEditGraph) //rewbs.graph + ON_COMMAND(ID_VIEW_EDITHISTORY, OnViewEditHistory) ON_COMMAND(ID_INSERT_PATTERN, OnInsertPattern) ON_COMMAND(ID_INSERT_SAMPLE, OnInsertSample) ON_COMMAND(ID_INSERT_INSTRUMENT, OnInsertInstrument) @@ -67,6 +68,7 @@ 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) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -107,6 +109,8 @@ m_SplitKeyboardSettings.octaveModifier = 0; m_SplitKeyboardSettings.octaveLink = false; + m_FileHistory.clear(); + #ifdef _DEBUG MODCHANNEL *p = m_SndFile.Chn; if (((DWORD)p) & 7) Log("MODCHANNEL is not aligned (0x%08X)\n", p); @@ -1986,6 +1990,14 @@ } +void CModDoc::OnUpdateITMPTOnly(CCmdUI *p) +//--------------------------------------- +{ + if (p) + p->Enable((m_SndFile.GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE); +} + + void CModDoc::OnUpdateMP3Encode(CCmdUI *p) //---------------------------------------- { @@ -3419,15 +3431,25 @@ // set playback timer in the status bar SetElapsedTime(nOrd, nRow, true); - if (pModPlaying != this) { + if (pModPlaying != this) + { pMainFrm->PlayMod(this, followSonghWnd, m_dwNotifyType|MPTNOTIFY_POSITION|MPTNOTIFY_VUMETERS); //rewbs.fix2977 } } //SwitchToView(); } + +void CModDoc::OnViewEditHistory() +//------------------------------- +{ + CEditHistoryDlg dlg(CMainFrame::GetMainFrame(), this); + dlg.DoModal(); +} + + LRESULT CModDoc::OnCustomKeyMsg(WPARAM wParam, LPARAM /*lParam*/) -//------------------------------------------------------------ +//--------------------------------------------------------------- { if (wParam == kcNull) return NULL; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/Moddoc.h 2010-09-26 23:47:33 UTC (rev 720) @@ -124,7 +124,7 @@ // Time the file was open in the editor (in seconds). // For previous editing sessions, this stores the absolute time in seconds the editor was open. // For the current editing session, this stores the time when editing was started (using the result of time()). - // To get the desired value in this case, use time(nullptr) - open_time. + // To get the desired value in this case, use difftime(time(nullptr), open_time). time_t open_time; }; @@ -385,11 +385,13 @@ afx_msg void OnEstimateSongLength(); afx_msg void OnApproximateBPM(); afx_msg void OnUpdateXMITMPTOnly(CCmdUI *p); + afx_msg void OnUpdateITMPTOnly(CCmdUI *p); afx_msg void OnUpdateHasMIDIMappings(CCmdUI *p); afx_msg void OnUpdateMP3Encode(CCmdUI *pCmdUI); afx_msg void OnPatternRestart(); //rewbs.customKeys afx_msg void OnPatternPlay(); //rewbs.customKeys afx_msg void OnPatternPlayNoLoop(); //rewbs.customKeys + afx_msg void OnViewEditHistory(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -3096,6 +3096,86 @@ CDialog::OnCancel(); } + +//////////////////////////////////////////////////////////////////////////////////////////// +// Edit history dialog + +BEGIN_MESSAGE_MAP(CEditHistoryDlg, CDialog) + ON_COMMAND(IDC_BTN_CLEAR, OnClearHistory) +END_MESSAGE_MAP() + + +BOOL CEditHistoryDlg::OnInitDialog() +//---------------------------------- +{ + CDialog::OnInitDialog(); + + if(m_pModDoc == nullptr) + return TRUE; + + CString s; + time_t total_time = 0; + const size_t num = m_pModDoc->GetFileHistory()->size(); + for(size_t n = 0; n < num; n++) + { + CString temp; + FileHistory *hist = &(m_pModDoc->GetFileHistory()->at(n)); + time_t duration = hist->open_time; + // Current item + if(n == num - 1) + { + duration = difftime(time(nullptr), duration); + } + total_time += duration; + TCHAR szDate[32]; + _tcsftime(szDate, sizeof(szDate), _T("%d %b %Y, %H:%M:%S"), &hist->load_date); + + temp.Format(_T("Loaded %s, open in the editor for %lluh %02llum %02llus\r\n"), + szDate, duration / 3600, (duration / 60) % 60, duration % 60); + s += temp; + } + SetDlgItemText(IDC_EDIT_HISTORY, s); + + s.Format(_T("Total edit time: %lluh %02llum %02llus"), total_time / 3600, (total_time / 60) % 60, total_time % 60); + SetDlgItemText(IDC_TOTAL_EDIT_TIME, s); + + s.Format(_T("Edit history for %s"), m_pModDoc->GetTitle()); + SetWindowText(s); + + GetDlgItem(IDC_BTN_CLEAR)->EnableWindow((m_pModDoc->GetFileHistory()->size() > 1) ? TRUE : FALSE); + + return TRUE; + +} + + +void CEditHistoryDlg::OnClearHistory() +//------------------------------------ +{ + if(m_pModDoc == nullptr) + return; + + if(m_pModDoc->GetFileHistory()->size() > 1) + { + while(m_pModDoc->GetFileHistory()->size() > 1) + { + m_pModDoc->GetFileHistory()->erase(m_pModDoc->GetFileHistory()->begin()); + } + m_pModDoc->SetModified(); + } + + OnInitDialog(); +} + + +void CEditHistoryDlg::OnOK() +//-------------------------- +{ + CDialog::OnOK(); +} + + + /////////////////////////////////////////////////////////////////////////////////////// // Messagebox with 'don't show again'-option. Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2010-09-26 23:47:33 UTC (rev 720) @@ -624,6 +624,29 @@ ///////////////////////////////////////////////////////////////////////// +// Edit history dialog + +//=================================== +class CEditHistoryDlg: public CDialog +//=================================== +{ + +protected: + CModDoc *m_pModDoc; + +public: + CEditHistoryDlg(CWnd *parent, CModDoc *pModDoc) : CDialog(IDD_EDITHISTORY, parent) { m_pModDoc = pModDoc; } + UINT ShowLog(LPCSTR pszLog, LPCSTR lpszTitle=NULL); + +protected: + virtual BOOL OnInitDialog(); + virtual VOID OnOK(); + afx_msg void OnClearHistory(); + DECLARE_MESSAGE_MAP() +}; + + +///////////////////////////////////////////////////////////////////////// // Messagebox with 'don't show again'-option. // Enums for message entries. See dlg_misc.cpp for the array of entries. Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-09-26 23:47:33 UTC (rev 720) @@ -149,6 +149,18 @@ END +IDD_EDITHISTORY DIALOGEX 0, 0, 316, 185 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Module edit history" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,258,162,50,14 + PUSHBUTTON "Clear",IDC_BTN_CLEAR,6,162,50,14 + EDITTEXT IDC_EDIT_HISTORY,6,6,300,150,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL + LTEXT "",IDC_TOTAL_EDIT_TIME,60,165,192,15 +END + + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -204,6 +216,14 @@ TOPMARGIN, 7 BOTTOMMARGIN, 94 END + + IDD_EDITHISTORY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 309 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END END #endif // APSTUDIO_INVOKED @@ -1947,7 +1967,8 @@ MENUITEM "Add &Plugin...", ID_PLUGIN_SETUP MENUITEM "Channel &Manager...", ID_CHANNEL_MANAGER MENUITEM "Song Properties...", ID_VIEW_SONGPROPERTIES - MENUITEM "MIDI mapping...", ID_VIEW_MIDIMAPPING + MENUITEM "&MIDI Mapping...", ID_VIEW_MIDIMAPPING + MENUITEM "Edit &History...", ID_VIEW_EDITHISTORY END POPUP "&Window" BEGIN @@ -2391,8 +2412,25 @@ STRINGTABLE BEGIN ID_PANIC "Kill all VSTi and sample voices\nStop all hanging VSTi and sample voices" + ID_VIEW_EDITHISTORY "View the edit history of this module" END +STRINGTABLE +BEGIN + ID_VIEW_MIDIMAPPING "Configure the MIDI Mapping" +END + +STRINGTABLE +BEGIN + ID_CHANNEL_MANAGER "Add, remove, mute and manage channels" + ID_PLUGIN_SETUP "Register plugins and add them to the current module" +END + +STRINGTABLE +BEGIN + ID_VIEW_SONGPROPERTIES "Edit global song properties or convert the module to another format" +END + #endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/resource.h 2010-09-26 23:47:33 UTC (rev 720) @@ -135,6 +135,7 @@ #define IDD_KEYBOARD_SPLIT 523 #define IDD_SAMPLE_GENERATOR 524 #define IDD_SAMPLE_GENERATOR_PRESETS 525 +#define IDD_EDITHISTORY 526 #define IDC_BUTTON1 1001 #define IDC_BUTTON2 1002 #define IDC_BUTTON3 1003 @@ -953,6 +954,9 @@ #define IDC_CHK_REMEMBERSETTINGS 2427 #define IDC_EDIT_ROWSPERBEAT 2428 #define IDC_EDIT_ROWSPERMEASURE 2429 +#define IDC_BTN_CLEAR 2430 +#define IDC_TOTAL_EDIT_TIME 2431 +#define IDC_EDIT_HISTORY 2432 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1211,15 +1215,16 @@ #define ID_ENVELOPE_ZOOM_IN 60449 #define ID_ENVELOPE_ZOOM_OUT 60450 #define ID_PANIC 60451 +#define ID_VIEW_EDITHISTORY 60452 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 526 -#define _APS_NEXT_COMMAND_VALUE 60452 -#define _APS_NEXT_CONTROL_VALUE 2430 +#define _APS_NEXT_RESOURCE_VALUE 527 +#define _APS_NEXT_COMMAND_VALUE 60453 +#define _APS_NEXT_CONTROL_VALUE 2433 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/mptrack/version.h 2010-09-26 23:47:33 UTC (rev 720) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 19 #define VER_MINOR 00 -#define VER_MINORMINOR 04 +#define VER_MINORMINOR 05 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -686,13 +686,14 @@ it_history.runtime = LittleEndian(it_history.runtime); FileHistory mpt_history; + MemsetZero(mpt_history); mpt_history.load_date.tm_year = ((it_history.fatdate >> 9) & 0x7F) + 80; mpt_history.load_date.tm_mon = ((it_history.fatdate >> 5) & 0x0F) - 1; mpt_history.load_date.tm_mday = it_history.fatdate & 0x1F; mpt_history.load_date.tm_hour = (it_history.fattime >> 11) & 0x1F; mpt_history.load_date.tm_min = (it_history.fattime >> 5) & 0x3F; mpt_history.load_date.tm_sec = (it_history.fattime & 0x1F) * 2; - mpt_history.open_time = (uint64)((float)(it_history.runtime) / 18.2f); + mpt_history.open_time = (time_t)((float)(it_history.runtime) / 18.2f); GetpModDoc()->GetFileHistory()->push_back(mpt_history); #ifdef DEBUG @@ -1187,15 +1188,15 @@ if(n == num - 1) { // The current timestamp has to be converted first. - it_history.runtime = time(nullptr) - mpt_history->open_time; + it_history.runtime = difftime(time(nullptr), mpt_history->open_time) * 18; } else { // Previous timestamps are left alone - it_history.runtime = mpt_history->open_time; + it_history.runtime = mpt_history->open_time * 18; } it_history.fatdate = LittleEndianW(it_history.fatdate); it_history.fattime = LittleEndianW(it_history.fattime); - it_history.runtime = LittleEndian(it_history.runtime * 18); + it_history.runtime = LittleEndian(it_history.runtime); fwrite(&it_history, 1, sizeof(it_history), f); } } @@ -1351,7 +1352,7 @@ if (header.insnum) fwrite(inspos, 4, header.insnum, f); if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); if (header.patnum) fwrite(&patpos[0], 4, header.patnum, f); - // Writing editor history information + // Writing edit history information SaveITEditHistory(this, f); // Writing midi cfg if (header.flags & 0x80) @@ -1964,7 +1965,7 @@ if (header.insnum) fwrite(inspos, 4, header.insnum, f); if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); if (header.patnum) fwrite(patpos, 4, header.patnum, f); - // Writing editor history information + // Writing edit history information SaveITEditHistory(this, f); // Writing midi cfg if (header.flags & 0x80) Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-26 22:16:07 UTC (rev 719) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-26 23:47:33 UTC (rev 720) @@ -770,6 +770,7 @@ // Set the creation date of this file (or the load time if we're loading an existing file) { FileHistory history; + MemsetZero(history); time_t systime; time(&systime); localtime_s(&history.load_date, &systime); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2010-09-27 23:41:42
|
Revision: 725 http://modplug.svn.sourceforge.net/modplug/?rev=725&view=rev Author: saga-games Date: 2010-09-27 23:41:36 +0000 (Mon, 27 Sep 2010) Log Message: ----------- [Fix] time_t was not accurate enough to hold the edit time value (the edit time values were changing after re-saving a file a couple of times), so now the seconds are stored in IT's native resolution. [Fix] Edit history imported was broken (day of month was incorrectly clamped to 12 instead of 31) [Fix] Edit history was incorrectly imported when loading IT made with early versions of Schism Tracker, as those versions set the edit history flag, but didn't actually write the edit count to the file. [Ref] Simplified history handling. One little drawback is that the session information of the current session is not displayed in the edit history and that at least one history item is now stored in the file. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-27 12:04:26 UTC (rev 724) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-09-27 23:41:36 UTC (rev 725) @@ -109,6 +109,8 @@ m_SplitKeyboardSettings.octaveModifier = 0; m_SplitKeyboardSettings.octaveLink = false; + // Set the creation date of this file (or the load time if we're loading an existing file) + time(&m_creationTime); m_FileHistory.clear(); #ifdef _DEBUG Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2010-09-27 12:04:26 UTC (rev 724) +++ trunk/OpenMPT/mptrack/Moddoc.h 2010-09-27 23:41:36 UTC (rev 725) @@ -117,15 +117,17 @@ ///////////////////////////////////////////////////////////////////////// // File edit history + +#define HISTORY_TIMER_PRECISION 18.2f + +//================ struct FileHistory +//================ { // Date when the file was loaded in the the tracker or created. - tm load_date; - // Time the file was open in the editor (in seconds). - // For previous editing sessions, this stores the absolute time in seconds the editor was open. - // For the current editing session, this stores the time when editing was started (using the result of time()). - // To get the desired value in this case, use difftime(time(nullptr), open_time). - time_t open_time; + tm loadDate; + // Time the file was open in the editor, in 1/18.2th seconds (frequency of a standard DOS timer, to keep compatibility with Impulse Tracker easy). + uint32 openTime; }; ///////////////////////////////////////////////////////////////////////// @@ -172,6 +174,7 @@ CSampleUndo m_SampleUndo; SplitKeyboardSettings m_SplitKeyboardSettings; // this is maybe not the best place to keep them, but it should do the job vector<FileHistory> m_FileHistory; // File edit history + time_t m_creationTime; protected: // create from serialization only CModDoc(); @@ -230,7 +233,9 @@ CPatternUndo *GetPatternUndo() { return &m_PatternUndo; } CSampleUndo *GetSampleUndo() { return &m_SampleUndo; } SplitKeyboardSettings *GetSplitKeyboardSettings() { return &m_SplitKeyboardSettings; } + vector<FileHistory> *GetFileHistory() { return &m_FileHistory; } + time_t GetCreationTime() const { return m_creationTime; } // operations public: Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-27 12:04:26 UTC (rev 724) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-09-27 23:41:36 UTC (rev 725) @@ -3114,34 +3114,38 @@ return TRUE; CString s; - time_t total_time = 0; + uint64 totalTime = 0; const size_t num = m_pModDoc->GetFileHistory()->size(); + for(size_t n = 0; n < num; n++) { CString temp; FileHistory *hist = &(m_pModDoc->GetFileHistory()->at(n)); - time_t duration = hist->open_time; - // Current item - if(n == num - 1) - { - duration = difftime(time(nullptr), duration); - } - total_time += duration; + totalTime += hist->openTime; + + // Date TCHAR szDate[32]; - _tcsftime(szDate, sizeof(szDate), _T("%d %b %Y, %H:%M:%S"), &hist->load_date); - - temp.Format(_T("Loaded %s, open in the editor for %lluh %02llum %02llus\r\n"), + _tcsftime(szDate, sizeof(szDate), _T("%d %b %Y, %H:%M:%S"), &hist->loadDate); + // Time + stuff + uint32 duration = (uint32)((double)(hist->openTime) / HISTORY_TIMER_PRECISION); + temp.Format(_T("Loaded %s, open in the editor for %luh %02lum %02lus\r\n"), szDate, duration / 3600, (duration / 60) % 60, duration % 60); s += temp; } + if(num == 0) + { + s = _T("No information available about the previous edit history of this module."); + } SetDlgItemText(IDC_EDIT_HISTORY, s); - s.Format(_T("Total edit time: %lluh %02llum %02llus"), total_time / 3600, (total_time / 60) % 60, total_time % 60); + // Total edit time + totalTime = (uint64)((double)(totalTime) / HISTORY_TIMER_PRECISION); + s.Format(_T("Total edit time: %lluh %02llum %02llus"), totalTime / 3600, (totalTime / 60) % 60, totalTime % 60); SetDlgItemText(IDC_TOTAL_EDIT_TIME, s); - + // Window title s.Format(_T("Edit history for %s"), m_pModDoc->GetTitle()); SetWindowText(s); - + // Enable or disable Clear button GetDlgItem(IDC_BTN_CLEAR)->EnableWindow((m_pModDoc->GetFileHistory()->empty()) ? FALSE : TRUE); return TRUE; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-27 12:04:26 UTC (rev 724) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-09-27 23:41:36 UTC (rev 725) @@ -636,6 +636,7 @@ inspossize <<= 2; memcpy(inspos, lpStream+dwMemPos, inspossize); dwMemPos += pifh->insnum * 4; + // Reading Samples Offsets memset(smppos, 0, sizeof(smppos)); UINT smppossize = pifh->smpnum; @@ -643,6 +644,7 @@ smppossize <<= 2; memcpy(smppos, lpStream+dwMemPos, smppossize); dwMemPos += pifh->smpnum * 4; + // Reading Patterns Offsets UINT patpossize = pifh->patnum; if(patpossize > GetModSpecifications().patternsMax) @@ -665,41 +667,46 @@ return false; if(patpossize > 0) memcpy(&patpos[0], lpStream+dwMemPos, patpossize); - - dwMemPos += pifh->patnum * 4; + // Reading IT Edit History Info - if (dwMemPos + 2 < dwMemLength && (pifh->special & 0x02)) + // This is only supposed to be present if bit 1 of the special flags is set. + // However, old versions of Schism and probably other trackers always set this + // even if they don't write the edit history count. So we have to filter this out... + // (for now we will just ignore those Schism versions, as Schism seems to be the only tracker that did this) + const bool oldSchism = ((pifh->cwtv & 0xF000) == 0x1000 && pifh->cwtv < 0x1050) ? true : false; + if (dwMemPos + 2 < dwMemLength && (pifh->special & 0x02) && !oldSchism) { size_t nflt = LittleEndianW(*((uint16*)(lpStream + dwMemPos))); dwMemPos += 2; - GetpModDoc()->GetFileHistory()->clear(); if (nflt * 8 <= dwMemLength - dwMemPos) { + GetpModDoc()->GetFileHistory()->clear(); for(size_t n = 0; n < nflt; n++) { #ifdef MODPLUG_TRACKER - ITHISTORYSTRUCT it_history = *((ITHISTORYSTRUCT *)(lpStream + dwMemPos)); - it_history.fatdate = LittleEndianW(it_history.fatdate); - it_history.fattime = LittleEndianW(it_history.fattime); - it_history.runtime = LittleEndian(it_history.runtime); + ITHISTORYSTRUCT itHistory = *((ITHISTORYSTRUCT *)(lpStream + dwMemPos)); + itHistory.fatdate = LittleEndianW(itHistory.fatdate); + itHistory.fattime = LittleEndianW(itHistory.fattime); + itHistory.runtime = LittleEndian(itHistory.runtime); - FileHistory mpt_history; - MemsetZero(mpt_history); - mpt_history.load_date.tm_year = ((it_history.fatdate >> 9) & 0x7F) + 80; - mpt_history.load_date.tm_mon = CLAMP((it_history.fatdate >> 5) & 0x0F, 1, 12) - 1; - mpt_history.load_date.tm_mday = CLAMP(it_history.fatdate & 0x1F, 1, 12); - mpt_history.load_date.tm_hour = CLAMP((it_history.fattime >> 11) & 0x1F, 0, 23); - mpt_history.load_date.tm_min = CLAMP((it_history.fattime >> 5) & 0x3F, 0, 59); - mpt_history.load_date.tm_sec = CLAMP((it_history.fattime & 0x1F) * 2, 0, 59); - mpt_history.open_time = (time_t)((float)(it_history.runtime) / 18.2f); - GetpModDoc()->GetFileHistory()->push_back(mpt_history); + FileHistory mptHistory; + MemsetZero(mptHistory); + // Decode FAT date and time + mptHistory.loadDate.tm_year = ((itHistory.fatdate >> 9) & 0x7F) + 80; + mptHistory.loadDate.tm_mon = CLAMP((itHistory.fatdate >> 5) & 0x0F, 1, 12) - 1; + mptHistory.loadDate.tm_mday = CLAMP(itHistory.fatdate & 0x1F, 1, 31); + mptHistory.loadDate.tm_hour = CLAMP((itHistory.fattime >> 11) & 0x1F, 0, 23); + mptHistory.loadDate.tm_min = CLAMP((itHistory.fattime >> 5) & 0x3F, 0, 59); + mptHistory.loadDate.tm_sec = CLAMP((itHistory.fattime & 0x1F) * 2, 0, 59); + mptHistory.openTime = itHistory.runtime * (HISTORY_TIMER_PRECISION / 18.2f); + GetpModDoc()->GetFileHistory()->push_back(mptHistory); #ifdef DEBUG - const uint32 seconds = (uint32)(((float)it_history.runtime) / 18.2f); + const uint32 seconds = (uint32)(((double)itHistory.runtime) / 18.2f); CHAR stime[128]; - wsprintf(stime, "IT Edit History: Loaded %04u-%02u-%02u %02u:%02u:%02u, open in the editor for %u:%02u:%02u (%u ticks)\n", ((it_history.fatdate >> 9) & 0x7F) + 1980, (it_history.fatdate >> 5) & 0x0F, it_history.fatdate & 0x1F, (it_history.fattime >> 11) & 0x1F, (it_history.fattime >> 5) & 0x3F, (it_history.fattime & 0x1F) * 2, seconds / 3600, (seconds / 60) % 60, seconds % 60, it_history.runtime); + wsprintf(stime, "IT Edit History: Loaded %04u-%02u-%02u %02u:%02u:%02u, open for %u:%02u:%02u (%u ticks)\n", ((itHistory.fatdate >> 9) & 0x7F) + 1980, (itHistory.fatdate >> 5) & 0x0F, itHistory.fatdate & 0x1F, (itHistory.fattime >> 11) & 0x1F, (itHistory.fattime >> 5) & 0x3F, (itHistory.fattime & 0x1F) * 2, seconds / 3600, (seconds / 60) % 60, seconds % 60, itHistory.runtime); Log(stime); #endif // DEBUG @@ -708,7 +715,7 @@ } } } - // Reading Midi Output & Macros + // Reading MIDI Output & Macros if (m_dwSongFlags & SONG_EMBEDMIDICFG) { if (dwMemPos + sizeof(MODMIDICFG) < dwMemLength) @@ -1168,37 +1175,64 @@ #ifndef MODPLUG_NO_FILESAVE -// Save edit history -void SaveITEditHistory(const CSoundFile *pSndFile, FILE *f) -//--------------------------------------------------------- +// Save edit history. Pass a null pointer for *f to retrieve the number of bytes that would be written. +DWORD SaveITEditHistory(const CSoundFile *pSndFile, FILE *f) +//---------------------------------------------------------- { - const size_t num = pSndFile->GetpModDoc()->GetFileHistory()->size(); - uint16 fnum = min(num, uint16_max); +#ifdef MODPLUG_TRACKER + CModDoc *pModDoc = pSndFile->GetpModDoc(); + const size_t num = (pModDoc != nullptr) ? pModDoc->GetFileHistory()->size() + 1 : 0; // + 1 for this session +#else + const size_t num = 0; +#endif // MODPLUG_TRACKER + + uint16 fnum = min(num, uint16_max); // Number of entries that are actually going to be written + const size_t bytes_written = 2 + fnum * 8; // Number of bytes that are actually going to be written + + if(f == nullptr) + return bytes_written; + + // Write number of history entries fnum = LittleEndianW(fnum); fwrite(&fnum, 2, 1, f); +#ifdef MODPLUG_TRACKER + // Write history data const size_t start = (num > uint16_max) ? num - uint16_max : 0; for(size_t n = start; n < num; n++) { - const FileHistory *mpt_history = &(pSndFile->GetpModDoc()->GetFileHistory()->at(n)); - ITHISTORYSTRUCT it_history; - // Create FAT file dates - it_history.fatdate = mpt_history->load_date.tm_mday | ((mpt_history->load_date.tm_mon + 1) << 5) | ((mpt_history->load_date.tm_year - 80) << 9); - it_history.fattime = (mpt_history->load_date.tm_sec / 2) | (mpt_history->load_date.tm_min << 5) | (mpt_history->load_date.tm_hour << 11); - if(n == num - 1) + tm loadDate; + uint32 openTime; + + if(n < num - 1) { - // The current timestamp has to be converted first. - it_history.runtime = difftime(time(nullptr), mpt_history->open_time) * 18; + // Previous timestamps + const FileHistory *mptHistory = &(pModDoc->GetFileHistory()->at(n)); + loadDate = mptHistory->loadDate; + openTime = mptHistory->openTime * (18.2f / HISTORY_TIMER_PRECISION); } else { - // Previous timestamps are left alone - it_history.runtime = mpt_history->open_time * 18; + // Current ("new") timestamp + const time_t creationTime = pModDoc->GetCreationTime(); + localtime_s(&loadDate, &creationTime); + openTime = (uint32)((double)difftime(time(nullptr), creationTime) * 18.2f); } - it_history.fatdate = LittleEndianW(it_history.fatdate); - it_history.fattime = LittleEndianW(it_history.fattime); - it_history.runtime = LittleEndian(it_history.runtime); - fwrite(&it_history, 1, sizeof(it_history), f); + + ITHISTORYSTRUCT itHistory; + // Create FAT file dates + itHistory.fatdate = loadDate.tm_mday | ((loadDate.tm_mon + 1) << 5) | ((loadDate.tm_year - 80) << 9); + itHistory.fattime = (loadDate.tm_sec / 2) | (loadDate.tm_min << 5) | (loadDate.tm_hour << 11); + itHistory.runtime = openTime; + + itHistory.fatdate = LittleEndianW(itHistory.fatdate); + itHistory.fattime = LittleEndianW(itHistory.fattime); + itHistory.runtime = LittleEndian(itHistory.runtime); + + fwrite(&itHistory, 1, sizeof(itHistory), f); } +#endif // MODPLUG_TRACKER + + return bytes_written; } #pragma warning(disable:4100) @@ -1215,7 +1249,7 @@ DWORD inspos[MAX_INSTRUMENTS]; vector<DWORD> patpos; DWORD smppos[MAX_SAMPLES]; - DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2 + min(GetpModDoc()->GetFileHistory()->size(), uint16_max) * 8; + DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 0; WORD patinfo[4]; // -> CODE#0006 // -> DESC="misc quantity changes" @@ -1339,6 +1373,7 @@ } // Mix Plugins dwExtra += SaveMixPlugins(NULL, TRUE); + dwExtra += SaveITEditHistory(this, nullptr); // Just calculate the size of this extra block for now. // Comments if (m_lpszSongComments) { @@ -1854,7 +1889,7 @@ DWORD inspos[MAX_INSTRUMENTS]; DWORD patpos[MAX_PATTERNS]; DWORD smppos[MAX_SAMPLES]; - DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2 + min(GetpModDoc()->GetFileHistory()->size(), uint16_max) * 8; + DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 0; WORD patinfo[4]; // -> CODE#0006 // -> DESC="misc quantity changes" @@ -1952,6 +1987,7 @@ } */ // Mix Plugins //dwExtra += SaveMixPlugins(NULL, TRUE); + dwExtra += SaveITEditHistory(this, nullptr); // Just calculate the size of this extra block for now. // Comments if (m_lpszSongComments) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-27 12:04:26 UTC (rev 724) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-09-27 23:41:36 UTC (rev 725) @@ -766,19 +766,6 @@ if ((m_nRestartPos >= Order.size()) || (Order[m_nRestartPos] >= Patterns.Size())) m_nRestartPos = 0; -#ifdef MODPLUG_TRACKER - // Set the creation date of this file (or the load time if we're loading an existing file) - { - FileHistory history; - MemsetZero(history); - time_t systime; - time(&systime); - localtime_s(&history.load_date, &systime); - history.open_time = systime; // Editing is starting right NOW! - pModDoc->GetFileHistory()->push_back(history); - } -#endif // MODPLUG_TRACKER - // plugin loader string sNotFound; std::list<PLUGINDEX> notFoundIDs; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |