From: <sag...@us...> - 2015-05-22 20:33:09
|
Revision: 5137 http://sourceforge.net/p/modplug/code/5137 Author: saga-games Date: 2015-05-22 20:33:04 +0000 (Fri, 22 May 2015) Log Message: ----------- [Fix] MT2 Loader: Don't assign samples to instruments which already have a VST instrument assigned (fixes souleye - embrace... somewhat) [Fix] Pattern tab: Properly update pattern list in tree view when inserting a new pattern. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2015-05-22 19:02:20 UTC (rev 5136) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2015-05-22 20:33:04 UTC (rev 5137) @@ -836,7 +836,7 @@ m_OrderList.InvalidateRect(NULL, FALSE); SetCurrentPattern(newPat); m_modDoc.SetModified(); - m_modDoc.UpdateAllViews(NULL, PatternHint().Names(), this); + m_modDoc.UpdateAllViews(NULL, PatternHint(newPat).Names(), this); m_modDoc.UpdateAllViews(NULL, SequenceHint().Data(), this); } SwitchToView(); Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2015-05-22 19:02:20 UTC (rev 5136) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2015-05-22 20:33:04 UTC (rev 5137) @@ -997,7 +997,7 @@ file.ReadConvertEndianness(groups[grp]); } - if(mptIns != nullptr) + if(mptIns != nullptr && mptIns->nMidiChannel == MidiNoChannel) { for(uint32 note = 0; note < 96; note++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-23 11:04:49
|
Revision: 5140 http://sourceforge.net/p/modplug/code/5140 Author: manxorist Date: 2015-05-23 11:04:43 +0000 (Sat, 23 May 2015) Log Message: ----------- [Ref] Work-around MSVC LNK4221 warning: "no public symbols found; archive member will be inaccessible" by introducing a dummy symbol in the affected compilation units. Modified Paths: -------------- trunk/OpenMPT/common/AudioCriticalSection.cpp trunk/OpenMPT/common/Profiler.cpp trunk/OpenMPT/common/mptFileIO.cpp trunk/OpenMPT/common/stdafx.cpp trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/Tagging.cpp Modified: trunk/OpenMPT/common/AudioCriticalSection.cpp =================================================================== --- trunk/OpenMPT/common/AudioCriticalSection.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/common/AudioCriticalSection.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -16,6 +16,8 @@ #ifdef MODPLUG_TRACKER CRITICAL_SECTION g_csAudio; int g_csAudioLockCount = 0; +#else +MPT_MSVC_WORKAROUND_LNK4221(AudioCriticalSection) #endif OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/common/Profiler.cpp =================================================================== --- trunk/OpenMPT/common/Profiler.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/common/Profiler.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -211,6 +211,10 @@ } +#else // !USE_PROFILER + +MPT_MSVC_WORKAROUND_LNK4221(Profiler) + #endif // USE_PROFILER Modified: trunk/OpenMPT/common/mptFileIO.cpp =================================================================== --- trunk/OpenMPT/common/mptFileIO.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/common/mptFileIO.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -220,6 +220,10 @@ #endif +#else // !MPT_WITH_FILEIO + +MPT_MSVC_WORKAROUND_LNK4221(mptFileIO) + #endif // MPT_WITH_FILEIO Modified: trunk/OpenMPT/common/stdafx.cpp =================================================================== --- trunk/OpenMPT/common/stdafx.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/common/stdafx.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -11,3 +11,10 @@ #include "stdafx.h" + + +OPENMPT_NAMESPACE_BEGIN + +MPT_MSVC_WORKAROUND_LNK4221(stdafx) + +OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/common/typedefs.h 2015-05-23 11:04:43 UTC (rev 5140) @@ -581,4 +581,25 @@ +#if MPT_COMPILER_MSVC +// warning LNK4221: no public symbols found; archive member will be inaccessible +// There is no way to selectively disable linker warnings. +// #pragma warning does not apply and a command line option does not exist. +// Some options: +// 1. Macro which generates a variable with a unique name for each file (which means we have to pass the filename to the macro) +// 2. unnamed namespace containing any symbol (does not work for c++11 compilers because they actually have internal linkage now) +// 3. An unused trivial inline function. +// Option 3 does not actually solve the problem though, which leaves us with option 1. +// In any case, for optimized builds, the linker will just remove the useless symbol. +#define MPT_MSVC_WORKAROUND_LNK4221_CONCAT_DETAIL(x,y) x##y +#define MPT_MSVC_WORKAROUND_LNK4221_CONCAT(x,y) MPT_MSVC_WORKAROUND_LNK4221_CONCAT_DETAIL(x,y) +#define MPT_MSVC_WORKAROUND_LNK4221(x) int MPT_MSVC_WORKAROUND_LNK4221_CONCAT(mpt_msvc_workaround_lnk4221_,x) = 0; +#endif + +#ifndef MPT_MSVC_WORKAROUND_LNK4221 +#define MPT_MSVC_WORKAROUND_LNK4221(x) +#endif + + + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp =================================================================== --- trunk/OpenMPT/soundlib/Dlsbank.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -1994,6 +1994,10 @@ } +#else // !MODPLUG_TRACKER + +MPT_MSVC_WORKAROUND_LNK4221(Dlsbank) + #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/soundlib/Tagging.cpp =================================================================== --- trunk/OpenMPT/soundlib/Tagging.cpp 2015-05-23 10:32:25 UTC (rev 5139) +++ trunk/OpenMPT/soundlib/Tagging.cpp 2015-05-23 11:04:43 UTC (rev 5140) @@ -22,6 +22,10 @@ encoder = mpt::ToUnicode(mpt::CharsetASCII, MptVersion::GetOpenMPTVersionStr()); } +#else // MODPLUG_NO_FILESAVE + +MPT_MSVC_WORKAROUND_LNK4221(Tagging) + #endif // MODPLUG_NO_FILESAVE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-23 11:19:45
|
Revision: 5142 http://sourceforge.net/p/modplug/code/5142 Author: manxorist Date: 2015-05-23 11:19:36 +0000 (Sat, 23 May 2015) Log Message: ----------- [Ref] sounddev: Split sound device base class from the interface header into its own file. Modified Paths: -------------- trunk/OpenMPT/build/vs2008/OpenMPT.vcproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/sounddev/SoundDevice.cpp trunk/OpenMPT/sounddev/SoundDevice.h trunk/OpenMPT/sounddev/SoundDeviceASIO.h trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h trunk/OpenMPT/sounddev/SoundDeviceManager.cpp trunk/OpenMPT/sounddev/SoundDevicePortAudio.h trunk/OpenMPT/sounddev/SoundDeviceUtilities.h trunk/OpenMPT/sounddev/SoundDeviceWaveout.h Added Paths: ----------- trunk/OpenMPT/sounddev/SoundDeviceBase.cpp trunk/OpenMPT/sounddev/SoundDeviceBase.h Modified: trunk/OpenMPT/build/vs2008/OpenMPT.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -1492,6 +1492,14 @@ > </File> <File + RelativePath="..\..\sounddev\SoundDeviceBase.cpp" + > + </File> + <File + RelativePath="..\..\sounddev\SoundDeviceBase.h" + > + </File> + <File RelativePath="..\..\sounddev\SoundDeviceDirectSound.cpp" > </File> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -457,6 +457,7 @@ <ClInclude Include="..\..\pluginBridge\BridgeWrapper.h" /> <ClInclude Include="..\..\sounddev\SoundDevice.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h" /> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceManager.h" /> <ClInclude Include="..\..\sounddev\SoundDevicePortAudio.h" /> @@ -630,6 +631,7 @@ <ClCompile Include="..\..\pluginBridge\BridgeWrapper.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevice.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp" /> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceManager.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevicePortAudio.cpp" /> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-23 11:19:36 UTC (rev 5142) @@ -368,6 +368,9 @@ <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h"> <Filter>sounddev</Filter> </ClInclude> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h"> + <Filter>sounddev</Filter> + </ClInclude> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h"> <Filter>sounddev</Filter> </ClInclude> @@ -862,6 +865,9 @@ <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp"> <Filter>sounddev</Filter> </ClCompile> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp"> + <Filter>sounddev</Filter> + </ClCompile> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp"> <Filter>sounddev</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -463,6 +463,7 @@ <ClInclude Include="..\..\pluginBridge\BridgeWrapper.h" /> <ClInclude Include="..\..\sounddev\SoundDevice.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h" /> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceManager.h" /> <ClInclude Include="..\..\sounddev\SoundDevicePortAudio.h" /> @@ -636,6 +637,7 @@ <ClCompile Include="..\..\pluginBridge\BridgeWrapper.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevice.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp" /> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceManager.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevicePortAudio.cpp" /> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-23 11:19:36 UTC (rev 5142) @@ -368,6 +368,9 @@ <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h"> <Filter>sounddev</Filter> </ClInclude> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h"> + <Filter>sounddev</Filter> + </ClInclude> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h"> <Filter>sounddev</Filter> </ClInclude> @@ -862,6 +865,9 @@ <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp"> <Filter>sounddev</Filter> </ClCompile> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp"> + <Filter>sounddev</Filter> + </ClCompile> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp"> <Filter>sounddev</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -464,6 +464,7 @@ <ClInclude Include="..\..\pluginBridge\BridgeWrapper.h" /> <ClInclude Include="..\..\sounddev\SoundDevice.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h" /> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceManager.h" /> <ClInclude Include="..\..\sounddev\SoundDevicePortAudio.h" /> @@ -637,6 +638,7 @@ <ClCompile Include="..\..\pluginBridge\BridgeWrapper.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevice.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp" /> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceManager.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevicePortAudio.cpp" /> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-23 11:19:36 UTC (rev 5142) @@ -368,6 +368,9 @@ <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h"> <Filter>sounddev</Filter> </ClInclude> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h"> + <Filter>sounddev</Filter> + </ClInclude> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h"> <Filter>sounddev</Filter> </ClInclude> @@ -862,6 +865,9 @@ <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp"> <Filter>sounddev</Filter> </ClCompile> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp"> + <Filter>sounddev</Filter> + </ClCompile> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp"> <Filter>sounddev</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -464,6 +464,7 @@ <ClInclude Include="..\..\pluginBridge\BridgeWrapper.h" /> <ClInclude Include="..\..\sounddev\SoundDevice.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h" /> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h" /> <ClInclude Include="..\..\sounddev\SoundDeviceManager.h" /> <ClInclude Include="..\..\sounddev\SoundDevicePortAudio.h" /> @@ -637,6 +638,7 @@ <ClCompile Include="..\..\pluginBridge\BridgeWrapper.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevice.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp" /> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp" /> <ClCompile Include="..\..\sounddev\SoundDeviceManager.cpp" /> <ClCompile Include="..\..\sounddev\SoundDevicePortAudio.cpp" /> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-23 11:19:36 UTC (rev 5142) @@ -368,6 +368,9 @@ <ClInclude Include="..\..\sounddev\SoundDeviceASIO.h"> <Filter>sounddev</Filter> </ClInclude> + <ClInclude Include="..\..\sounddev\SoundDeviceBase.h"> + <Filter>sounddev</Filter> + </ClInclude> <ClInclude Include="..\..\sounddev\SoundDeviceDirectSound.h"> <Filter>sounddev</Filter> </ClInclude> @@ -862,6 +865,9 @@ <ClCompile Include="..\..\sounddev\SoundDeviceASIO.cpp"> <Filter>sounddev</Filter> </ClCompile> + <ClCompile Include="..\..\sounddev\SoundDeviceBase.cpp"> + <Filter>sounddev</Filter> + </ClCompile> <ClCompile Include="..\..\sounddev\SoundDeviceDirectSound.cpp"> <Filter>sounddev</Filter> </ClCompile> Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -768,6 +768,10 @@ > </File> <File + RelativePath="..\sounddev\SoundDeviceBase.cpp" + > + </File> + <File RelativePath="..\sounddev\SoundDeviceASIO.cpp" > </File> @@ -1506,6 +1510,10 @@ > </File> <File + RelativePath="..\sounddev\SoundDeviceBase.h" + > + </File> + <File RelativePath="..\sounddev\SoundDeviceASIO.h" > </File> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-05-23 11:19:36 UTC (rev 5142) @@ -739,6 +739,7 @@ <ClCompile Include="..\pluginBridge\BridgeWrapper.cpp" /> <ClCompile Include="..\sounddev\SoundDevice.cpp" /> <ClCompile Include="..\sounddev\SoundDeviceASIO.cpp" /> + <ClCompile Include="..\sounddev\SoundDeviceBase.cpp" /> <ClCompile Include="..\sounddev\SoundDeviceDirectSound.cpp" /> <ClCompile Include="..\sounddev\SoundDeviceManager.cpp" /> <ClCompile Include="..\sounddev\SoundDevicePortAudio.cpp" /> @@ -968,6 +969,7 @@ <ClInclude Include="..\pluginBridge\BridgeWrapper.h" /> <ClInclude Include="..\sounddev\SoundDevice.h" /> <ClInclude Include="..\sounddev\SoundDeviceASIO.h" /> + <ClInclude Include="..\sounddev\SoundDeviceBase.h" /> <ClInclude Include="..\sounddev\SoundDeviceDirectSound.h" /> <ClInclude Include="..\sounddev\SoundDeviceManager.h" /> <ClInclude Include="..\sounddev\SoundDevicePortAudio.h" /> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-05-23 11:19:36 UTC (rev 5142) @@ -550,6 +550,9 @@ <ClCompile Include="..\soundlib\Load_plm.cpp"> <Filter>Source Files\soundlib\Module Loaders</Filter> </ClCompile> + <ClCompile Include="..\sounddev\SoundDeviceBase.cpp"> + <Filter>Source Files\sounddev</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\soundlib\Loaders.h"> @@ -1080,6 +1083,9 @@ <ClInclude Include="..\soundlib\plugins\OpCodes.h"> <Filter>Header Files\soundlib\plugins</Filter> </ClInclude> + <ClInclude Include="..\sounddev\SoundDeviceBase.h"> + <Filter>Header Files\sounddev</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="res\bitmap1.bmp"> Modified: trunk/OpenMPT/sounddev/SoundDevice.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDevice.cpp 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDevice.cpp 2015-05-23 11:19:36 UTC (rev 5142) @@ -1,7 +1,7 @@ /* * SoundDevice.cpp * --------------- - * Purpose: Actual sound device driver classes. + * Purpose: Sound device interfaces. * Notes : (currently none) * Authors: Olivier Lapicque * OpenMPT Devs @@ -14,7 +14,6 @@ #include "SoundDevice.h" #include "../common/misc_util.h" -#include "../common/StringFixer.h" #include <map> @@ -25,6 +24,18 @@ namespace SoundDevice { +SoundDevice::Type ParseType(const SoundDevice::Identifier &identifier) +//-------------------------------------------------------------------- +{ + std::vector<mpt::ustring> tmp = mpt::String::Split<mpt::ustring>(identifier, MPT_USTRING("_")); + if(tmp.size() == 0) + { + return SoundDevice::Type(); + } + return tmp[0]; +} + + ChannelMapping::ChannelMapping(uint32 numHostChannels) //---------------------------------------------------- { @@ -102,306 +113,6 @@ } -Base::Base(SoundDevice::Info info) -//-------------------------------- - : m_Source(nullptr) - , m_MessageReceiver(nullptr) - , m_Info(info) -{ - MPT_TRACE(); - - m_DeviceUnavailableOnOpen = false; - - m_IsPlaying = false; - m_StreamPositionRenderFrames = 0; - m_StreamPositionOutputFrames = 0; - - m_RequestFlags.store(0); -} - - -Base::~Base() -//----------- -{ - MPT_TRACE(); - return; -} - - -SoundDevice::DynamicCaps Base::GetDeviceDynamicCaps(const std::vector<uint32> &baseSampleRates) -//--------------------------------------------------------------------------------------------- -{ - MPT_TRACE(); - SoundDevice::DynamicCaps result; - result.supportedSampleRates = baseSampleRates; - return result; -} - - -bool Base::Init(const SoundDevice::AppInfo &appInfo) -//-------------------------------------------------- -{ - MPT_TRACE(); - if(IsInited()) - { - return true; - } - m_AppInfo = appInfo; - m_Caps = InternalGetDeviceCaps(); - return m_Caps.Available; -} - - -bool Base::Open(const SoundDevice::Settings &settings) -//---------------------------------------------------- -{ - MPT_TRACE(); - if(IsOpen()) - { - Close(); - } - m_Settings = settings; - if(m_Settings.Latency == 0.0) m_Settings.Latency = m_Caps.DefaultSettings.Latency; - if(m_Settings.UpdateInterval == 0.0) m_Settings.UpdateInterval = m_Caps.DefaultSettings.UpdateInterval; - m_Settings.Latency = Clamp(m_Settings.Latency, m_Caps.LatencyMin, m_Caps.LatencyMax); - m_Settings.UpdateInterval = Clamp(m_Settings.UpdateInterval, m_Caps.UpdateIntervalMin, m_Caps.UpdateIntervalMax); - m_Flags = SoundDevice::Flags(); - m_DeviceUnavailableOnOpen = false; - m_RequestFlags.store(0); - return InternalOpen(); -} - - -bool Base::Close() -//---------------- -{ - MPT_TRACE(); - if(!IsOpen()) return true; - Stop(); - bool result = InternalClose(); - m_RequestFlags.store(0); - return result; -} - - -uint64 Base::SourceGetReferenceClockNowNanoseconds() const -//-------------------------------------------------------- -{ - MPT_TRACE(); - if(!m_Source) - { - return 0; - } - return m_Source->SoundSourceGetReferenceClockNowNanoseconds(); -} - - -void Base::SourceNotifyPreStart() -//------------------------------- -{ - MPT_TRACE(); - if(m_Source) - { - m_Source->SoundSourcePreStartCallback(); - } -} - - -void Base::SourceNotifyPostStop() -//------------------------------- -{ - MPT_TRACE(); - if(m_Source) - { - m_Source->SoundSourcePostStopCallback(); - } -} - - -bool Base::SourceIsLockedByCurrentThread() const -//---------------------------------------------- -{ - MPT_TRACE(); - if(!m_Source) - { - return false; - } - return m_Source->SoundSourceIsLockedByCurrentThread(); -} - - -void Base::SourceFillAudioBufferLocked() -//-------------------------------------- -{ - MPT_TRACE(); - if(m_Source) - { - ISource::Guard lock(*m_Source); - InternalFillAudioBuffer(); - } -} - - -void Base::SourceAudioPreRead(std::size_t numFrames, std::size_t framesLatency) -//----------------------------------------------------------------------------- -{ - MPT_TRACE(); - if(!InternalHasTimeInfo()) - { - SoundDevice::TimeInfo timeInfo; - if(InternalHasGetStreamPosition()) - { - timeInfo.SyncPointStreamFrames = InternalHasGetStreamPosition(); - timeInfo.SyncPointSystemTimestamp = SourceGetReferenceClockNowNanoseconds(); - timeInfo.Speed = 1.0; - } else - { - timeInfo.SyncPointStreamFrames = m_StreamPositionRenderFrames + numFrames; - timeInfo.SyncPointSystemTimestamp = SourceGetReferenceClockNowNanoseconds() + Util::Round<int64>(GetEffectiveBufferAttributes().Latency * 1000000000.0); - timeInfo.Speed = 1.0; - } - timeInfo.RenderStreamPositionBefore = StreamPositionFromFrames(m_StreamPositionRenderFrames); - timeInfo.RenderStreamPositionAfter = StreamPositionFromFrames(m_StreamPositionRenderFrames + numFrames); - SetTimeInfo(timeInfo); - } - m_StreamPositionRenderFrames += numFrames; - if(!InternalHasGetStreamPosition() && !InternalHasTimeInfo()) - { - Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); - m_StreamPositionOutputFrames = m_StreamPositionRenderFrames - framesLatency; - } else - { - // unused, no locking - m_StreamPositionOutputFrames = 0; - } -} - - -void Base::SourceAudioRead(void *buffer, const void *inputBuffer, std::size_t numFrames) -//-------------------------------------------------------------------------------------- -{ - MPT_TRACE(); - if(numFrames <= 0) - { - return; - } - m_Source->SoundSourceRead(m_Settings, m_Flags, GetEffectiveBufferAttributes(), m_TimeInfo, numFrames, buffer, inputBuffer); -} - - -void Base::SourceAudioDone() -//-------------------------- -{ - MPT_TRACE(); - m_Source->SoundSourceDone(m_Settings, m_Flags, GetEffectiveBufferAttributes(), m_TimeInfo); -} - - -void Base::SendDeviceMessage(LogLevel level, const mpt::ustring &str) -//------------------------------------------------------------------- -{ - MPT_TRACE(); - Log(level, str); - if(m_MessageReceiver) - { - m_MessageReceiver->SoundDeviceMessage(level, str); - } -} - - -bool Base::Start() -//---------------- -{ - MPT_TRACE(); - if(!IsOpen()) return false; - if(!IsPlaying()) - { - m_StreamPositionRenderFrames = 0; - { - Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); - m_StreamPositionOutputFrames = 0; - } - SourceNotifyPreStart(); - m_RequestFlags.fetch_and((~RequestFlagRestart).as_bits()); - if(!InternalStart()) - { - SourceNotifyPostStop(); - return false; - } - m_IsPlaying = true; - } - return true; -} - - -void Base::Stop(bool force) -//------------------------- -{ - MPT_TRACE(); - if(!IsOpen()) return; - if(IsPlaying()) - { - if(force) - { - InternalStopForce(); - } else - { - InternalStop(); - } - m_RequestFlags.fetch_and((~RequestFlagRestart).as_bits()); - SourceNotifyPostStop(); - m_IsPlaying = false; - { - Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); - m_StreamPositionOutputFrames = 0; - } - m_StreamPositionRenderFrames = 0; - } -} - - -SoundDevice::StreamPosition Base::GetStreamPosition() const -//--------------------------------------------------------- -{ - MPT_TRACE(); - if(!IsOpen()) - { - return StreamPosition(); - } - int64 frames = 0; - if(InternalHasGetStreamPosition()) - { - frames = InternalGetStreamPositionFrames(); - } else if(InternalHasTimeInfo()) - { - const uint64 now = SourceGetReferenceClockNowNanoseconds(); - const SoundDevice::TimeInfo timeInfo = GetTimeInfo(); - frames = Util::Round<int64>( - timeInfo.SyncPointStreamFrames + ( - static_cast<double>(static_cast<int64>(now - timeInfo.SyncPointSystemTimestamp)) * timeInfo.Speed * m_Settings.Samplerate * (1.0 / (1000.0 * 1000.0)) - ) - ); - } else - { - Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); - frames = m_StreamPositionOutputFrames; - } - return StreamPositionFromFrames(frames); -} - - -SoundDevice::Statistics Base::GetStatistics() const -//------------------------------------------------- -{ - MPT_TRACE(); - SoundDevice::Statistics result; - result.InstantaneousLatency = m_Settings.Latency; - result.LastUpdateInterval = m_Settings.UpdateInterval; - result.text = mpt::ustring(); - return result; -} - - } // namespace SoundDevice Modified: trunk/OpenMPT/sounddev/SoundDevice.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDevice.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDevice.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -1,7 +1,7 @@ /* * SoundDevice.h * ------------- - * Purpose: Sound device interface class. + * Purpose: Sound device interfaces. * Notes : (currently none) * Authors: Olivier Lapicque * OpenMPT Devs @@ -11,10 +11,7 @@ #pragma once -#include "../common/mutex.h" -#include "../common/misc_util.h" #include "../common/FlagSet.h" -#include "../common/mptAtomic.h" #include "../soundlib/SampleFormat.h" #include <vector> @@ -503,137 +500,6 @@ }; -//======== -class Base -//======== - : public IBase -{ - -private: - - SoundDevice::ISource *m_Source; - SoundDevice::IMessageReceiver *m_MessageReceiver; - - const SoundDevice::Info m_Info; - -private: - - SoundDevice::Caps m_Caps; - -protected: - - SoundDevice::AppInfo m_AppInfo; - SoundDevice::Settings m_Settings; - SoundDevice::Flags m_Flags; - bool m_DeviceUnavailableOnOpen; - -private: - - bool m_IsPlaying; - - SoundDevice::TimeInfo m_TimeInfo; - - int64 m_StreamPositionRenderFrames; // only updated or read in audio CALLBACK or when device is stopped. requires no further locking - - mutable Util::mutex m_StreamPositionMutex; - int64 m_StreamPositionOutputFrames; - - mpt::atomic_uint32_t m_RequestFlags; - -protected: - - SoundDevice::Type GetDeviceType() const { return m_Info.type; } - mpt::ustring GetDeviceInternalID() const { return m_Info.internalID; } - SoundDevice::Identifier GetDeviceIdentifier() const { return m_Info.GetIdentifier(); } - - virtual void InternalFillAudioBuffer() = 0; - - uint64 SourceGetReferenceClockNowNanoseconds() const; - void SourceNotifyPreStart(); - void SourceNotifyPostStop(); - bool SourceIsLockedByCurrentThread() const; - void SourceFillAudioBufferLocked(); - void SourceAudioPreRead(std::size_t numFrames, std::size_t framesLatency); - void SourceAudioRead(void *buffer, const void *inputBuffer, std::size_t numFrames); - void SourceAudioDone(); - - void RequestClose() { m_RequestFlags.fetch_or(RequestFlagClose); } - void RequestReset() { m_RequestFlags.fetch_or(RequestFlagReset); } - void RequestRestart() { m_RequestFlags.fetch_or(RequestFlagRestart); } - - void SendDeviceMessage(LogLevel level, const mpt::ustring &str); - -protected: - - void SetTimeInfo(SoundDevice::TimeInfo timeInfo) { m_TimeInfo = timeInfo; } - - SoundDevice::StreamPosition StreamPositionFromFrames(int64 frames) const { return SoundDevice::StreamPosition(frames, static_cast<double>(frames) / static_cast<double>(m_Settings.Samplerate)); } - - virtual bool InternalHasTimeInfo() const { return false; } - - virtual bool InternalHasGetStreamPosition() const { return false; } - virtual int64 InternalGetStreamPositionFrames() const { return 0; } - - virtual bool InternalIsOpen() const = 0; - - virtual bool InternalOpen() = 0; - virtual bool InternalStart() = 0; - virtual void InternalStop() = 0; - virtual void InternalStopForce() { InternalStop(); } - virtual bool InternalClose() = 0; - - virtual SoundDevice::Caps InternalGetDeviceCaps() = 0; - - virtual SoundDevice::BufferAttributes InternalGetEffectiveBufferAttributes() const = 0; - -protected: - - Base(SoundDevice::Info info); - -public: - - virtual ~Base(); - - void SetSource(SoundDevice::ISource *source) { m_Source = source; } - void SetMessageReceiver(SoundDevice::IMessageReceiver *receiver) { m_MessageReceiver = receiver; } - - SoundDevice::Info GetDeviceInfo() const { return m_Info; } - - SoundDevice::Caps GetDeviceCaps() const { return m_Caps; } - virtual SoundDevice::DynamicCaps GetDeviceDynamicCaps(const std::vector<uint32> &baseSampleRates); - - bool Init(const SoundDevice::AppInfo &appInfo); - bool Open(const SoundDevice::Settings &settings); - bool Close(); - bool Start(); - void Stop(bool force = false); - - FlagSet<RequestFlags> GetRequestFlags() const { return FlagSet<RequestFlags>(m_RequestFlags.load()); } - - bool IsInited() const { return m_Caps.Available; } - bool IsOpen() const { return IsInited() && InternalIsOpen(); } - bool IsAvailable() const { return m_Caps.Available && !m_DeviceUnavailableOnOpen; } - bool IsPlaying() const { return m_IsPlaying; } - - virtual bool OnIdle() { return false; } - - SoundDevice::Settings GetSettings() const { return m_Settings; } - SampleFormat GetActualSampleFormat() const { return IsOpen() ? m_Settings.sampleFormat : SampleFormatInvalid; } - SoundDevice::BufferAttributes GetEffectiveBufferAttributes() const { return (IsOpen() && IsPlaying()) ? InternalGetEffectiveBufferAttributes() : SoundDevice::BufferAttributes(); } - - SoundDevice::TimeInfo GetTimeInfo() const { return m_TimeInfo; } - SoundDevice::StreamPosition GetStreamPosition() const; - - virtual bool DebugIsFragileDevice() const { return false; } - virtual bool DebugInRealtimeCallback() const { return false; } - - virtual SoundDevice::Statistics GetStatistics() const; - - virtual bool OpenDriverSettings() { return false; }; - -}; - - namespace Legacy { typedef uint16 ID; @@ -646,8 +512,10 @@ static const SoundDevice::Legacy::ID TypePORTAUDIO_WDMKS = 4; static const SoundDevice::Legacy::ID TypePORTAUDIO_WMME = 5; static const SoundDevice::Legacy::ID TypePORTAUDIO_DS = 6; +#ifndef NO_DSOUND mpt::ustring GetDirectSoundDefaultDeviceIdentifierPre_1_25_00_04(); mpt::ustring GetDirectSoundDefaultDeviceIdentifier_1_25_00_04(); +#endif // NO_DSOUND } Modified: trunk/OpenMPT/sounddev/SoundDeviceASIO.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceASIO.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDeviceASIO.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -11,7 +11,7 @@ #pragma once -#include "SoundDevice.h" +#include "SoundDeviceBase.h" #include "../common/ComponentManager.h" Copied: trunk/OpenMPT/sounddev/SoundDeviceBase.cpp (from rev 5134, trunk/OpenMPT/sounddev/SoundDevice.cpp) =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceBase.cpp (rev 0) +++ trunk/OpenMPT/sounddev/SoundDeviceBase.cpp 2015-05-23 11:19:36 UTC (rev 5142) @@ -0,0 +1,326 @@ +/* + * SoundDeviceBase.cpp + * ------------------- + * Purpose: Sound device drivers base class. + * Notes : (currently none) + * Authors: Olivier Lapicque + * OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include "stdafx.h" + +#include "SoundDeviceBase.h" + + +OPENMPT_NAMESPACE_BEGIN + + +namespace SoundDevice { + + +Base::Base(SoundDevice::Info info) +//-------------------------------- + : m_Source(nullptr) + , m_MessageReceiver(nullptr) + , m_Info(info) +{ + MPT_TRACE(); + + m_DeviceUnavailableOnOpen = false; + + m_IsPlaying = false; + m_StreamPositionRenderFrames = 0; + m_StreamPositionOutputFrames = 0; + + m_RequestFlags.store(0); +} + + +Base::~Base() +//----------- +{ + MPT_TRACE(); + return; +} + + +SoundDevice::DynamicCaps Base::GetDeviceDynamicCaps(const std::vector<uint32> &baseSampleRates) +//--------------------------------------------------------------------------------------------- +{ + MPT_TRACE(); + SoundDevice::DynamicCaps result; + result.supportedSampleRates = baseSampleRates; + return result; +} + + +bool Base::Init(const SoundDevice::AppInfo &appInfo) +//-------------------------------------------------- +{ + MPT_TRACE(); + if(IsInited()) + { + return true; + } + m_AppInfo = appInfo; + m_Caps = InternalGetDeviceCaps(); + return m_Caps.Available; +} + + +bool Base::Open(const SoundDevice::Settings &settings) +//---------------------------------------------------- +{ + MPT_TRACE(); + if(IsOpen()) + { + Close(); + } + m_Settings = settings; + if(m_Settings.Latency == 0.0) m_Settings.Latency = m_Caps.DefaultSettings.Latency; + if(m_Settings.UpdateInterval == 0.0) m_Settings.UpdateInterval = m_Caps.DefaultSettings.UpdateInterval; + m_Settings.Latency = Clamp(m_Settings.Latency, m_Caps.LatencyMin, m_Caps.LatencyMax); + m_Settings.UpdateInterval = Clamp(m_Settings.UpdateInterval, m_Caps.UpdateIntervalMin, m_Caps.UpdateIntervalMax); + m_Flags = SoundDevice::Flags(); + m_DeviceUnavailableOnOpen = false; + m_RequestFlags.store(0); + return InternalOpen(); +} + + +bool Base::Close() +//---------------- +{ + MPT_TRACE(); + if(!IsOpen()) return true; + Stop(); + bool result = InternalClose(); + m_RequestFlags.store(0); + return result; +} + + +uint64 Base::SourceGetReferenceClockNowNanoseconds() const +//-------------------------------------------------------- +{ + MPT_TRACE(); + if(!m_Source) + { + return 0; + } + return m_Source->SoundSourceGetReferenceClockNowNanoseconds(); +} + + +void Base::SourceNotifyPreStart() +//------------------------------- +{ + MPT_TRACE(); + if(m_Source) + { + m_Source->SoundSourcePreStartCallback(); + } +} + + +void Base::SourceNotifyPostStop() +//------------------------------- +{ + MPT_TRACE(); + if(m_Source) + { + m_Source->SoundSourcePostStopCallback(); + } +} + + +bool Base::SourceIsLockedByCurrentThread() const +//---------------------------------------------- +{ + MPT_TRACE(); + if(!m_Source) + { + return false; + } + return m_Source->SoundSourceIsLockedByCurrentThread(); +} + + +void Base::SourceFillAudioBufferLocked() +//-------------------------------------- +{ + MPT_TRACE(); + if(m_Source) + { + ISource::Guard lock(*m_Source); + InternalFillAudioBuffer(); + } +} + + +void Base::SourceAudioPreRead(std::size_t numFrames, std::size_t framesLatency) +//----------------------------------------------------------------------------- +{ + MPT_TRACE(); + if(!InternalHasTimeInfo()) + { + SoundDevice::TimeInfo timeInfo; + if(InternalHasGetStreamPosition()) + { + timeInfo.SyncPointStreamFrames = InternalHasGetStreamPosition(); + timeInfo.SyncPointSystemTimestamp = SourceGetReferenceClockNowNanoseconds(); + timeInfo.Speed = 1.0; + } else + { + timeInfo.SyncPointStreamFrames = m_StreamPositionRenderFrames + numFrames; + timeInfo.SyncPointSystemTimestamp = SourceGetReferenceClockNowNanoseconds() + Util::Round<int64>(GetEffectiveBufferAttributes().Latency * 1000000000.0); + timeInfo.Speed = 1.0; + } + timeInfo.RenderStreamPositionBefore = StreamPositionFromFrames(m_StreamPositionRenderFrames); + timeInfo.RenderStreamPositionAfter = StreamPositionFromFrames(m_StreamPositionRenderFrames + numFrames); + SetTimeInfo(timeInfo); + } + m_StreamPositionRenderFrames += numFrames; + if(!InternalHasGetStreamPosition() && !InternalHasTimeInfo()) + { + Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); + m_StreamPositionOutputFrames = m_StreamPositionRenderFrames - framesLatency; + } else + { + // unused, no locking + m_StreamPositionOutputFrames = 0; + } +} + + +void Base::SourceAudioRead(void *buffer, const void *inputBuffer, std::size_t numFrames) +//-------------------------------------------------------------------------------------- +{ + MPT_TRACE(); + if(numFrames <= 0) + { + return; + } + m_Source->SoundSourceRead(m_Settings, m_Flags, GetEffectiveBufferAttributes(), m_TimeInfo, numFrames, buffer, inputBuffer); +} + + +void Base::SourceAudioDone() +//-------------------------- +{ + MPT_TRACE(); + m_Source->SoundSourceDone(m_Settings, m_Flags, GetEffectiveBufferAttributes(), m_TimeInfo); +} + + +void Base::SendDeviceMessage(LogLevel level, const mpt::ustring &str) +//------------------------------------------------------------------- +{ + MPT_TRACE(); + Log(level, str); + if(m_MessageReceiver) + { + m_MessageReceiver->SoundDeviceMessage(level, str); + } +} + + +bool Base::Start() +//---------------- +{ + MPT_TRACE(); + if(!IsOpen()) return false; + if(!IsPlaying()) + { + m_StreamPositionRenderFrames = 0; + { + Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); + m_StreamPositionOutputFrames = 0; + } + SourceNotifyPreStart(); + m_RequestFlags.fetch_and((~RequestFlagRestart).as_bits()); + if(!InternalStart()) + { + SourceNotifyPostStop(); + return false; + } + m_IsPlaying = true; + } + return true; +} + + +void Base::Stop(bool force) +//------------------------- +{ + MPT_TRACE(); + if(!IsOpen()) return; + if(IsPlaying()) + { + if(force) + { + InternalStopForce(); + } else + { + InternalStop(); + } + m_RequestFlags.fetch_and((~RequestFlagRestart).as_bits()); + SourceNotifyPostStop(); + m_IsPlaying = false; + { + Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); + m_StreamPositionOutputFrames = 0; + } + m_StreamPositionRenderFrames = 0; + } +} + + +SoundDevice::StreamPosition Base::GetStreamPosition() const +//--------------------------------------------------------- +{ + MPT_TRACE(); + if(!IsOpen()) + { + return StreamPosition(); + } + int64 frames = 0; + if(InternalHasGetStreamPosition()) + { + frames = InternalGetStreamPositionFrames(); + } else if(InternalHasTimeInfo()) + { + const uint64 now = SourceGetReferenceClockNowNanoseconds(); + const SoundDevice::TimeInfo timeInfo = GetTimeInfo(); + frames = Util::Round<int64>( + timeInfo.SyncPointStreamFrames + ( + static_cast<double>(static_cast<int64>(now - timeInfo.SyncPointSystemTimestamp)) * timeInfo.Speed * m_Settings.Samplerate * (1.0 / (1000.0 * 1000.0)) + ) + ); + } else + { + Util::lock_guard<Util::mutex> lock(m_StreamPositionMutex); + frames = m_StreamPositionOutputFrames; + } + return StreamPositionFromFrames(frames); +} + + +SoundDevice::Statistics Base::GetStatistics() const +//------------------------------------------------- +{ + MPT_TRACE(); + SoundDevice::Statistics result; + result.InstantaneousLatency = m_Settings.Latency; + result.LastUpdateInterval = m_Settings.UpdateInterval; + result.text = mpt::ustring(); + return result; +} + + +} // namespace SoundDevice + + +OPENMPT_NAMESPACE_END Copied: trunk/OpenMPT/sounddev/SoundDeviceBase.h (from rev 5134, trunk/OpenMPT/sounddev/SoundDevice.h) =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceBase.h (rev 0) +++ trunk/OpenMPT/sounddev/SoundDeviceBase.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -0,0 +1,163 @@ +/* + * SoundDeviceBase.h + * ----------------- + * Purpose: Sound device drivers base class. + * Notes : (currently none) + * Authors: Olivier Lapicque + * OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + +#include "SoundDevice.h" + +#include "../common/mutex.h" +#include "../common/misc_util.h" +#include "../common/mptAtomic.h" + +#include <vector> + + +OPENMPT_NAMESPACE_BEGIN + + +namespace SoundDevice { + + +//======== +class Base +//======== + : public IBase +{ + +private: + + SoundDevice::ISource *m_Source; + SoundDevice::IMessageReceiver *m_MessageReceiver; + + const SoundDevice::Info m_Info; + +private: + + SoundDevice::Caps m_Caps; + +protected: + + SoundDevice::AppInfo m_AppInfo; + SoundDevice::Settings m_Settings; + SoundDevice::Flags m_Flags; + bool m_DeviceUnavailableOnOpen; + +private: + + bool m_IsPlaying; + + SoundDevice::TimeInfo m_TimeInfo; + + int64 m_StreamPositionRenderFrames; // only updated or read in audio CALLBACK or when device is stopped. requires no further locking + + mutable Util::mutex m_StreamPositionMutex; + int64 m_StreamPositionOutputFrames; + + mpt::atomic_uint32_t m_RequestFlags; + +protected: + + SoundDevice::Type GetDeviceType() const { return m_Info.type; } + mpt::ustring GetDeviceInternalID() const { return m_Info.internalID; } + SoundDevice::Identifier GetDeviceIdentifier() const { return m_Info.GetIdentifier(); } + + virtual void InternalFillAudioBuffer() = 0; + + uint64 SourceGetReferenceClockNowNanoseconds() const; + void SourceNotifyPreStart(); + void SourceNotifyPostStop(); + bool SourceIsLockedByCurrentThread() const; + void SourceFillAudioBufferLocked(); + void SourceAudioPreRead(std::size_t numFrames, std::size_t framesLatency); + void SourceAudioRead(void *buffer, const void *inputBuffer, std::size_t numFrames); + void SourceAudioDone(); + + void RequestClose() { m_RequestFlags.fetch_or(RequestFlagClose); } + void RequestReset() { m_RequestFlags.fetch_or(RequestFlagReset); } + void RequestRestart() { m_RequestFlags.fetch_or(RequestFlagRestart); } + + void SendDeviceMessage(LogLevel level, const mpt::ustring &str); + +protected: + + void SetTimeInfo(SoundDevice::TimeInfo timeInfo) { m_TimeInfo = timeInfo; } + + SoundDevice::StreamPosition StreamPositionFromFrames(int64 frames) const { return SoundDevice::StreamPosition(frames, static_cast<double>(frames) / static_cast<double>(m_Settings.Samplerate)); } + + virtual bool InternalHasTimeInfo() const { return false; } + + virtual bool InternalHasGetStreamPosition() const { return false; } + virtual int64 InternalGetStreamPositionFrames() const { return 0; } + + virtual bool InternalIsOpen() const = 0; + + virtual bool InternalOpen() = 0; + virtual bool InternalStart() = 0; + virtual void InternalStop() = 0; + virtual void InternalStopForce() { InternalStop(); } + virtual bool InternalClose() = 0; + + virtual SoundDevice::Caps InternalGetDeviceCaps() = 0; + + virtual SoundDevice::BufferAttributes InternalGetEffectiveBufferAttributes() const = 0; + +protected: + + Base(SoundDevice::Info info); + +public: + + virtual ~Base(); + + void SetSource(SoundDevice::ISource *source) { m_Source = source; } + void SetMessageReceiver(SoundDevice::IMessageReceiver *receiver) { m_MessageReceiver = receiver; } + + SoundDevice::Info GetDeviceInfo() const { return m_Info; } + + SoundDevice::Caps GetDeviceCaps() const { return m_Caps; } + virtual SoundDevice::DynamicCaps GetDeviceDynamicCaps(const std::vector<uint32> &baseSampleRates); + + bool Init(const SoundDevice::AppInfo &appInfo); + bool Open(const SoundDevice::Settings &settings); + bool Close(); + bool Start(); + void Stop(bool force = false); + + FlagSet<RequestFlags> GetRequestFlags() const { return FlagSet<RequestFlags>(m_RequestFlags.load()); } + + bool IsInited() const { return m_Caps.Available; } + bool IsOpen() const { return IsInited() && InternalIsOpen(); } + bool IsAvailable() const { return m_Caps.Available && !m_DeviceUnavailableOnOpen; } + bool IsPlaying() const { return m_IsPlaying; } + + virtual bool OnIdle() { return false; } + + SoundDevice::Settings GetSettings() const { return m_Settings; } + SampleFormat GetActualSampleFormat() const { return IsOpen() ? m_Settings.sampleFormat : SampleFormatInvalid; } + SoundDevice::BufferAttributes GetEffectiveBufferAttributes() const { return (IsOpen() && IsPlaying()) ? InternalGetEffectiveBufferAttributes() : SoundDevice::BufferAttributes(); } + + SoundDevice::TimeInfo GetTimeInfo() const { return m_TimeInfo; } + SoundDevice::StreamPosition GetStreamPosition() const; + + virtual bool DebugIsFragileDevice() const { return false; } + virtual bool DebugInRealtimeCallback() const { return false; } + + virtual SoundDevice::Statistics GetStatistics() const; + + virtual bool OpenDriverSettings() { return false; }; + +}; + + +} // namespace SoundDevice + + +OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDeviceDirectSound.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -11,7 +11,7 @@ #pragma once -#include "SoundDevice.h" +#include "SoundDeviceBase.h" #include "SoundDeviceUtilities.h" #include "../common/ComponentManager.h" Modified: trunk/OpenMPT/sounddev/SoundDeviceManager.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-23 11:19:36 UTC (rev 5142) @@ -209,18 +209,6 @@ } -SoundDevice::Type ParseType(const SoundDevice::Identifier &identifier) -//-------------------------------------------------------------------- -{ - std::vector<mpt::ustring> tmp = mpt::String::Split<mpt::ustring>(identifier, MPT_USTRING("_")); - if(tmp.size() == 0) - { - return SoundDevice::Type(); - } - return tmp[0]; -} - - SoundDevice::Info Manager::FindDeviceInfoBestMatch(SoundDevice::Identifier identifier, bool preferSameType) //--------------------------------------------------------------------------------------------------------- { Modified: trunk/OpenMPT/sounddev/SoundDevicePortAudio.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDevicePortAudio.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDevicePortAudio.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -10,7 +10,7 @@ #pragma once -#include "SoundDevice.h" +#include "SoundDeviceBase.h" #include "../common/ComponentManager.h" Modified: trunk/OpenMPT/sounddev/SoundDeviceUtilities.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceUtilities.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDeviceUtilities.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -11,7 +11,7 @@ #pragma once -#include "SoundDevice.h" +#include "SoundDeviceBase.h" #include "../common/misc_util.h" Modified: trunk/OpenMPT/sounddev/SoundDeviceWaveout.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-05-23 11:08:28 UTC (rev 5141) +++ trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-05-23 11:19:36 UTC (rev 5142) @@ -11,7 +11,7 @@ #pragma once -#include "SoundDevice.h" +#include "SoundDeviceBase.h" #include "SoundDeviceUtilities.h" #include "../common/ComponentManager.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-23 15:25:25
|
Revision: 5144 http://sourceforge.net/p/modplug/code/5144 Author: manxorist Date: 2015-05-23 15:25:19 +0000 (Sat, 23 May 2015) Log Message: ----------- [Mod] sounddev: Sort default devices for each API type before other devices of the same API (fixes rather annoying ordering of WASAPI devices). [Ref] sounddev: Cleanup combobox filling code in the soundcard settings dialog. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/sounddev/SoundDeviceManager.cpp Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2015-05-23 15:10:15 UTC (rev 5143) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2015-05-23 15:25:19 UTC (rev 5144) @@ -362,56 +362,52 @@ { COMBOBOXEXITEM cbi; MemsetZero(cbi); - CString name = mpt::ToCString(it->name); - cbi.mask = CBEIF_LPARAM | CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; cbi.iItem = iItem; cbi.cchTextMax = 0; - if(it->type == SoundDevice::TypeWAVEOUT) + cbi.mask = CBEIF_LPARAM | CBEIF_TEXT; + cbi.lParam = theApp.GetSoundDevicesManager()->GetGlobalID(it->GetIdentifier()); + if(it->type == SoundDevice::TypeWAVEOUT || it->type == SoundDevice::TypePORTAUDIO_WMME) { + cbi.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; cbi.iImage = IMAGE_WAVEOUT; - } else if(it->type == SoundDevice::TypePORTAUDIO_WMME) + } else if(it->type == SoundDevice::TypeDSOUND || it->type == SoundDevice::TypePORTAUDIO_DS) { - cbi.iImage = IMAGE_WAVEOUT; - } else if(it->type == SoundDevice::TypeDSOUND) - { + cbi.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; cbi.iImage = IMAGE_DIRECTX; - } else if(it->type == SoundDevice::TypePORTAUDIO_DS) - { - cbi.iImage = IMAGE_DIRECTX; } else if(it->type == SoundDevice::TypeASIO) { + cbi.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; cbi.iImage = IMAGE_ASIO; } else if(it->type == SoundDevice::TypePORTAUDIO_WASAPI) { - // No real image available for now, - // prepend API name to name and misuse another icon - cbi.iImage = IMAGE_SAMPLEMUTE; - name = mpt::ToCString(it->apiName) + _T(" - ") + name; + cbi.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; + cbi.iImage = IMAGE_SAMPLEMUTE; // // No real image available for now, } else if(it->type == SoundDevice::TypePORTAUDIO_WDMKS) { - // No real image available for now, - // prepend API name to name and misuse another icon. - cbi.iImage = IMAGE_CHIP; - name = mpt::ToCString(it->apiName) + _T(" - ") + name; + cbi.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY; + cbi.iImage = IMAGE_CHIP; // No real image available for now, } else { - cbi.mask &= ~(CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_OVERLAY); - std::vector<mpt::ustring> api = it->apiPath; - api.push_back(it->apiName); - name = mpt::ToCString(mpt::String::Combine(api, MPT_USTRING(" - "))) + _T(" - ") + name; + cbi.iImage = 0; } - if(it->isDefault) + cbi.iSelectedImage = cbi.iImage; + cbi.iOverlay = cbi.iImage; + mpt::ustring name = it->name + (it->isDefault ? MPT_USTRING(" [default]") : MPT_USTRING("")); + if(it->type == SoundDevice::TypeWAVEOUT || it->type == SoundDevice::TypeDSOUND || it->type == SoundDevice::TypeASIO) { - name += _T(" (Default)"); + // leave name alone + } else if(it->type == SoundDevice::TypePORTAUDIO_WASAPI || it->type == SoundDevice::TypePORTAUDIO_WDMKS) + { + name = it->apiName + MPT_USTRING(" - ") + name; + } else + { + name = ((it->apiPath.size() > 0) ? mpt::String::Combine(it->apiPath, MPT_USTRING(" - ")) + MPT_USTRING(" - ") : MPT_USTRING("")) + it->apiName + MPT_USTRING(" - ") + name; } - cbi.iSelectedImage = cbi.iImage; - cbi.iOverlay = cbi.iImage; - cbi.iIndent = 0; - cbi.lParam = theApp.GetSoundDevicesManager()->GetGlobalID(it->GetIdentifier()); TCHAR tmp[1024]; MemsetZero(tmp); - lstrcpyn(tmp, name, 1023); + lstrcpyn(tmp, mpt::ToCString(name), 1023); cbi.pszText = tmp; + cbi.iIndent = 0; int pos = m_CbnDevice.InsertItem(&cbi); if(static_cast<SoundDevice::Manager::GlobalID>(cbi.lParam) == theApp.GetSoundDevicesManager()->GetGlobalID(m_CurrentDeviceInfo.GetIdentifier())) { Modified: trunk/OpenMPT/sounddev/SoundDeviceManager.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-23 15:10:15 UTC (rev 5143) +++ trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-23 15:25:19 UTC (rev 5144) @@ -26,19 +26,21 @@ namespace SoundDevice { - struct CompareType +struct CompareInfo +{ + std::map<SoundDevice::Type, int> ordering; + CompareInfo(const std::map<SoundDevice::Type, int> &ordering) + : ordering(ordering) { - std::map<SoundDevice::Type, int> ordering; - CompareType(const std::map<SoundDevice::Type, int> &ordering) - : ordering(ordering) - { - return; - } - bool operator () (const SoundDevice::Info &x, const SoundDevice::Info &y) - { - return (ordering[x.type] > ordering[y.type]); - } - }; + return; + } + bool operator () (const SoundDevice::Info &x, const SoundDevice::Info &y) + { + return (ordering[x.type] > ordering[y.type]) + || ((ordering[x.type] == ordering[y.type]) && (x.isDefault && !y.isDefault)) + ; + } +}; template <typename Tdevice> @@ -114,10 +116,10 @@ { // Wine typePriorities[SoundDevice::TypeDSOUND] = 29; typePriorities[SoundDevice::TypeWAVEOUT] = 28; - typePriorities[SoundDevice::TypePORTAUDIO_WASAPI] = 21; + typePriorities[SoundDevice::TypePORTAUDIO_WASAPI] = 27; + typePriorities[SoundDevice::TypeASIO] = 21; typePriorities[SoundDevice::TypePORTAUDIO_WMME] = 19; typePriorities[SoundDevice::TypePORTAUDIO_DS] = 18; - typePriorities[SoundDevice::TypeASIO] = 10; typePriorities[SoundDevice::TypePORTAUDIO_WDMKS] = -1; } else if(mpt::Windows::Version::Is9x()) { // Win9x @@ -147,7 +149,7 @@ typePriorities[SoundDevice::TypeDSOUND] = -1; typePriorities[SoundDevice::TypePORTAUDIO_DS] = -2; } - std::stable_sort(m_SoundDevices.begin(), m_SoundDevices.end(), CompareType(typePriorities)); + std::stable_sort(m_SoundDevices.begin(), m_SoundDevices.end(), CompareInfo(typePriorities)); Log(LogDebug, MPT_USTRING("Sound Devices enumerated:")); for(std::size_t i = 0; i < m_SoundDevices.size(); ++i) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-23 17:07:42
|
Revision: 5148 http://sourceforge.net/p/modplug/code/5148 Author: saga-games Date: 2015-05-23 17:07:35 +0000 (Sat, 23 May 2015) Log Message: ----------- [New] Plugins: Apply volume swing to instrument plugins. Involves rearranging some code which hopefully won't break anything... [Mod] OpenMPT: Version is now 1.25.00.07 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/common/versionNumber.h 2015-05-23 17:07:35 UTC (rev 5148) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 25 #define VER_MINOR 00 -#define VER_MINORMINOR 06 +#define VER_MINORMINOR 07 //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/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-23 17:07:35 UTC (rev 5148) @@ -1458,6 +1458,52 @@ // Test case: PanReset.it if(IsCompatibleMode(TRK_IMPULSETRACKER)) ApplyInstrumentPanning(pChn, pIns, pSmp); + if(bResetEnv) + { + pChn->nVolSwing = pChn->nPanSwing = 0; + pChn->nResSwing = pChn->nCutSwing = 0; + if(pIns) + { + // IT Compatiblity: NNA is reset on every note change, not every instrument change (fixes spx-farspacedance.it). + if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nNNA = pIns->nNNA; + + if(!pIns->VolEnv.dwFlags[ENV_CARRY]) pChn->VolEnv.Reset(); + if(!pIns->PanEnv.dwFlags[ENV_CARRY]) pChn->PanEnv.Reset(); + if(!pIns->PitchEnv.dwFlags[ENV_CARRY]) pChn->PitchEnv.Reset(); + + // Volume Swing + if(pIns->nVolSwing) + { + const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; + pChn->nVolSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? pChn->nInsVol : ((pChn->nVolume + 1) / 2)) * pIns->nVolSwing / 100.0)); + } + // Pan Swing + if(pIns->nPanSwing) + { + const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; + pChn->nPanSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? 4 : 1) * pIns->nPanSwing)); + if(!IsCompatibleMode(TRK_IMPULSETRACKER)) + { + pChn->nRestorePanOnNewNote = pChn->nPan + 1; + } + } + // Cutoff Swing + if(pIns->nCutSwing) + { + int32 d = ((int32)pIns->nCutSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; + pChn->nCutSwing = (int16)((d * pChn->nCutOff + 1) / 128); + pChn->nRestoreCutoffOnNewNote = pChn->nCutOff + 1; + } + // Resonance Swing + if(pIns->nResSwing) + { + int32 d = ((int32)pIns->nResSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; + pChn->nResSwing = (int16)((d * pChn->nResonance + 1) / 128); + pChn->nRestoreResonanceOnNewNote = pChn->nResonance + 1; + } + } + } + if(!pSmp) return; if(period) { @@ -1591,48 +1637,6 @@ if(bResetEnv) { - pChn->nVolSwing = pChn->nPanSwing = 0; - pChn->nResSwing = pChn->nCutSwing = 0; - if(pIns) - { - // IT Compatiblity: NNA is reset on every note change, not every instrument change (fixes spx-farspacedance.it). - if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nNNA = pIns->nNNA; - - if(!pIns->VolEnv.dwFlags[ENV_CARRY]) pChn->VolEnv.Reset(); - if(!pIns->PanEnv.dwFlags[ENV_CARRY]) pChn->PanEnv.Reset(); - if(!pIns->PitchEnv.dwFlags[ENV_CARRY]) pChn->PitchEnv.Reset(); - - // Volume Swing - if(pIns->nVolSwing) - { - const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; - pChn->nVolSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? pChn->nInsVol : ((pChn->nVolume + 1) / 2)) * pIns->nVolSwing / 100.0)); - } - // Pan Swing - if(pIns->nPanSwing) - { - const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; - pChn->nPanSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? 4 : 1) * pIns->nPanSwing)); - if(!IsCompatibleMode(TRK_IMPULSETRACKER)) - { - pChn->nRestorePanOnNewNote = pChn->nPan + 1; - } - } - // Cutoff Swing - if(pIns->nCutSwing) - { - int32 d = ((int32)pIns->nCutSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; - pChn->nCutSwing = (int16)((d * pChn->nCutOff + 1) / 128); - pChn->nRestoreCutoffOnNewNote = pChn->nCutOff + 1; - } - // Resonance Swing - if(pIns->nResSwing) - { - int32 d = ((int32)pIns->nResSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; - pChn->nResSwing = (int16)((d * pChn->nResonance + 1) / 128); - pChn->nRestoreResonanceOnNewNote = pChn->nResonance + 1; - } - } pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; // IT Compatibility: Vibrato reset Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-23 17:07:35 UTC (rev 5148) @@ -2261,20 +2261,25 @@ //If new note, determine notevelocity to use. if(note != NOTE_NONE) { - uint16 velocity = static_cast<uint16>(4 * defaultVolume); + int32 velocity = static_cast<int32>(4 * defaultVolume); switch(pIns->nPluginVelocityHandling) { case PLUGIN_VELOCITYHANDLING_CHANNEL: - velocity = static_cast<uint16>(chn.nVolume); + velocity = chn.nVolume; break; } + int32 swing = chn.nVolSwing; + if(IsCompatibleMode(TRK_IMPULSETRACKER)) swing *= 4; + velocity += swing; + Limit(velocity, 0, 256); + ModCommand::NOTE realNote = note; if(ModCommand::IsNote(note)) realNote = pIns->NoteMap[note - NOTE_MIN]; // Experimental VST panning //ProcessMIDIMacro(nChn, false, m_MidiCfg.szMidiGlb[MIDIOUT_PAN], 0, nPlugin); - pPlugin->MidiCommand(GetBestMidiChannel(nChn), pIns->nMidiProgram, pIns->wMidiBank, realNote, velocity, nChn); + pPlugin->MidiCommand(GetBestMidiChannel(nChn), pIns->nMidiProgram, pIns->wMidiBank, realNote, static_cast<uint16>(velocity), nChn); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-24 22:14:53
|
Revision: 5156 http://sourceforge.net/p/modplug/code/5156 Author: saga-games Date: 2015-05-24 22:14:47 +0000 (Sun, 24 May 2015) Log Message: ----------- [Ref] Small changes here and there with no functional changes Modified Paths: -------------- trunk/OpenMPT/common/mptPathString.h trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/ITTools.h trunk/OpenMPT/soundlib/Load_umx.cpp trunk/OpenMPT/soundlib/ModInstrument.h trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/SoundFilePlayConfig.cpp trunk/OpenMPT/soundlib/SoundFilePlayConfig.h trunk/OpenMPT/unarchiver/ungzip.cpp Modified: trunk/OpenMPT/common/mptPathString.h =================================================================== --- trunk/OpenMPT/common/mptPathString.h 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/common/mptPathString.h 2015-05-24 22:14:47 UTC (rev 5156) @@ -100,6 +100,7 @@ // Verify if this path represents a valid directory on the file system. bool IsDirectory() const { return ::PathIsDirectoryW(path.c_str()) != FALSE; } + // Verify if this path exists and is a file on the file system. bool IsFile() const { DWORD dwAttrib = ::GetFileAttributesW(path.c_str()); @@ -119,15 +120,12 @@ { if(empty()) return false; - const RawPathString::value_type &c = path[path.length() - 1]; + const RawPathString::const_reference c = path.back(); #if MPT_OS_WINDOWS - if(c == L'\\' || c == L'/') - return true; + return (c == L'\\' || c == L'/'); #else - if(c == '/') - return true; + return (c == '/'); #endif - return false; } // Relative / absolute paths conversion Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -51,7 +51,7 @@ if (bNoExistingKbdFileSetting) TrackerSettings::Instance().m_szKbdFile = sDefaultPath; bool bSuccess = false; - if (PathFileExistsW(sDefaultPath.AsNative().c_str()) == TRUE) + if (sDefaultPath.IsFile()) bSuccess = activeCommandSet->LoadFile(sDefaultPath); if (!bSuccess) { @@ -510,14 +510,14 @@ case ID_VIEW_GRAPH: s = _T("G&raph"); c = kcViewGraph; break; //rewbs.graph case MAINVIEW: s = _T("&Main"); c = kcViewMain; break; case IDD_TREEVIEW: s = _T("&Tree"); c = kcViewTree; break; - case ID_VIEW_OPTIONS: s = _T("S&etup..."); c = kcViewOptions; break; - case ID_HELPSHOW: s = _T("&Help..."); c = kcHelp; break; - case ID_PLUGIN_SETUP: s = _T("Pl&ugin Manager..."); c = kcViewAddPlugin; break; - case ID_CHANNEL_MANAGER: s = _T("Ch&annel Manager..."); c = kcViewChannelManager; break; - case ID_CLIPBOARD_MANAGER: s = _T("C&lipboard Manager..."); c = kcToggleClipboardManager; break; - case ID_VIEW_SONGPROPERTIES:s = _T("Song P&roperties..."); c = kcViewSongProperties; break; //rewbs.graph - case ID_VIEW_MIDIMAPPING: s = _T("&MIDI Mapping..."); c = kcViewMIDImapping; break; - case ID_VIEW_EDITHISTORY: s = _T("Edit &History..."); c = kcViewEditHistory; break; + case ID_VIEW_OPTIONS: s = _T("S&etup"); c = kcViewOptions; break; + case ID_HELPSHOW: s = _T("&Help"); c = kcHelp; break; + case ID_PLUGIN_SETUP: s = _T("Pl&ugin Manager"); c = kcViewAddPlugin; break; + case ID_CHANNEL_MANAGER: s = _T("Ch&annel Manager"); c = kcViewChannelManager; break; + case ID_CLIPBOARD_MANAGER: s = _T("C&lipboard Manager"); c = kcToggleClipboardManager; break; + case ID_VIEW_SONGPROPERTIES:s = _T("Song P&roperties"); c = kcViewSongProperties; break; + case ID_VIEW_MIDIMAPPING: s = _T("&MIDI Mapping"); c = kcViewMIDImapping; break; + case ID_VIEW_EDITHISTORY: s = _T("Edit &History"); c = kcViewEditHistory; break; // Help submenu: case ID_EXAMPLE_MODULES: return _T("&Example Modules"); Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -602,6 +602,7 @@ HMENU hMenu = ::CreatePopupMenu(); MIDIINCAPS mic; UINT ndevs = midiInGetNumDevs(); + if(ndevs > MAX_MIDI_DEVICES) ndevs = MAX_MIDI_DEVICES; UINT current = TrackerSettings::Instance().m_nMidiDevice; for(UINT i = 0; i < ndevs; i++) { Modified: trunk/OpenMPT/soundlib/ITTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/ITTools.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -360,10 +360,10 @@ } if(note < 120) { - mptIns.NoteMap[i] = note + 1u; + mptIns.NoteMap[i] = note + NOTE_MIN; } else { - mptIns.NoteMap[i] = static_cast<uint8>(i + 1); + mptIns.NoteMap[i] = static_cast<uint8>(i + NOTE_MIN); } } Modified: trunk/OpenMPT/soundlib/ITTools.h =================================================================== --- trunk/OpenMPT/soundlib/ITTools.h 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/ITTools.h 2015-05-24 22:14:47 UTC (rev 5156) @@ -88,7 +88,7 @@ envFilter = 0x80, }; - uint8 flags; // Envelope Flags + uint8 flags; // Envelope Flags uint8 num; // Number of Envelope Nodes uint8 lpb; // Loop Start uint8 lpe; // Loop End Modified: trunk/OpenMPT/soundlib/Load_umx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_umx.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/Load_umx.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -158,7 +158,7 @@ ReadUMXIndex(chunk); // Object parent if(packageVersion >= 60) { - chunk.Skip(4); // Internal package / group of the object + chunk.Skip(4); // Internal package / group of the object } objName = ReadUMXIndex(chunk); // Object name (offset into the name table) chunk.Skip(4); // Object flags Modified: trunk/OpenMPT/soundlib/ModInstrument.h =================================================================== --- trunk/OpenMPT/soundlib/ModInstrument.h 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/ModInstrument.h 2015-05-24 22:14:47 UTC (rev 5156) @@ -77,7 +77,7 @@ int8 nPPS; // Pitch/Pan separation (i.e. how wide the panning spreads, -32...32) uint8 nPPC; // Pitch/Pan centre - PLUGINDEX nMixPlug; // Plugin assigned to this instrument + PLUGINDEX nMixPlug; // Plugin assigned to this instrument (0 = no plugin, 1 = first plugin) uint8 nCutSwing; // Random cutoff factor (0...64) uint8 nResSwing; // Random resonance factor (0...64) uint8 nFilterMode; // Default filter mode Modified: trunk/OpenMPT/soundlib/Snd_flt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_flt.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/Snd_flt.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -14,7 +14,7 @@ #include "Tables.h" #define _USE_MATH_DEFINES -#include <math.h> +#include <cmath> #ifndef M_PI #define M_PI 3.1415926535897932385 #endif @@ -30,15 +30,11 @@ DWORD CSoundFile::CutOffToFrequency(UINT nCutOff, int flt_modifier) const //----------------------------------------------------------------------- { - float Fc; MPT_ASSERT(nCutOff < 128); - if(m_SongFlags[SONG_EXFILTERRANGE]) - Fc = 110.0f * pow(2.0f, 0.25f + ((float)(nCutOff * (flt_modifier + 256))) / (20.0f * 512.0f)); - else - Fc = 110.0f * pow(2.0f, 0.25f + ((float)(nCutOff * (flt_modifier + 256))) / (24.0f * 512.0f)); - LONG freq = (LONG)Fc; + float Fc = 110.0f * std::pow(2.0f, 0.25f + ((float)(nCutOff * (flt_modifier + 256))) / (m_SongFlags[SONG_EXFILTERRANGE] ? 20.0f * 512.0f : 24.0f * 512.0f)); + int freq = static_cast<int>(Fc); Limit(freq, 120, 20000); - if (freq * 2 > (LONG)m_MixerSettings.gdwMixingFreq) freq = m_MixerSettings.gdwMixingFreq >> 1; + if (freq * 2 > (int)m_MixerSettings.gdwMixingFreq) freq = m_MixerSettings.gdwMixingFreq / 2; return (DWORD)freq; } Modified: trunk/OpenMPT/soundlib/SoundFilePlayConfig.cpp =================================================================== --- trunk/OpenMPT/soundlib/SoundFilePlayConfig.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/SoundFilePlayConfig.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -26,8 +26,8 @@ { } -void CSoundFilePlayConfig::SetMixLevels(int mixLevelType) -//------------------------------------------------------- +void CSoundFilePlayConfig::SetMixLevels(mixLevels mixLevelType) +//------------------------------------------------------------- { switch (mixLevelType) { Modified: trunk/OpenMPT/soundlib/SoundFilePlayConfig.h =================================================================== --- trunk/OpenMPT/soundlib/SoundFilePlayConfig.h 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/soundlib/SoundFilePlayConfig.h 2015-05-24 22:14:47 UTC (rev 5156) @@ -50,7 +50,7 @@ CSoundFilePlayConfig(void); ~CSoundFilePlayConfig(void); - void SetMixLevels(int mixLevelType); + void SetMixLevels(mixLevels mixLevelType); //getters/setters bool getGlobalVolumeAppliesToMaster() const { return m_globalVolumeAppliesToMaster; } Modified: trunk/OpenMPT/unarchiver/ungzip.cpp =================================================================== --- trunk/OpenMPT/unarchiver/ungzip.cpp 2015-05-24 22:10:36 UTC (rev 5155) +++ trunk/OpenMPT/unarchiver/ungzip.cpp 2015-05-24 22:14:47 UTC (rev 5156) @@ -94,7 +94,8 @@ return false; } - try { + try + { data.resize(trailer.isize); } catch(...) { @@ -119,15 +120,7 @@ inflateEnd(&strm); // Everything went OK? Check return code, number of written bytes and CRC32. - if(retVal == Z_STREAM_END && trailer.isize == strm.total_out && trailer.crc32_ == crc32(0, (Bytef *)&data[0], trailer.isize)) - { - // Success! :) - return true; - } else - { - // Fail :( - return false; - } + return (retVal == Z_STREAM_END && trailer.isize == strm.total_out && trailer.crc32_ == crc32(0, (Bytef *)&data[0], trailer.isize)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-24 22:28:29
|
Revision: 5159 http://sourceforge.net/p/modplug/code/5159 Author: saga-games Date: 2015-05-24 22:28:22 +0000 (Sun, 24 May 2015) Log Message: ----------- [New] Experimental support for 14-bit MIDI controllers: When recording parameter automation through MIDI mapping, combinations of CC 0...31 and CC 32...63 now act as double-precision MIDI messages (I have no devices which send such CC combinations, hence it's untested) Modified Paths: -------------- trunk/OpenMPT/mptrack/MIDIMapping.cpp trunk/OpenMPT/mptrack/MIDIMapping.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/MIDIMapping.cpp =================================================================== --- trunk/OpenMPT/mptrack/MIDIMapping.cpp 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/MIDIMapping.cpp 2015-05-24 22:28:22 UTC (rev 5159) @@ -108,14 +108,15 @@ } -bool CMIDIMapper::OnMIDImsg(const DWORD midimsg, PLUGINDEX &mappedIndex, PlugParamIndex ¶mindex, uint8 ¶mval) -//------------------------------------------------------------------------------------------------------------------- +bool CMIDIMapper::OnMIDImsg(const DWORD midimsg, PLUGINDEX &mappedIndex, PlugParamIndex ¶mindex, uint16 ¶mval) +//-------------------------------------------------------------------------------------------------------------------- { bool captured = false; const MIDIEvents::EventType eventType = MIDIEvents::GetTypeFromEvent(midimsg); const uint8 controller = MIDIEvents::GetDataByte1FromEvent(midimsg); - const uint8 channel = MIDIEvents::GetChannelFromEvent(midimsg); + const uint8 channel = MIDIEvents::GetChannelFromEvent(midimsg) & 0x7F; + const uint8 controllerVal = MIDIEvents::GetDataByte2FromEvent(midimsg) & 0x7F; for(const_iterator citer = Begin(); citer != End() && !captured; citer++) { @@ -126,8 +127,19 @@ const PLUGINDEX plugindex = citer->GetPlugIndex(); const uint32 param = citer->GetParamIndex(); - const uint8 val = (citer->GetEvent() == MIDIEvents::evChannelAftertouch ? controller : MIDIEvents::GetDataByte2FromEvent(midimsg)) & 0x7F; + uint16 val = (citer->GetEvent() == MIDIEvents::evChannelAftertouch ? controller : controllerVal) << 7; + if(eventType == MIDIEvents::evControllerChange) + { + // Coarse (0...31) / Fine (32...63) controller pairs - coarse should be sent first. + if(controller == lastCC + 32 && lastCC < 32) + { + val = (val >> 7) | lastCCvalue; + } + lastCC = controller; + lastCCvalue = val; + } + if(citer->GetAllowPatternEdit()) { mappedIndex = plugindex; Modified: trunk/OpenMPT/mptrack/MIDIMapping.h =================================================================== --- trunk/OpenMPT/mptrack/MIDIMapping.h 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/MIDIMapping.h 2015-05-24 22:28:22 UTC (rev 5159) @@ -83,7 +83,7 @@ { public: typedef std::vector<CMIDIMappingDirective>::const_iterator const_iterator; - CMIDIMapper(CSoundFile& sndfile) : m_rSndFile(sndfile) {} + CMIDIMapper(CSoundFile& sndfile) : m_rSndFile(sndfile), lastCC(uint8_max), lastCCvalue(0) {} //If mapping found: // -mappedIndex is set to mapped value(plug index) @@ -91,7 +91,7 @@ // -paramvalue to parameter value. //In case of multiple mappings, these get the values from the last mapping found. //Returns true if MIDI was 'captured' by some directive, false otherwise. - bool OnMIDImsg(const DWORD midimsg, PLUGINDEX &mappedIndex, PlugParamIndex ¶mindex, uint8 ¶mvalue); + bool OnMIDImsg(const DWORD midimsg, PLUGINDEX &mappedIndex, PlugParamIndex ¶mindex, uint16 ¶mvalue); //Swaps the positions of two elements. Returns true if swap was not done. bool Swap(const size_t a, const size_t b); @@ -122,6 +122,8 @@ private: CSoundFile& m_rSndFile; std::vector<CMIDIMappingDirective> m_Directives; + uint8 lastCC; + uint16 lastCCvalue; }; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-24 22:28:22 UTC (rev 5159) @@ -981,7 +981,7 @@ PLUGINDEX mappedIndex = 0; PlugParamIndex paramIndex = 0; - uint8 paramValue = 0; + uint16 paramValue = 0; bool captured = m_SndFile.GetMIDIMapper().OnMIDImsg(midiData, mappedIndex, paramIndex, paramValue); // Handle MIDI messages assigned to shortcuts Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-05-24 22:28:22 UTC (rev 5159) @@ -162,8 +162,6 @@ m_Dib.Init(CMainFrame::bmpNotes); UpdateColors(); m_PCNoteEditMemory = ModCommand::Empty(); - - octaveKeyMemory.resize(10, NOTE_NONE); } @@ -1449,7 +1447,7 @@ } else { if (BuildSoloMuteCtxMenu(hMenu, ih, nChn, pSndFile)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); BuildRecordCtxMenu(hMenu, ih, nChn, pModDoc); BuildChannelControlCtxMenu(hMenu, ih); } @@ -1460,34 +1458,35 @@ { // When combining menus, use bitwise ORs to avoid shortcuts if(BuildSelectionCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildEditCtxMenu(hMenu, ih, pModDoc)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildInterpolationCtxMenu(hMenu, ih) | BuildTransposeCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildVisFXCtxMenu(hMenu, ih) | BuildAmplifyCtxMenu(hMenu, ih) | BuildSetInstCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildPCNoteCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildGrowShrinkCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildMiscCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); if(BuildRowInsDelCtxMenu(hMenu, ih)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); - CString s = "&Quantize "; + CString s = _T("&Quantize "); if(TrackerSettings::Instance().recordQuantizeRows != 0) { - s.AppendFormat("(Currently: %d Rows)", TrackerSettings::Instance().recordQuantizeRows.Get()); + uint32 rows = TrackerSettings::Instance().recordQuantizeRows.Get(); + s.AppendFormat(_T("(Currently: %d Row%s)"), rows, rows == 1 ? _T("") : _T("s")); } else { - s.Append("Settings..."); + s.Append(_T("Settings...")); } - s.Append("\t" + ih->GetKeyTextFromCommand(kcQuantizeSettings)); + s.Append(_T("\t") + ih->GetKeyTextFromCommand(kcQuantizeSettings)); AppendMenu(hMenu, MF_STRING | (TrackerSettings::Instance().recordQuantizeRows != 0 ? MF_CHECKED : 0), ID_SETQUANTIZE, s); } @@ -3994,7 +3993,7 @@ // Handle MIDI mapping. PLUGINDEX mappedIndex = uint8_max; PlugParamIndex paramIndex = 0; - uint8 paramValue = uint8_max; + uint16 paramValue = uint16_max; bool captured = sndFile.GetMIDIMapper().OnMIDImsg(dwMidiData, mappedIndex, paramIndex, paramValue); @@ -4008,14 +4007,14 @@ } // Write parameter control commands if needed. - if(paramValue != uint8_max && IsEditingEnabled() && sndFile.GetType() == MOD_TYPE_MPT) + if(paramValue != uint16_max && IsEditingEnabled() && sndFile.GetType() == MOD_TYPE_MPT) { const bool liveRecord = IsLiveRecord(); ModCommandPos editpos = GetEditPos(sndFile, liveRecord); ModCommand &m = GetModCommand(sndFile, editpos); pModDoc->GetPatternUndo().PrepareUndo(editpos.pattern, editpos.channel, editpos.row, 1, 1, "MIDI Mapping Record"); - m.Set(NOTE_PCS, mappedIndex, static_cast<uint16>(paramIndex), static_cast<uint16>((paramValue * ModCommand::maxColumnValue) / 127)); + m.Set(NOTE_PCS, mappedIndex, static_cast<uint16>(paramIndex), static_cast<uint16>((paramValue * ModCommand::maxColumnValue) / 16383)); if(!liveRecord) InvalidateRow(editpos.row); pMainFrm->ThreadSafeSetModified(pModDoc); @@ -5134,7 +5133,7 @@ // custom tunings always has octave 5, no matter how many octaves the tuning actually has. TempEnterNote(((target.note - NOTE_MIN) % groupSize) + (val - 5) * groupSize + NOTE_MIDDLEC); // Memorize note for key-up - ASSERT(size_t(val) < octaveKeyMemory.size()); + ASSERT(size_t(val) < CountOf(octaveKeyMemory)); octaveKeyMemory[val] = target.note; } } @@ -5144,7 +5143,7 @@ void CViewPattern::TempStopOctave(int val) //---------------------------------------- { - ASSERT(size_t(val) < octaveKeyMemory.size()); + ASSERT(size_t(val) < CountOf(octaveKeyMemory)); if(octaveKeyMemory[val] != NOTE_NONE) { TempStopNote(octaveKeyMemory[val]); @@ -6416,7 +6415,7 @@ bool CViewPattern::BuildChannelControlCtxMenu(HMENU hMenu, CInputHandler *ih) const //--------------------------------------------------------------------------------- { - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + AppendMenu(hMenu, MF_SEPARATOR, 0, _T("")); AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSPOSECHANNEL, "&Transpose Channel\t" + ih->GetKeyTextFromCommand(kcChannelTranspose)); AppendMenu(hMenu, MF_STRING, ID_PATTERN_DUPLICATECHANNEL, "&Duplicate Channel\t" + ih->GetKeyTextFromCommand(kcChannelDuplicate)); Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-05-24 22:28:22 UTC (rev 5159) @@ -193,8 +193,6 @@ QuickChannelProperties quickChannelProperties; - std::vector<ModCommand::NOTE> octaveKeyMemory; - // Chord preview CHANNELINDEX chordPatternChannels[MPTChord::notesPerChord]; ModCommand::NOTE prevChordNote, prevChordBaseNote; @@ -202,6 +200,7 @@ WORD ChnVUMeters[MAX_BASECHANNELS]; WORD OldVUMeters[MAX_BASECHANNELS]; + ModCommand::NOTE octaveKeyMemory[10]; ModCommand::NOTE previousNote[MAX_BASECHANNELS]; BYTE activeNoteChannel[NOTE_MAX + NOTE_MIN]; BYTE splitActiveNoteChannel[NOTE_MAX + NOTE_MIN]; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-24 22:28:22 UTC (rev 5159) @@ -1987,14 +1987,14 @@ void CVstPlugin::SetZxxParameter(UINT nParam, UINT nValue) //-------------------------------------------------------- { - PlugParamValue fValue = (PlugParamValue)nValue / 127.0f; + PlugParamValue fValue = (PlugParamValue)nValue / 16383.0f; SetParameter(nParam, fValue); } UINT CVstPlugin::GetZxxParameter(UINT nParam) //------------------------------------------- { - return (UINT) (GetParameter(nParam) * 127.0f + 0.5f); + return (UINT) (GetParameter(nParam) * 16383.0f + 0.5f); } Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-24 22:25:01 UTC (rev 5158) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-24 22:28:22 UTC (rev 5159) @@ -4608,10 +4608,10 @@ { if(!isSmooth) { - pPlugin->SetZxxParameter(plugParam, param & 0x7F); + pPlugin->SetZxxParameter(plugParam, (param & 0x7F) << 7); } else { - pPlugin->SetZxxParameter(plugParam, (uint32)CalculateSmoothParamChange((float)pPlugin->GetZxxParameter(plugParam), (float)(param & 0x7F))); + pPlugin->SetZxxParameter(plugParam, (uint32)CalculateSmoothParamChange((float)pPlugin->GetZxxParameter(plugParam), (float)((param & 0x7F) << 7))); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-25 09:12:40
|
Revision: 5163 http://sourceforge.net/p/modplug/code/5163 Author: manxorist Date: 2015-05-25 09:12:34 +0000 (Mon, 25 May 2015) Log Message: ----------- [Ref] mptIO: Implement SetFilesystemCompression helper function for tracker builds. Works on mpt::PathString, HANDLE, fd, FILE*. Requires read and write permissions for already opened files. [Ref] Convert crash writer to SetFilesystemCompression. Modified Paths: -------------- trunk/OpenMPT/common/mptFileIO.cpp trunk/OpenMPT/common/mptFileIO.h trunk/OpenMPT/mptrack/ExceptionHandler.cpp Modified: trunk/OpenMPT/common/mptFileIO.cpp =================================================================== --- trunk/OpenMPT/common/mptFileIO.cpp 2015-05-25 00:55:20 UTC (rev 5162) +++ trunk/OpenMPT/common/mptFileIO.cpp 2015-05-25 09:12:34 UTC (rev 5163) @@ -11,14 +11,91 @@ #include "stdafx.h" #include "mptFileIO.h" +#ifdef MODPLUG_TRACKER +#if MPT_OS_WINDOWS +#include <WinIoCtl.h> +#include <io.h> +#endif // MPT_OS_WINDOWS +#endif // MODPLUG_TRACKER + OPENMPT_NAMESPACE_BEGIN #if defined(MPT_WITH_FILEIO) + + #ifdef MODPLUG_TRACKER +#if MPT_OS_WINDOWS +bool SetFilesystemCompression(HANDLE hFile) +{ + if(hFile == INVALID_HANDLE_VALUE) + { + return false; + } + USHORT format = COMPRESSION_FORMAT_DEFAULT; + DWORD dummy = 0; + BOOL result = DeviceIoControl(hFile, FSCTL_SET_COMPRESSION, (LPVOID)&format, sizeof(format), NULL, 0, &dummy /*required*/ , NULL); + return result ? true : false; +} +bool SetFilesystemCompression(int fd) +{ + if(fd < 0) + { + return false; + } + uintptr_t fhandle = _get_osfhandle(fd); + HANDLE hFile = (HANDLE)fhandle; + if(hFile == INVALID_HANDLE_VALUE) + { + return false; + } + return SetFilesystemCompression(hFile); +} +#if defined(MPT_WITH_FILEIO_STDIO) +bool SetFilesystemCompression(FILE *file) +{ + if(!file) + { + return false; + } + int fd = _fileno(file); + if(fd == -1) + { + return false; + } + return SetFilesystemCompression(fd); +} +#endif // MPT_WITH_FILEIO_STDIO +bool SetFilesystemCompression(const mpt::PathString &filename) +{ + DWORD attributes = GetFileAttributesW(filename.AsNative().c_str()); + if(attributes == INVALID_FILE_ATTRIBUTES) + { + return false; + } + if(attributes & FILE_ATTRIBUTE_COMPRESSED) + { + return true; + } + HANDLE hFile = CreateFileW(filename.AsNative().c_str(), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); + if(hFile == INVALID_HANDLE_VALUE) + { + return false; + } + bool result = SetFilesystemCompression(hFile); + CloseHandle(hFile); + hFile = INVALID_HANDLE_VALUE; + return result; +} +#endif // MPT_OS_WINDOWS +#endif // MODPLUG_TRACKER + + +#ifdef MODPLUG_TRACKER + CMappedFile::~CMappedFile() //------------------------- { Modified: trunk/OpenMPT/common/mptFileIO.h =================================================================== --- trunk/OpenMPT/common/mptFileIO.h 2015-05-25 00:55:20 UTC (rev 5162) +++ trunk/OpenMPT/common/mptFileIO.h 2015-05-25 09:12:34 UTC (rev 5163) @@ -45,6 +45,22 @@ #endif // MPT_WITH_FILEIO_STDIO +// Sets the NTFS compression attribute on the file or directory. +// Requires read and write permissions for already opened files. +// Returns true if the attribute has been set. +// In almost all cases, the return value should be ignored because most filesystems other than NTFS do not support compression. +#ifdef MODPLUG_TRACKER +#if MPT_OS_WINDOWS +bool SetFilesystemCompression(HANDLE hFile); +bool SetFilesystemCompression(int fd); +#if defined(MPT_WITH_FILEIO_STDIO) +bool SetFilesystemCompression(FILE *file); +#endif // MPT_WITH_FILEIO_STDIO +bool SetFilesystemCompression(const mpt::PathString &filename); +#endif // MPT_OS_WINDOWS +#endif // MODPLUG_TRACKER + + namespace mpt { Modified: trunk/OpenMPT/mptrack/ExceptionHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/ExceptionHandler.cpp 2015-05-25 00:55:20 UTC (rev 5162) +++ trunk/OpenMPT/mptrack/ExceptionHandler.cpp 2015-05-25 09:12:34 UTC (rev 5163) @@ -18,9 +18,7 @@ #include "../common/version.h" #include "../common/mptFileIO.h" -#include <WinIoCtl.h> - OPENMPT_NAMESPACE_BEGIN @@ -52,23 +50,12 @@ { CreateDirectoryW(path.AsNative().c_str(), nullptr); } - DWORD attributes = GetFileAttributesW(path.AsNative().c_str()); - if(attributes != INVALID_FILE_ATTRIBUTES && !(attributes & FILE_ATTRIBUTE_COMPRESSED)) - { - // Set compressed attribute in order to save disk space. - // Debugging information should clutter the users computer as little as possible. - // Performance is not important here. - // Ignore any errors. - HANDLE hDir = CreateFileW(path.AsNative().c_str(), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - if(hDir != INVALID_HANDLE_VALUE) - { - USHORT format = COMPRESSION_FORMAT_DEFAULT; - DWORD dummy = 0; - /* BOOL result = */ DeviceIoControl(hDir, FSCTL_SET_COMPRESSION, (LPVOID)&format, sizeof(format), NULL, 0, &dummy /*required*/ , NULL); - CloseHandle(hDir); - } - // Compression will be inherited by children directories and files automatically. - } + // Set compressed attribute in order to save disk space. + // Debugging information should clutter the users computer as little as possible. + // Performance is not important here. + // Ignore any errors. + SetFilesystemCompression(path); + // Compression will be inherited by children directories and files automatically. path += timestampDir; if(!path.IsDirectory()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-25 12:52:14
|
Revision: 5170 http://sourceforge.net/p/modplug/code/5170 Author: saga-games Date: 2015-05-25 12:52:07 +0000 (Mon, 25 May 2015) Log Message: ----------- [Ref] Always use 0xFFFF and 0xFFFE for stop/ignore indices internally, regardless of format. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/soundlib/Load_669.cpp trunk/OpenMPT/soundlib/Load_dsm.cpp trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_gdm.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_mtm.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/Load_ptm.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Load_ult.cpp trunk/OpenMPT/soundlib/ModSequence.cpp trunk/OpenMPT/soundlib/ModSequence.h trunk/OpenMPT/soundlib/load_j2b.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -723,8 +723,7 @@ { if(nPat == sndFile.Order.GetInvalidPatIndex()) strcpy(s, "---"); else if(nPat == sndFile.Order.GetIgnoreIndex()) strcpy(s, "+++"); - else if(nPat < std::max(sndFile.Patterns.Size(), sndFile.GetModSpecifications().patternsMax)) wsprintf(s, "%u", nPat); - else strcpy(s, "???"); + else wsprintf(s, _T("%u"), nPat); } const COLORREF &textCol = Modified: trunk/OpenMPT/soundlib/Load_669.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_669.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_669.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -142,7 +142,7 @@ songMessage.ReadFixedLineLength(fileHeader.songMessage, 108, 36, 0); // Reading Orders - Order.ReadFromArray(fileHeader.orders); + Order.ReadFromArray(fileHeader.orders, CountOf(fileHeader.orders), 0xFF, 0xFE); m_nRestartPos = fileHeader.restartPos; if(Order[m_nRestartPos] >= fileHeader.patterns) m_nRestartPos = 0; Modified: trunk/OpenMPT/soundlib/Load_dsm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_dsm.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_dsm.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -197,7 +197,7 @@ } } - Order.ReadFromArray(songHeader.orders, songHeader.numOrders); + Order.ReadFromArray(songHeader.orders, songHeader.numOrders, 0xFF, 0xFE); // Read pattern and sample chunks PATTERNINDEX patNum = 0; Modified: trunk/OpenMPT/soundlib/Load_far.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_far.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_far.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -183,7 +183,7 @@ { return false; } - Order.ReadFromArray(orderHeader.orders, orderHeader.numOrders); + Order.ReadFromArray(orderHeader.orders, orderHeader.numOrders, 0xFF, 0xFE); m_nRestartPos = orderHeader.restartPos; file.Seek(fileHeader.headerLength); Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_gdm.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -189,7 +189,7 @@ // Read orders if(file.Seek(fileHeader.orderOffset)) { - Order.ReadAsByte(file, fileHeader.lastOrder + 1); + Order.ReadAsByte(file, fileHeader.lastOrder + 1, fileHeader.lastOrder + 1, 0xFF, 0xFE); } // Read samples Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -448,7 +448,7 @@ file.Seek(sizeof(ITFileHeader)); if(GetType() == MOD_TYPE_IT) { - Order.ReadAsByte(file, fileHeader.ordnum); + Order.ReadAsByte(file, fileHeader.ordnum, fileHeader.ordnum, 0xFF, 0xFE); } else { if(fileHeader.cwtv > 0x88A && fileHeader.cwtv <= 0x88D) @@ -456,10 +456,7 @@ Order.Deserialize(file); } else { - Order.ReadAsByte(file, fileHeader.ordnum); - // Replacing 0xFF and 0xFE with new corresponding indexes - Order.Replace(0xFE, Order.GetIgnoreIndex()); - Order.Replace(0xFF, Order.GetInvalidPatIndex()); + Order.ReadAsByte(file, fileHeader.ordnum, fileHeader.ordnum, 0xFF, 0xFE); } } @@ -1151,7 +1148,7 @@ if(GetType() == MOD_TYPE_MPT) { if(!Order.NeedsExtraDatafield()) itHeader.ordnum = Order.size(); - else itHeader.ordnum = MIN(Order.size(), MAX_ORDERS); //Writing MAX_ORDERS at max here, and if there's more, writing them elsewhere. + else itHeader.ordnum = std::min(Order.size(), MAX_ORDERS); //Writing MAX_ORDERS at max here, and if there's more, writing them elsewhere. //Crop unused orders from the end. while(itHeader.ordnum > 1 && Order[itHeader.ordnum - 1] == Order.GetInvalidPatIndex()) itHeader.ordnum--; Modified: trunk/OpenMPT/soundlib/Load_itp.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_itp.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_itp.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -160,7 +160,8 @@ } // Song Orders - Order.ReadAsByte(file, file.ReadUint32LE()); + size = file.ReadUint32LE(); + Order.ReadAsByte(file, size, size, 0xFF, 0xFE); // Song Patterns const PATTERNINDEX numPats = static_cast<PATTERNINDEX>(file.ReadUint32LE()); Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -372,7 +372,7 @@ else m_nChannels = i+1; } - Order.ReadFromArray(pmib->seq, norders); + Order.ReadFromArray(pmib->seq, norders, 0xFF, 0xFE); break; // ME: song message case 0x454D: Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -567,7 +567,7 @@ file.ReadStruct(fileHeader); file.Skip(4); // Magic bytes (we already parsed these) - Order.ReadFromArray(fileHeader.orderList); + Order.ReadFromArray(fileHeader.orderList, CountOf(fileHeader.orderList), 0xFF, 0xFE); ORDERINDEX realOrders = fileHeader.numOrders; if(realOrders > 128) Modified: trunk/OpenMPT/soundlib/Load_mtm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mtm.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_mtm.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -144,7 +144,7 @@ // Reading pattern order const ORDERINDEX readOrders = fileHeader.lastOrder + 1; - Order.ReadAsByte(file, 128, readOrders); + Order.ReadAsByte(file, 128, readOrders, 0xFF, 0xFE); // Reading Patterns const ROWINDEX rowsPerPat = std::min(ROWINDEX(fileHeader.beatsPerTrack), MAX_PATTERN_ROWS); Modified: trunk/OpenMPT/soundlib/Load_okt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_okt.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -373,7 +373,7 @@ case OktIffChunk::idPATT: // read the orderlist - Order.ReadAsByte(chunk, chunk.GetLength()); + Order.ReadAsByte(chunk, chunk.GetLength(), ORDERINDEX_MAX, 0xFF, 0xFE); break; case OktIffChunk::idPBOD: Modified: trunk/OpenMPT/soundlib/Load_ptm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ptm.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_ptm.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -170,7 +170,7 @@ m_SongFlags = SONG_ITCOMPATGXX | SONG_ITOLDEFFECTS; m_nChannels = fileHeader.numChannels; m_nSamples = std::min<SAMPLEINDEX>(fileHeader.numSamples, MAX_SAMPLES - 1); - Order.ReadFromArray(fileHeader.orders, fileHeader.numOrders); + Order.ReadFromArray(fileHeader.orders, fileHeader.numOrders, 0xFF, 0xFE); // Reading channel panning for(CHANNELINDEX chn = 0; chn < m_nChannels; chn++) Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_s3m.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -342,7 +342,7 @@ m_nChannels = 1; } - Order.ReadAsByte(file, fileHeader.ordNum); + Order.ReadAsByte(file, fileHeader.ordNum, fileHeader.ordNum, 0xFF, 0xFE); // Read sample header offsets std::vector<uint16> sampleOffsets(fileHeader.smpNum); Modified: trunk/OpenMPT/soundlib/Load_stm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_stm.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_stm.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -179,7 +179,7 @@ } // Read order list - Order.ReadFromArray(fileHeader.order); + Order.ReadFromArray(fileHeader.order, CountOf(fileHeader.order), 0xFF, 0xFE); for(ORDERINDEX ord = 0; ord < 128; ord++) { if(Order[ord] >= 99) Modified: trunk/OpenMPT/soundlib/Load_ult.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ult.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/Load_ult.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -432,8 +432,7 @@ mpt::String::Read<mpt::String::maybeNullTerminated>(m_szNames[smp], sampleHeader.name); } - // ult just so happens to use 255 for its end mark, so there's no need to fiddle with this - Order.ReadAsByte(file, 256); + Order.ReadAsByte(file, 256, 256, 0xFF, 0xFE); m_nChannels = file.ReadUint8() + 1; PATTERNINDEX numPats = file.ReadUint8() + 1; Modified: trunk/OpenMPT/soundlib/ModSequence.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSequence.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/ModSequence.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -40,8 +40,6 @@ m_pArray(pArray), m_nSize(nSize), m_nCapacity(nCapacity), - m_nInvalidIndex(0xFF), - m_nIgnoreIndex(0xFE), m_bDeletableArray(bDeletableArray) //------------------------------------------------------- {} @@ -49,15 +47,13 @@ ModSequence::ModSequence(CSoundFile& rSf, ORDERINDEX nSize) : m_sndFile(rSf), - m_nInvalidIndex(GetInvalidPatIndex(MOD_TYPE_MPT)), - m_nIgnoreIndex(GetIgnoreIndex(MOD_TYPE_MPT)), m_bDeletableArray(true) //------------------------------------------------------------------- { m_nSize = nSize; m_nCapacity = m_nSize; m_pArray = new PATTERNINDEX[m_nCapacity]; - std::fill(begin(), end(), GetInvalidPatIndex(MOD_TYPE_MPT)); + std::fill(begin(), end(), GetInvalidPatIndex()); } @@ -66,8 +62,6 @@ m_pArray(nullptr), m_nSize(0), m_nCapacity(0), - m_nInvalidIndex(0xFF), - m_nIgnoreIndex(0xFE), m_bDeletableArray(false) //------------------------------------------ { @@ -100,25 +94,18 @@ //--------------------------------------------------------- { const CModSpecifications specs = m_sndFile.GetModSpecifications(); - const MODTYPE newtype = m_sndFile.GetType(); - m_nInvalidIndex = GetInvalidPatIndex(newtype); - m_nIgnoreIndex = GetIgnoreIndex(newtype); - if(oldtype != MOD_TYPE_NONE) { // If not supported, remove "+++" separator order items. if(specs.hasIgnoreIndex == false) { - RemovePattern(GetIgnoreIndex(oldtype)); - } else - { - Replace(GetIgnoreIndex(oldtype), GetIgnoreIndex()); + RemovePattern(GetIgnoreIndex()); } // If not supported, remove "---" items between patterns. if(specs.hasStopIndex == false) { - RemovePattern(GetInvalidPatIndex(oldtype)); + RemovePattern(GetInvalidPatIndex()); } } @@ -137,9 +124,6 @@ } resize(specs.ordersMax); } - - // Replace items used to denote end of song order. - if(oldtype != MOD_TYPE_NONE) Replace(GetInvalidPatIndex(oldtype), GetInvalidPatIndex()); } @@ -302,8 +286,7 @@ if (nNewSize > m_nSize) std::fill(begin() + m_nSize, begin() + nNewSize, nFill); m_nSize = nNewSize; - } - else + } else { const PATTERNINDEX* const pOld = m_pArray; m_nCapacity = nNewSize + 100; @@ -330,8 +313,6 @@ { if (&seq == this) return *this; - m_nIgnoreIndex = seq.m_nIgnoreIndex; - m_nInvalidIndex = seq.m_nInvalidIndex; resize(seq.GetLength()); std::copy(seq.begin(), seq.end(), begin()); m_sName = seq.m_sName; @@ -376,7 +357,7 @@ m_nCurrentSeq(0) //-------------------------------------------------------------- { - std::fill(m_Cache, m_Cache + s_nCacheSize, GetInvalidPatIndex(MOD_TYPE_MPT)); + std::fill(m_Cache, m_Cache + s_nCacheSize, GetInvalidPatIndex()); m_Sequences.push_back(ModSequence(sndFile, s_nCacheSize)); } @@ -711,38 +692,33 @@ } -size_t ModSequence::WriteAsByte(FILE* f, const uint16 count) const -//---------------------------------------------------------------- +size_t ModSequence::WriteAsByte(FILE* f, const ORDERINDEX count, uint8 stopIndex, uint8 ignoreIndex) const +//-------------------------------------------------------------------------------------------------------- { - const size_t limit = MIN(count, GetLength()); + const size_t limit = std::min(count, GetLength()); size_t i = 0; for(i = 0; i < limit; i++) { const PATTERNINDEX pat = (*this)[i]; - BYTE temp = static_cast<BYTE>((*this)[i]); + uint8 temp = static_cast<uint8>((*this)[i]); - if(pat > 0xFD) - { - if(pat == GetInvalidPatIndex()) temp = 0xFF; - else temp = 0xFE; - } + if(pat == GetInvalidPatIndex()) temp = stopIndex; + else if(pat == GetIgnoreIndex() || pat > 0xFF) temp = ignoreIndex; fwrite(&temp, 1, 1, f); } // Fill non-existing order items with stop indices for(i = limit; i < count; i++) { - BYTE temp = 0xFF; - fwrite(&temp, 1, 1, f); + fwrite(&stopIndex, 1, 1, f); } return i; //Returns the number of bytes written. } -// TODO: Need a way to declare skip/stop indices? -bool ModSequence::ReadAsByte(FileReader &file, size_t howMany, size_t readEntries) -//-------------------------------------------------------------------------------- +bool ModSequence::ReadAsByte(FileReader &file, size_t howMany, size_t readEntries, uint16 stopIndex, uint16 ignoreIndex) +//---------------------------------------------------------------------------------------------------------------------- { if(!file.CanRead(howMany)) { @@ -758,7 +734,10 @@ for(size_t i = 0; i < readEntries; i++) { - (*this)[i] = file.ReadUint8(); + PATTERNINDEX pat = file.ReadUint8(); + if(pat == stopIndex) pat = GetInvalidPatIndex(); + if(pat == ignoreIndex) pat = GetIgnoreIndex(); + (*this)[i] = pat; } std::fill(begin() + readEntries, end(), GetInvalidPatIndex()); @@ -767,13 +746,6 @@ } -MODTYPE ModSequence::GetSndFileType() const -//----------------------------------------- -{ - return m_sndFile.GetType(); -} - - void ReadModSequenceOld(std::istream& iStrm, ModSequenceSet& seq, const size_t) //----------------------------------------------------------------------------- { Modified: trunk/OpenMPT/soundlib/ModSequence.h =================================================================== --- trunk/OpenMPT/soundlib/ModSequence.h 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/ModSequence.h 2015-05-25 12:52:07 UTC (rev 5170) @@ -83,12 +83,11 @@ // Returns length of sequence stopping counting on first '---' (or at the end of sequence). ORDERINDEX GetLengthFirstEmpty() const; - PATTERNINDEX GetInvalidPatIndex() const {return m_nInvalidIndex;} // To correspond 0xFF - static PATTERNINDEX GetInvalidPatIndex(const MODTYPE type); + // Returns the internal representation of a stop '---' index + static PATTERNINDEX GetInvalidPatIndex() { return uint16_max; } + // Returns the internal representation of an ignore '+++' index + static PATTERNINDEX GetIgnoreIndex() {return uint16_max - 1; } - PATTERNINDEX GetIgnoreIndex() const {return m_nIgnoreIndex;} // To correspond 0xFE - static PATTERNINDEX GetIgnoreIndex(const MODTYPE type); - // Returns the previous/next order ignoring skip indices(+++). // If no previous/next order exists, return first/last order, and zero // when orderlist is empty. @@ -100,11 +99,15 @@ ModSequence& operator=(const ModSequence& seq); - // Read/write. - size_t WriteAsByte(FILE* f, const uint16 count) const; - bool ReadAsByte(FileReader &file, size_t howMany, size_t readEntries = ORDERINDEX_MAX); + // Write order items as bytes. '---' is written as stopIndex, '+++' is written as ignoreIndex + size_t WriteAsByte(FILE* f, const ORDERINDEX count, uint8 stopIndex = 0xFF, uint8 ignoreIndex = 0xFE) const; + // Read order items as bytes from a file. 'howMany' bytes are read from the file, optionally only the first 'readEntries' of them are actually processed. + // 'stopIndex' is treated as '---', 'ignoreIndex' is treated as '+++'. If the format doesn't support such indices, just pass a parameter that does not fit into a byte. + bool ReadAsByte(FileReader &file, size_t howMany, size_t readEntries = ORDERINDEX_MAX, uint16 stopIndex = ORDERINDEX_INVALID, uint16 ignoreIndex = ORDERINDEX_INVALID); template<typename T, size_t arraySize> - bool ReadFromArray(const T (&orders)[arraySize], size_t howMany = arraySize); + // Read order items from an array. Only the first 'howMany' entries are actually processed. + // 'stopIndex' is treated as '---', 'ignoreIndex' is treated as '+++'. If the format doesn't support such indices, just pass ORDERINDEX_INVALID. + bool ReadFromArray(const T (&orders)[arraySize], size_t howMany = arraySize, uint16 stopIndex = ORDERINDEX_INVALID, uint16 ignoreIndex = ORDERINDEX_INVALID); // Deprecated function used for MPTm files created with OpenMPT 1.17.02.46 - 1.17.02.48. bool Deserialize(FileReader &file); @@ -130,35 +133,23 @@ const_iterator end() const {return m_pArray + m_nSize;} protected: - std::string m_sName; // Sequence name. + std::string m_sName; // Sequence name. -protected: CSoundFile &m_sndFile; // Pointer to associated CSoundFile. PATTERNINDEX *m_pArray; // Pointer to sequence array. ORDERINDEX m_nSize; // Sequence length. ORDERINDEX m_nCapacity; // Capacity in m_pArray. - PATTERNINDEX m_nInvalidIndex; // Invalid pat index. - PATTERNINDEX m_nIgnoreIndex; // Ignore pat index. bool m_bDeletableArray; // True if m_pArray points the deletable(with delete[]) array. - MODTYPE GetSndFileType() const; }; -inline PATTERNINDEX ModSequence::GetInvalidPatIndex(const MODTYPE type) {return (type & (MOD_TYPE_MPT | MOD_TYPE_XM)) ? uint16_max : 0xFF;} -inline PATTERNINDEX ModSequence::GetIgnoreIndex(const MODTYPE type) {return (type & (MOD_TYPE_MPT | MOD_TYPE_XM)) ? uint16_max - 1 : 0xFE;} - - template<typename T, size_t arraySize> -bool ModSequence::ReadFromArray(const T (&orders)[arraySize], size_t howMany) -//--------------------------------------------------------------------------- +bool ModSequence::ReadFromArray(const T (&orders)[arraySize], size_t howMany, uint16 stopIndex, uint16 ignoreIndex) +//----------------------------------------------------------------------------------------------------------------- { + STATIC_ASSERT(arraySize < ORDERINDEX_MAX); LimitMax(howMany, arraySize); - ORDERINDEX readEntries = static_cast<ORDERINDEX>(howMany); - if(!(GetSndFileType() & MOD_TYPE_MPT)) - { - LimitMax(readEntries, MAX_ORDERS); - } if(GetLength() < readEntries) { @@ -167,7 +158,10 @@ for(int i = 0; i < readEntries; i++) { - (*this)[i] = static_cast<ORDERINDEX>(orders[i]); + PATTERNINDEX pat = static_cast<PATTERNINDEX>(orders[i]); + if(pat == stopIndex) pat = GetInvalidPatIndex(); + if(pat == ignoreIndex) pat = GetIgnoreIndex(); + (*this)[i] = pat; } return true; } Modified: trunk/OpenMPT/soundlib/load_j2b.cpp =================================================================== --- trunk/OpenMPT/soundlib/load_j2b.cpp 2015-05-25 12:42:48 UTC (rev 5169) +++ trunk/OpenMPT/soundlib/load_j2b.cpp 2015-05-25 12:52:07 UTC (rev 5170) @@ -830,7 +830,7 @@ // "ORDR" - Order list FileReader chunk(chunks.GetChunk(AMFFRiffChunk::idORDR)); uint8 numOrders = chunk.ReadUint8() + 1; - Order.ReadAsByte(chunk, numOrders); + Order.ReadAsByte(chunk, numOrders, numOrders, 0xFF, 0xFE); } // "PATT" - Pattern data for one pattern This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-25 14:39:16
|
Revision: 5171 http://sourceforge.net/p/modplug/code/5171 Author: manxorist Date: 2015-05-25 14:39:10 +0000 (Mon, 25 May 2015) Log Message: ----------- [Ref] Make our string formatting functions work with MFC class CString. This avoids the need for the mpt::tstring type introduced some revisions ago; remove it again. Modified Paths: -------------- trunk/OpenMPT/common/mptString.cpp trunk/OpenMPT/common/mptString.h trunk/OpenMPT/test/test.cpp Modified: trunk/OpenMPT/common/mptString.cpp =================================================================== --- trunk/OpenMPT/common/mptString.cpp 2015-05-25 12:52:07 UTC (rev 5170) +++ trunk/OpenMPT/common/mptString.cpp 2015-05-25 14:39:10 UTC (rev 5171) @@ -1602,6 +1602,54 @@ return result; } +#if defined(_MFC_VER) +template<> +CString PrintImplTemplate<CString>(const CString & format + , const CString & x1 + , const CString & x2 + , const CString & x3 + , const CString & x4 + , const CString & x5 + , const CString & x6 + , const CString & x7 + , const CString & x8 + ) +{ + CString result; + const std::size_t len = format.GetLength(); + for(std::size_t pos = 0; pos != len; ++pos) + { + CString::XCHAR c = format[pos]; + if(pos + 1 != len && c == _T('%')) + { + pos++; + c = format[pos]; + if(_T('1') <= c && c <= _T('9')) + { + const std::size_t n = c - _T('0'); + switch(n) + { + case 1: result += x1; break; + case 2: result += x2; break; + case 3: result += x3; break; + case 4: result += x4; break; + case 5: result += x5; break; + case 6: result += x6; break; + case 7: result += x7; break; + case 8: result += x8; break; + } + continue; + } else if(c != _T('%')) + { + result += CString(_T('%')); + } + } + result += CString(c); + } + return result; +} +#endif + std::string PrintImpl(const std::string & format , const std::string & x1 , const std::string & x2 @@ -1648,6 +1696,22 @@ } #endif +#if defined(_MFC_VER) +CString PrintImpl(const CString & format + , const CString & x1 + , const CString & x2 + , const CString & x3 + , const CString & x4 + , const CString & x5 + , const CString & x6 + , const CString & x7 + , const CString & x8 + ) +{ + return PrintImplTemplate<CString>(format, x1,x2,x3,x4,x5,x6,x7,x8); +} +#endif + } // namespace detail Modified: trunk/OpenMPT/common/mptString.h =================================================================== --- trunk/OpenMPT/common/mptString.h 2015-05-25 12:52:07 UTC (rev 5170) +++ trunk/OpenMPT/common/mptString.h 2015-05-25 14:39:10 UTC (rev 5171) @@ -392,22 +392,6 @@ #if defined(MPT_OS_WINDOWS) -#ifdef UNICODE - -typedef std::wstring tstring; - -template <typename Tsrc> inline mpt::tstring ToWinAPI(const Tsrc &src) { return mpt::ToWide(src); } -template <typename Tsrc> inline mpt::tstring ToWinAPI(Charset from, const Tsrc &src) { return mpt::ToWide(from, src); } - -#else - -typedef std::string tstring; - -template <typename Tsrc> inline mpt::tstring ToWinAPI(const Tsrc &src) { return mpt::ToLocale(src); } -template <typename Tsrc> inline mpt::tstring ToWinAPI(Charset from, const Tsrc &src) { return mpt::ToLocale(from, src); } - -#endif - namespace String { namespace detail { @@ -752,6 +736,13 @@ #if MPT_USTRING_MODE_UTF8 template <> struct ToStringTFunctor<mpt::ustring> { template <typename T> inline mpt::ustring operator() (const T & x) { return ToUString(x); } }; #endif +#if defined(_MFC_VER) +#ifdef UNICODE +template <> struct ToStringTFunctor<CString> { template <typename T> inline CString operator() (const T & x) { return mpt::ToCString(ToUString(x)); } }; +#else +template <> struct ToStringTFunctor<CString> { template <typename T> inline CString operator() (const T & x) { return mpt::ToCString(mpt::CharsetLocale, ToString(x)); } }; +#endif +#endif template<typename Tstring, typename T> inline Tstring ToStringT(const T & x) { return ToStringTFunctor<Tstring>()(x); } @@ -823,6 +814,13 @@ #if MPT_USTRING_MODE_UTF8 template <> struct FormatValTFunctor<mpt::ustring> { template <typename T> inline mpt::ustring operator() (const T & x, const Format & f) { return mpt::ToUnicode(mpt::CharsetUTF8, FormatVal(x, f)); } }; #endif +#if defined(_MFC_VER) +#ifdef UNICODE +template <> struct FormatValTFunctor<CString> { template <typename T> inline CString operator() (const T & x, const Format & f) { return mpt::ToCString(FormatValW(x, f)); } }; +#else +template <> struct FormatValTFunctor<CString> { template <typename T> inline CString operator() (const T & x, const Format & f) { return mpt::ToCString(mpt::CharsetLocale, FormatVal(x, f)); } }; +#endif +#endif class Format @@ -1031,6 +1029,9 @@ #else typedef fmtT<mpt::ustring> ufmt; #endif +#if defined(_MFC_VER) +typedef fmtT<CString> tfmt; +#endif } // namespace mpt @@ -1053,6 +1054,9 @@ #if MPT_USTRING_MODE_UTF8 template <> struct to_string_type<mpt::ustring > { typedef mpt::ustring type; }; #endif +#if defined(_MFC_VER) +template <> struct to_string_type<CString > { typedef CString type; }; +#endif template <typename T, std::size_t N> struct to_string_type<T [N]> { typedef typename to_string_type<T>::type type; }; std::string PrintImpl(const std::string & format @@ -1092,6 +1096,19 @@ ); #endif +#if defined(_MFC_VER) +CString PrintImpl(const CString & format + , const CString & x1 = CString() + , const CString & x2 = CString() + , const CString & x3 = CString() + , const CString & x4 = CString() + , const CString & x5 = CString() + , const CString & x6 = CString() + , const CString & x7 = CString() + , const CString & x8 = CString() + ); +#endif + } // namespace detail template<typename Tformat Modified: trunk/OpenMPT/test/test.cpp =================================================================== --- trunk/OpenMPT/test/test.cpp 2015-05-25 12:52:07 UTC (rev 5170) +++ trunk/OpenMPT/test/test.cpp 2015-05-25 14:39:10 UTC (rev 5171) @@ -497,6 +497,11 @@ VERIFY_EQUAL(mpt::String::Print("%%%1", "a"), "%a"); VERIFY_EQUAL(mpt::String::Print("%b", "a"), "%b"); +#if defined(_MFC_VER) + VERIFY_EQUAL(mpt::String::Print(CString(_T("%1%2%3")),1,2,3), _T("123")); + VERIFY_EQUAL(mpt::String::Print(CString(_T("%1%2%3")),1,mpt::tfmt::dec0<3>(2),3), _T("10023")); +#endif + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-25 15:11:36
|
Revision: 5173 http://sourceforge.net/p/modplug/code/5173 Author: saga-games Date: 2015-05-25 15:11:30 +0000 (Mon, 25 May 2015) Log Message: ----------- [Mod] Make CSoundFile::songArtist unicode and add support for reading and writing it in OpenMPT extensions (no UI support yet, though) Modified Paths: -------------- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_dmf.cpp trunk/OpenMPT/soundlib/Load_gdm.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -884,7 +884,7 @@ } else if ( key == std::string("tracker") ) { return m_sndFile->madeWithTracker; } else if ( key == std::string("artist") ) { - return mod_string_to_utf8( m_sndFile->songArtist ); + return mpt::ToCharset( mpt::CharsetUTF8, m_sndFile->songArtist ); } else if ( key == std::string("title") ) { return mod_string_to_utf8( m_sndFile->GetTitle() ); } else if ( key == std::string("date") ) { Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -204,7 +204,7 @@ { m_Settings.Tags.title = mpt::ToUnicode(mpt::CharsetLocale, m_SndFile.GetTitle()); m_Settings.Tags.comments = mpt::ToUnicode(mpt::CharsetLocale, m_SndFile.songMessage.GetFormatted(SongMessage::leLF)); - m_Settings.Tags.artist = m_Settings.storedTags.artist; + m_Settings.Tags.artist = m_SndFile.songArtist; m_Settings.Tags.album = m_Settings.storedTags.album; m_Settings.Tags.trackno = m_Settings.storedTags.trackno; m_Settings.Tags.year = m_Settings.storedTags.year; Modified: trunk/OpenMPT/soundlib/Load_ams.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ams.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_ams.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -892,9 +892,7 @@ { std::string str; file.ReadString<mpt::String::spacePadded>(str, composerLength); - str = mpt::ToCharset(mpt::CharsetCP437, mpt::CharsetCP437AMS2, str); - songMessage.Read(str.c_str(), str.length(), SongMessage::leAutodetect); - songArtist = str; + songArtist = mpt::ToUnicode(mpt::CharsetCP437AMS2, str); } // Channel names Modified: trunk/OpenMPT/soundlib/Load_dmf.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_dmf.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_dmf.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -973,7 +973,11 @@ InitializeGlobals(); mpt::String::Read<mpt::String::spacePadded>(songName, fileHeader.songname); - mpt::String::Read<mpt::String::spacePadded>(songArtist, fileHeader.composer); + { + std::string artist; + mpt::String::Read<mpt::String::spacePadded>(artist, fileHeader.composer); + songArtist = mpt::ToUnicode(mpt::CharsetCP437, artist); + } FileHistory mptHistory; MemsetZero(mptHistory); Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_gdm.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -160,8 +160,14 @@ mpt::String::Read<mpt::String::maybeNullTerminated>(songName, fileHeader.songTitle); // Artist name - mpt::String::Read<mpt::String::maybeNullTerminated>(songArtist, fileHeader.songMusician); - if(songArtist == "Unknown") songArtist.clear(); + { + std::string artist; + mpt::String::Read<mpt::String::maybeNullTerminated>(artist, fileHeader.songMusician); + if(artist != "Unknown") + { + songArtist = mpt::ToUnicode(mpt::CharsetCP437, artist); + } + } // Read channel pan map... 0...15 = channel panning, 16 = surround channel, 255 = channel does not exist m_nChannels = 32; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -170,7 +170,7 @@ //Read & set tunings for instruments std::vector<std::string> notFoundTunings; - for(UINT i = 1; i<=csf.GetNumInstruments(); i++) + for(INSTRUMENTINDEX i = 1; i<=csf.GetNumInstruments(); i++) { uint16 ui; iStrm.read(reinterpret_cast<char*>(&ui), sizeof(ui)); @@ -2008,42 +2008,39 @@ void CSoundFile::SaveExtendedSongProperties(FILE* f) const //-------------------------------------------------------- { - //Extra song data - Yet Another Hack. - { - const uint32 code = MAGIC4BE('M','P','T','S'); - mpt::IO::WriteIntLE(f, code); - } + // Extra song data - Yet Another Hack. + mpt::IO::WriteIntLE<uint32>(f, MAGIC4BE('M','P','T','S')); -#define WRITEMODULARHEADER(c1, c2, c3, c4, fsize) \ +#define WRITEMODULARHEADER(code, fsize) \ { \ - const uint32 code = MAGIC4BE(c1, c2, c3, c4); \ mpt::IO::WriteIntLE<uint32>(f, code); \ MPT_ASSERT(fsize <= uint16_max); \ const uint16 _size = fsize; \ mpt::IO::WriteIntLE<uint16>(f, _size); \ } -#define WRITEMODULAR(c1, c2, c3, c4, field) \ +#define WRITEMODULAR(code, field) \ { \ - WRITEMODULARHEADER(c1, c2, c3, c4, sizeof(field)) \ + WRITEMODULARHEADER(code, sizeof(field)) \ mpt::IO::WriteIntLE(f, field); \ } if(m_nDefaultTempo > 255) { - WRITEMODULAR('D','T','.','.', m_nDefaultTempo); + WRITEMODULAR(MAGIC4BE('D','T','.','.'), m_nDefaultTempo); } - WRITEMODULAR('R','P','B','.', m_nDefaultRowsPerBeat); - WRITEMODULAR('R','P','M','.', m_nDefaultRowsPerMeasure); + WRITEMODULAR(MAGIC4BE('R','P','B','.'), m_nDefaultRowsPerBeat); + WRITEMODULAR(MAGIC4BE('R','P','M','.'), m_nDefaultRowsPerMeasure); if(GetType() != MOD_TYPE_XM) { - WRITEMODULAR('C','.','.','.', m_nChannels); + WRITEMODULAR(MAGIC4BE('C','.','.','.'), m_nChannels); } - if(TypeIsIT_MPT() && GetNumChannels() > 64) //IT header has room only for 64 channels. Save the - { //settings that do not fit to the header here as an extension. - WRITEMODULARHEADER('C','h','n','S', (GetNumChannels() - 64) * 2); + if(TypeIsIT_MPT() && GetNumChannels() > 64) + { + // IT header has only room for 64 channels. Save the settings that do not fit to the header here as an extension. + WRITEMODULARHEADER(MAGIC4BE('C','h','n','S'), (GetNumChannels() - 64) * 2); for(CHANNELINDEX chn = 64; chn < GetNumChannels(); chn++) { uint8 panvol[2]; @@ -2056,31 +2053,31 @@ } { - WRITEMODULARHEADER('T','M','.','.', 1); + WRITEMODULARHEADER(MAGIC4BE('T','M','.','.'), 1); uint8 mode = static_cast<uint8>(m_nTempoMode); fwrite(&mode, sizeof(mode), 1, f); } const int32 tmpMixLevels = static_cast<int32>(m_nMixLevels); - WRITEMODULAR('P','M','M','.', tmpMixLevels); + WRITEMODULAR(MAGIC4BE('P','M','M','.'), tmpMixLevels); if(m_dwCreatedWithVersion) { - WRITEMODULAR('C','W','V','.', m_dwCreatedWithVersion); + WRITEMODULAR(MAGIC4BE('C','W','V','.'), m_dwCreatedWithVersion); } - WRITEMODULAR('L','S','W','V', m_dwLastSavedWithVersion); - WRITEMODULAR('S','P','A','.', m_nSamplePreAmp); - WRITEMODULAR('V','S','T','V', m_nVSTiVolume); + WRITEMODULAR(MAGIC4BE('L','S','W','V'), m_dwLastSavedWithVersion); + WRITEMODULAR(MAGIC4BE('S','P','A','.'), m_nSamplePreAmp); + WRITEMODULAR(MAGIC4BE('V','S','T','V'), m_nVSTiVolume); if(GetType() == MOD_TYPE_XM && m_nDefaultGlobalVolume != MAX_GLOBAL_VOLUME) { - WRITEMODULAR('D','G','V','.', m_nDefaultGlobalVolume); + WRITEMODULAR(MAGIC4BE('D','G','V','.'), m_nDefaultGlobalVolume); } if(GetType() != MOD_TYPE_XM && m_nRestartPos != 0) { - WRITEMODULAR('R','P','.','.', m_nRestartPos); + WRITEMODULAR(MAGIC4BE('R','P','.','.'), m_nRestartPos); } // Sample cues @@ -2094,7 +2091,7 @@ // Write one chunk for every sample. // Rationale: chunks are limited to 65536 bytes, which can easily be reached // with the amount of samples that OpenMPT supports. - WRITEMODULARHEADER('S','E','U','C', 2 + CountOf(sample.cues) * 4); + WRITEMODULARHEADER(MAGIC4LE('C','U','E','S'), 2 + CountOf(sample.cues) * 4); mpt::IO::WriteIntLE<uint16>(f, smp); for(std::size_t i = 0; i < CountOf(sample.cues); i++) { @@ -2107,20 +2104,28 @@ //Additional flags for XM/IT/MPTM if(m_ModFlags) { - WRITEMODULAR('M','S','F','.', m_ModFlags.GetRaw()); + WRITEMODULAR(MAGIC4BE('M','S','F','.'), m_ModFlags.GetRaw()); } + if(!songArtist.empty()) + { + std::string songArtistU8 = mpt::ToCharset(mpt::CharsetUTF8, songArtist); + uint16 length = mpt::saturate_cast<uint16>(songArtistU8.length()); + WRITEMODULARHEADER(MAGIC4LE('A','U','T','H'), length); + mpt::IO::WriteRaw(f, songArtistU8.c_str(), length); + } + #ifdef MODPLUG_TRACKER - //MIMA, MIDI mapping directives + // MIDI mapping directives if(GetMIDIMapper().GetCount() > 0) { const size_t objectsize = GetMIDIMapper().GetSerializationSize(); if(objectsize > size_t(int16_max)) { - AddToLog("Datafield overflow with MIDI to plugparam mappings; data won't be written."); + AddToLog("Too many MIDI Mapping directives to save; data won't be written."); } else { - WRITEMODULARHEADER('M','I','M','A', static_cast<uint16>(objectsize)); + WRITEMODULARHEADER(MAGIC4BE('M','I','M','A'), static_cast<uint16>(objectsize)); GetMIDIMapper().Serialize(f); } } @@ -2240,6 +2245,13 @@ #ifdef MODPLUG_TRACKER case MAGIC4BE('M','I','M','A'): GetMIDIMapper().Deserialize(chunk); break; #endif + case MAGIC4LE('A','U','T','H'): + { + std::string artist; + chunk.ReadString<mpt::String::spacePadded>(artist, chunk.GetLength()); + songArtist = mpt::ToUnicode(mpt::CharsetUTF8, artist); + } + break; case MAGIC4BE('C','h','n','S'): if(size <= (MAX_BASECHANNELS - 64) * 2 && (size % 2u) == 0) { Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -354,7 +354,11 @@ #endif pmib = (const MDLInfoBlock *)(lpStream+dwMemPos); mpt::String::Read<mpt::String::maybeNullTerminated>(songName, pmib->songname); - mpt::String::Read<mpt::String::maybeNullTerminated>(songArtist, pmib->composer); + { + std::string artist; + mpt::String::Read<mpt::String::maybeNullTerminated>(artist, pmib->composer); + songArtist = mpt::ToUnicode(mpt::CharsetCP437, artist); + } norders = pmib->norders; if (norders > MAX_ORDERS) norders = MAX_ORDERS; Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2015-05-25 15:11:30 UTC (rev 5173) @@ -610,8 +610,12 @@ { uint8 summaryMask[6]; chunk.ReadArray(summaryMask); - chunk.ReadNullString(songArtist); - if(songArtist == "Unregistered") songArtist.clear(); + std::string artist; + chunk.ReadNullString(artist); + if(artist != "Unregistered") + { + songArtist = mpt::ToUnicode(mpt::CharsetWindows1252, artist); + } } break; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2015-05-25 14:43:26 UTC (rev 5172) +++ trunk/OpenMPT/soundlib/Sndfile.h 2015-05-25 15:11:30 UTC (rev 5173) @@ -520,7 +520,7 @@ public: std::string songName; - std::string songArtist; + mpt::ustring songArtist; // Song message SongMessage songMessage; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-25 16:18:27
|
Revision: 5178 http://sourceforge.net/p/modplug/code/5178 Author: manxorist Date: 2015-05-25 16:18:21 +0000 (Mon, 25 May 2015) Log Message: ----------- [Ref] Assertions in macros tend to test for always-true conditions in certain cases (i.e. in the MPT extension writing macros). Selectively disable the relevant compiler warnings in the ASSERT macros. Modified Paths: -------------- trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2015-05-25 16:17:28 UTC (rev 5177) +++ trunk/OpenMPT/common/typedefs.h 2015-05-25 16:18:21 UTC (rev 5178) @@ -198,6 +198,58 @@ +#if MPT_COMPILER_MSVC +#define MPT_CONSTANT_IF(x) \ + __pragma(warning(push)) \ + __pragma(warning(disable:4127)) \ + if(x) \ + __pragma(warning(pop)) \ +/**/ +#define MPT_MAYBE_CONSTANT_IF(x) \ + __pragma(warning(push)) \ + __pragma(warning(disable:4127)) \ + if(x) \ + __pragma(warning(pop)) \ +/**/ +#endif + +#if MPT_COMPILER_GCC +#if MPT_GCC_AT_LEAST(4,6,0) +#define MPT_MAYBE_CONSTANT_IF(x) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wtype-limits\"") \ + if(x) \ + _Pragma("GCC diagnostic pop") \ +/**/ +#else +#define MPT_MAYBE_CONSTANT_IF(x) \ + _Pragma("GCC diagnostic ignored \"-Wtype-limits\"") \ + if(x) \ +/**/ +#endif +#endif + +#if MPT_COMPILER_CLANG +#define MPT_MAYBE_CONSTANT_IF(x) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wtype-limits\"") \ + if(x) \ + _Pragma("clang diagnostic pop") \ +/**/ +#endif + +#if !defined(MPT_CONSTANT_IF) +// MPT_CONSTANT_IF disables compiler warnings for conditions that are either always true or always false for some reason (dependent on template arguments for example) +#define MPT_CONSTANT_IF(x) if(x) +#endif + +#if !defined(MPT_MAYBE_CONSTANT_IF) +// MPT_MAYBE_CONSTANT_IF disables compiler warnings for conditions that may in some case be either always false or always true (useful in ASSERTions in some cases). +#define MPT_MAYBE_CONSTANT_IF(x) if(x) +#endif + + + // Static code checkers might need to get the knowledge of our assertions transferred to them. #define MPT_CHECKER_ASSUME_ASSERTIONS 1 //#define MPT_CHECKER_ASSUME_ASSERTIONS 0 @@ -257,8 +309,8 @@ #define MPT_ASSERT_ALWAYS(expr) ASSERT((expr)) #define MPT_ASSERT_ALWAYS_MSG(expr, msg) ASSERT((expr) && (msg)) #else -#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif @@ -268,18 +320,18 @@ #define MPT_ASSERT(expr) MPT_CHECKER_ASSUME(expr) #define MPT_ASSERT_MSG(expr, msg) MPT_CHECKER_ASSUME(expr) -#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif #else // !NO_ASSERTS -#define MPT_ASSERT(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 16:17:28 UTC (rev 5177) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 16:18:21 UTC (rev 5178) @@ -2115,7 +2115,7 @@ if(!songArtist.empty()) { std::string songArtistU8 = mpt::ToCharset(mpt::CharsetUTF8, songArtist); - uint32 length = mpt::saturate_cast<uint16>(songArtistU8.length()); + uint16 length = mpt::saturate_cast<uint16>(songArtistU8.length()); WRITEMODULARHEADER(MAGIC4LE('A','U','T','H'), length); mpt::IO::WriteRaw(f, songArtistU8.c_str(), length); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-25 16:47:46
|
Revision: 5179 http://sourceforge.net/p/modplug/code/5179 Author: saga-games Date: 2015-05-25 16:47:39 +0000 (Mon, 25 May 2015) Log Message: ----------- [New] General tab: Can now set song artist and song-specific resampling mode [Reg] General tab: Remove button leading to mixer settings. This was mostly useful for quickly changing the resampling mode, which can now be done directly on the general tab. [New] Hidden setting: Misc.DefaultArtist sets the default artist (will be editable in GUI soon) [Mod] OpenMPT: Version is now 1.25.00.08 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_gen.h trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/ModConvert.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/common/versionNumber.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 25 #define VER_MINOR 00 -#define VER_MINORMINOR 07 +#define VER_MINORMINOR 08 //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/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -29,10 +29,9 @@ ON_WM_VSCROLL() ON_COMMAND(IDC_BUTTON1, OnTapTempo) ON_COMMAND(IDC_BUTTON_MODTYPE, OnSongProperties) - ON_COMMAND(IDC_EDIT_MODTYPE, OnSongProperties) - ON_COMMAND(IDC_BUTTON_PLAYERPROPS, OnPlayerProperties) ON_COMMAND(IDC_CHECK_LOOPSONG, OnLoopSongChanged) ON_EN_CHANGE(IDC_EDIT_SONGTITLE, OnTitleChanged) + ON_EN_CHANGE(IDC_EDIT_ARTIST, OnArtistChanged) ON_EN_CHANGE(IDC_EDIT_TEMPO, OnTempoChanged) ON_EN_CHANGE(IDC_EDIT_SPEED, OnSpeedChanged) ON_EN_CHANGE(IDC_EDIT_GLOBALVOL, OnGlobalVolChanged) @@ -41,6 +40,7 @@ ON_EN_CHANGE(IDC_EDIT_SAMPLEPA, OnSamplePAChanged) ON_MESSAGE(WM_MOD_UPDATEPOSITION, OnUpdatePosition) ON_EN_SETFOCUS(IDC_EDIT_SONGTITLE, OnEnSetfocusEditSongtitle) + ON_CBN_SELCHANGE(IDC_COMBO1, OnResamplingChanged) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -50,6 +50,7 @@ CModControlDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCtrlGeneral) DDX_Control(pDX, IDC_EDIT_SONGTITLE, m_EditTitle); + DDX_Control(pDX, IDC_EDIT_ARTIST, m_EditArtist); DDX_Control(pDX, IDC_EDIT_TEMPO, m_EditTempo); DDX_Control(pDX, IDC_SPIN_TEMPO, m_SpinTempo); DDX_Control(pDX, IDC_EDIT_SPEED, m_EditSpeed); @@ -69,9 +70,11 @@ DDX_Control(pDX, IDC_SLIDER_GLOBALVOL, m_SliderGlobalVol); DDX_Control(pDX, IDC_SLIDER_SAMPLEPREAMP, m_SliderSamplePreAmp); - DDX_Control(pDX, IDC_EDIT_MODTYPE, m_EditModType); + DDX_Control(pDX, IDC_BUTTON_MODTYPE, m_BtnModType); DDX_Control(pDX, IDC_VUMETER_LEFT, m_VuMeterLeft); DDX_Control(pDX, IDC_VUMETER_RIGHT, m_VuMeterRight); + + DDX_Control(pDX, IDC_COMBO1, m_CbnResampling); //}}AFX_DATA_MAP } @@ -208,6 +211,32 @@ if (pHint == this) return; FlagSet<HintType> hintType = hint.GetType(); const bool updateAll = hintType[HINT_MODTYPE]; + if (hintType == HINT_MPTOPTIONS || updateAll) + { + m_CbnResampling.ResetContent(); + const struct + { + const TCHAR *name; + ResamplingMode mode; + } interpolationTypes[] = + { + { _T("No Interpolation"), SRCMODE_NEAREST }, + { _T("Linear"), SRCMODE_LINEAR }, + { _T("Cubic Spline"), SRCMODE_SPLINE }, + { _T("Polyphase"), SRCMODE_POLYPHASE }, + { _T("XMMS-ModPlug"), SRCMODE_FIRFILTER }, + }; + m_CbnResampling.SetItemData(m_CbnResampling.AddString(_T("Default (") + CString(interpolationTypes[TrackerSettings::Instance().ResamplerMode].name) + _T(")")), SRCMODE_DEFAULT); + int selection = 0; + for(int i = 0; i < CountOf(interpolationTypes); i++) + { + if(m_sndFile.m_nResampling == interpolationTypes[i].mode) selection = i + 1; + m_CbnResampling.SetItemData(m_CbnResampling.AddString(interpolationTypes[i].name), interpolationTypes[i].mode); + } + + m_CbnResampling.SetCurSel(selection); + m_CbnResampling.Invalidate(FALSE); + } if (updateAll || (hint.GetCategory() == HINTCAT_SEQUENCE && hintType[HINT_MODSEQUENCE])) { // Set max valid restart position @@ -218,6 +247,7 @@ if (!m_bEditsLocked) { m_EditTitle.SetWindowText(m_sndFile.GetTitle().c_str()); + ::SetWindowTextW(m_EditArtist.m_hWnd, mpt::ToWide(m_sndFile.songArtist).c_str()); SetDlgItemInt(IDC_EDIT_TEMPO, m_sndFile.m_nDefaultTempo, FALSE); SetDlgItemInt(IDC_EDIT_SPEED, m_sndFile.m_nDefaultSpeed, FALSE); SetDlgItemInt(IDC_EDIT_GLOBALVOL, m_sndFile.m_nDefaultGlobalVolume / GetGlobalVolumeFactor(), FALSE); @@ -241,6 +271,7 @@ const BOOL bIsNotMOD = (m_sndFile.GetType() != MOD_TYPE_MOD); const BOOL bIsNotMOD_S3M = ((bIsNotMOD) && (m_sndFile.GetType() != MOD_TYPE_S3M)); const BOOL bIsNotMOD_XM = ((bIsNotMOD) && (m_sndFile.GetType() != MOD_TYPE_XM)); + m_EditArtist.EnableWindow(bIsNotMOD_S3M); m_EditTempo.EnableWindow(bIsNotMOD); m_SpinTempo.EnableWindow(bIsNotMOD); GetDlgItem(IDC_BUTTON1)->EnableWindow(bIsNotMOD); @@ -274,7 +305,7 @@ } TCHAR s[256]; wsprintf(s, _T("%s, %d channel%s"), modType, m_sndFile.GetNumChannels(), (m_sndFile.GetNumChannels() != 1) ? _T("s") : _T("")); - m_EditModType.SetWindowText(s); + m_BtnModType.SetWindowText(s); } CheckDlgButton(IDC_CHECK_LOOPSONG, (TrackerSettings::Instance().gbLoopSong) ? TRUE : FALSE); if (hintType[HINT_MPTOPTIONS]) @@ -367,6 +398,25 @@ } +void CCtrlGeneral::OnArtistChanged() +//---------------------------------- +{ + if (!m_EditArtist.m_hWnd || !m_EditArtist.GetModify()) return; + + CStringW artist; + int len = ::GetWindowTextLengthW(m_EditArtist.m_hWnd); + ::GetWindowTextW(m_EditArtist.m_hWnd, artist.GetBufferSetLength(len), len + 1); + artist.ReleaseBuffer(); + if(artist != m_sndFile.songArtist.c_str()) + { + m_EditArtist.SetModify(FALSE); + m_sndFile.songArtist = artist; + m_modDoc.SetModified(); + m_modDoc.UpdateAllViews(NULL, GeneralHint().General(), this); + } +} + + void CCtrlGeneral::OnTempoChanged() //--------------------------------- { @@ -523,15 +573,9 @@ } } -void CCtrlGeneral::OnPlayerProperties() -//------------------------------------- -{ - CMainFrame::m_nLastOptionsPage = OPTIONS_PAGE_MIXER; - CMainFrame::GetMainFrame()->OnViewOptions(); -} void CCtrlGeneral::OnSongProperties() -//---------------------------------- +//----------------------------------- { m_modDoc.SongProperties(); } @@ -569,15 +613,15 @@ switch(uId) { case IDC_SLIDER_SAMPLEPREAMP: - (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_nSamplePreAmp, m_sndFile.GetPlayConfig().getNormalSamplePreAmp()) : wsprintf(pszText, moreRecentMixModeNote); + (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_nSamplePreAmp, m_sndFile.GetPlayConfig().getNormalSamplePreAmp()) : strcpy(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_VSTIVOL: - (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_nVSTiVolume, m_sndFile.GetPlayConfig().getNormalVSTiVol()) : wsprintf(pszText, moreRecentMixModeNote); + (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_nVSTiVolume, m_sndFile.GetPlayConfig().getNormalVSTiVol()) : strcpy(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_GLOBALVOL: - (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_PlayState.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()) : wsprintf(pszText, moreRecentMixModeNote); + (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_PlayState.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()) : strcpy(pszText, moreRecentMixModeNote); return TRUE; break; } @@ -612,7 +656,21 @@ } +void CCtrlGeneral::OnResamplingChanged() +//-------------------------------------- +{ + int sel = m_CbnResampling.GetCurSel(); + if(sel >= 0) + { + m_sndFile.m_nResampling = static_cast<ResamplingMode>(m_CbnResampling.GetItemData(sel)); + if(m_sndFile.GetType() == MOD_TYPE_MPT) + { + m_modDoc.SetModified(); + } + } +} + //////////////////////////////////////////////////////////////////////////////// // // CVuMeter Modified: trunk/OpenMPT/mptrack/Ctrl_gen.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/Ctrl_gen.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -62,12 +62,13 @@ public: bool m_bEditsLocked; //{{AFX_DATA(CCtrlGeneral) - CEdit m_EditTitle; - CStatic m_EditModType; + CEdit m_EditTitle, m_EditArtist; CEdit m_EditTempo, m_EditSpeed, m_EditGlobalVol, m_EditRestartPos, m_EditSamplePA, m_EditVSTiVol; + CButton m_BtnModType; CSpinButtonCtrl m_SpinTempo, m_SpinSpeed, m_SpinGlobalVol, m_SpinRestartPos, m_SpinSamplePA, m_SpinVSTiVol; + CComboBox m_CbnResampling; CSliderCtrl m_SliderTempo, m_SliderSamplePreAmp, m_SliderGlobalVol, m_SliderVSTiVol; CVuMeter m_VuMeterLeft, m_VuMeterRight; @@ -88,6 +89,7 @@ afx_msg void OnVScroll(UINT, UINT, CScrollBar *); afx_msg void OnTapTempo(); afx_msg void OnTitleChanged(); + afx_msg void OnArtistChanged(); afx_msg void OnTempoChanged(); afx_msg void OnSpeedChanged(); afx_msg void OnGlobalVolChanged(); @@ -95,9 +97,9 @@ afx_msg void OnSamplePAChanged(); afx_msg void OnRestartPosChanged(); afx_msg void OnSongProperties(); - afx_msg void OnPlayerProperties(); afx_msg void OnLoopSongChanged(); afx_msg void OnEnSetfocusEditSongtitle(); + afx_msg void OnResamplingChanged(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -469,6 +469,16 @@ } } + if((m_SndFile.GetType() & (MOD_TYPE_XM|MOD_TYPE_IT)) && !m_SndFile.songArtist.empty()) + { + AddToLog("Found artist name"); + foundHacks = true; + if(autofix) + { + m_SndFile.songArtist.clear(); + } + } + if(m_SndFile.GetMixLevels() != mixLevels_compatible && m_SndFile.GetMixLevels() != mixLevels_compatible_FT2) { AddToLog("Found incorrect mix levels (only compatible mix levels allowed)"); Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -571,6 +571,13 @@ CHANGEMODTYPE_WARNING(wGlobalVolumeNotSupported); } } + + // Resampling is only saved in MPTM + if(!newTypeIsMPT && m_SndFile.m_nResampling != SRCMODE_DEFAULT) + { + CHANGEMODTYPE_WARNING(wResamplingMode); + m_SndFile.m_nResampling = SRCMODE_DEFAULT; + } // Pattern warnings CHAR s[64]; @@ -606,6 +613,7 @@ CHANGEMODTYPE_CHECK(wVolRamp, "Fasttracker 2 compatible super soft volume ramping gets lost when converting XM files to another type."); CHANGEMODTYPE_CHECK(wCompatibilityMode, "Consider enabling the \"compatible playback\" option in the song properties to increase compatiblity with other players."); CHANGEMODTYPE_CHECK(wGlobalVolumeNotSupported, "Default global volume is not supported by the new format."); + CHANGEMODTYPE_CHECK(wResamplingMode, "Song-specific resampling mode is not supported by the new format."); SetModified(); GetPatternUndo().ClearUndo(); Modified: trunk/OpenMPT/mptrack/ModConvert.h =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/ModConvert.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -40,6 +40,7 @@ wPitchToTempoLock, wGlobalVolumeNotSupported, wFilterVariation, + wResamplingMode, wNumWarnings }; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -772,6 +772,7 @@ } } m_SndFile.ResetPlayPos(); + m_SndFile.songArtist = TrackerSettings::Instance().defaultArtist; return TRUE; } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -163,6 +163,8 @@ sndFile.m_dwCreatedWithVersion = MptVersion::num; sndFile.m_dwLastSavedWithVersion = 0; sndFile.madeWithTracker.clear(); + sndFile.songArtist = TrackerSettings::Instance().defaultArtist; + doc->UpdateAllViews(nullptr, UpdateHint().ModType().AsLPARAM()); } else { // Remove extension from title, so that saving the file will not suggest a filename like e.g. "example.it.it". Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -234,6 +234,7 @@ , ComponentsKeepLoaded(conf, "Components", "KeepLoaded", ComponentManagerSettingsDefault().KeepLoaded()) // Default template , defaultTemplateFile(conf, "Paths", "DefaultTemplate", mpt::PathString()) + , defaultArtist(conf, "Misc", "DefaultArtist", mpt::ToUnicode(mpt::CharsetLocale, std::getenv("USERNAME"))) // MRU List , mruListLength(conf, "Misc", "MRUListLength", 10) // Plugins @@ -562,6 +563,11 @@ m_dwPatternSetup &= ~(0x08 | 0x02); } + if(storedVersion < MAKE_VERSION_NUMERIC(1,25,00,08)) + { + glGeneralWindowHeight += 36; + } + // Effects #ifndef NO_EQ FixupEQ(&m_EqSettings); Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -547,6 +547,7 @@ // Default template Setting<mpt::PathString> defaultTemplateFile; + Setting<mpt::ustring> defaultArtist; Setting<uint32> mruListLength; std::vector<mpt::PathString> mruFiles; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-05-25 16:47:39 UTC (rev 5179) @@ -838,44 +838,47 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,54,168,12 END -IDD_CONTROL_GLOBALS DIALOGEX 0, 0, 374, 98 +IDD_CONTROL_GLOBALS DIALOGEX 0, 0, 440, 122 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN LTEXT "Name:",IDC_STATIC,2,5,23,8 EDITTEXT IDC_EDIT_SONGTITLE,30,3,156,12,ES_AUTOHSCROLL - CTEXT "Type EXT, ## channels",IDC_EDIT_MODTYPE,192,3,138,12,SS_NOTIFY | SS_CENTERIMAGE,WS_EX_STATICEDGE - LTEXT "Initial tempo:",IDC_STATIC,5,20,44,8 - CONTROL "",IDC_SLIDER_SONGTEMPO,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS,11,28,15,50 - EDITTEXT IDC_EDIT_TEMPO,5,78,29,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN_TEMPO,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,27,76,11,14 - PUSHBUTTON "Tap",IDC_BUTTON1,54,24,24,12 - LTEXT "Ticks/row:",IDC_STATIC,44,40,35,8 - EDITTEXT IDC_EDIT_SPEED,44,51,30,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1",IDC_SPIN_SPEED,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,67,50,11,14 - LTEXT "Restart:",IDC_STATIC,44,68,26,8 - EDITTEXT IDC_EDIT_RESTARTPOS,44,78,30,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1",IDC_SPIN_RESTARTPOS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,65,77,11,14 - LTEXT "Initial global vol:",IDC_STATIC,90,20,52,8 - CONTROL "",IDC_SLIDER_GLOBALVOL,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,105,28,15,50 - EDITTEXT IDC_EDIT_GLOBALVOL,95,78,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN_GLOBALVOL,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,124,76,11,14 - LTEXT "VSTi vol:",IDC_STATIC,159,20,33,8 - CONTROL "",IDC_SLIDER_VSTIVOL,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,164,28,15,50 - EDITTEXT IDC_EDIT_VSTIVOL,156,78,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN_VSTIVOL,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,184,76,11,14 - LTEXT "Sample vol:",IDC_STATIC,212,20,38,8 - CONTROL "Slider1",IDC_SLIDER_SAMPLEPREAMP,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,221,28,15,50 - EDITTEXT IDC_EDIT_SAMPLEPA,212,78,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN_SAMPLEPA,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,238,75,11,14 - PUSHBUTTON "Song Properties...",IDC_BUTTON_MODTYPE,264,18,66,12 - CONTROL "Loop Song",IDC_CHECK_LOOPSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,263,48,67,10 - PUSHBUTTON "Player Settings...",IDC_BUTTON_PLAYERPROPS,264,60,66,12 - CTEXT "Not saved with song!",IDC_STATIC,264,73,68,17 - CONTROL "",IDC_VUMETER_LEFT,"Static",SS_BLACKRECT | SS_SUNKEN,336,1,15,91 - CONTROL "",IDC_VUMETER_RIGHT,"Static",SS_BLACKRECT | SS_SUNKEN,354,1,15,91 - GROUPBOX "",IDC_STATIC,1,14,83,82 - GROUPBOX "",IDC_STATIC,83,14,175,82 + LTEXT "Artist:",IDC_STATIC,2,20,23,8 + EDITTEXT IDC_EDIT_ARTIST,30,18,156,12,ES_AUTOHSCROLL + PUSHBUTTON "Type EXT, ## channels",IDC_BUTTON_MODTYPE,192,3,150,12 + LTEXT "Resampling:",IDC_STATIC,192,20,40,8 + COMBOBOX IDC_COMBO1,240,18,102,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Initial Tempo:",IDC_STATIC,5,42,44,8 + CONTROL "",IDC_SLIDER_SONGTEMPO,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS,11,50,15,50 + EDITTEXT IDC_EDIT_TEMPO,5,100,37,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN_TEMPO,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,33,98,11,14 + PUSHBUTTON "Tap",IDC_BUTTON1,54,42,36,12 + LTEXT "Ticks/Row:",IDC_STATIC,54,90,36,8 + EDITTEXT IDC_EDIT_SPEED,54,101,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SPEED,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,82,100,11,14 + LTEXT "Restart Position:",IDC_STATIC,102,42,60,8 + EDITTEXT IDC_EDIT_RESTARTPOS,102,54,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_RESTARTPOS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,132,54,11,14 + CONTROL "Loop Song",IDC_CHECK_LOOPSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,102,90,54,10 + LTEXT "Not saved in song!",IDC_STATIC,102,102,60,12 + LTEXT "Initial global vol:",IDC_STATIC,169,42,52,8 + CONTROL "",IDC_SLIDER_GLOBALVOL,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,181,50,24,50 + EDITTEXT IDC_EDIT_GLOBALVOL,174,100,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN_GLOBALVOL,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,203,98,11,14 + LTEXT "VSTi vol:",IDC_STATIC,238,42,33,8 + CONTROL "",IDC_SLIDER_VSTIVOL,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,243,50,22,50 + EDITTEXT IDC_EDIT_VSTIVOL,235,100,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN_VSTIVOL,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,263,98,11,14 + LTEXT "Sample vol:",IDC_STATIC,291,42,38,8 + CONTROL "Slider1",IDC_SLIDER_SAMPLEPREAMP,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,300,50,19,50 + EDITTEXT IDC_EDIT_SAMPLEPA,291,100,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN_SAMPLEPA,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,317,97,11,14 + CONTROL "",IDC_VUMETER_LEFT,"Static",SS_BLACKRECT | SS_SUNKEN,348,3,15,115 + CONTROL "",IDC_VUMETER_RIGHT,"Static",SS_BLACKRECT | SS_SUNKEN,366,3,15,115 + GROUPBOX "",IDC_STATIC,1,30,96,88 + GROUPBOX "",IDC_STATIC,96,30,67,88 + GROUPBOX "",IDC_STATIC,162,30,180,88 END IDD_CONTROL_COMMENTS DIALOGEX 0, 0, 435, 119 @@ -1781,7 +1784,8 @@ IDD_CONTROL_GLOBALS, DIALOG BEGIN - BOTTOMMARGIN, 94 + RIGHTMARGIN, 374 + BOTTOMMARGIN, 118 END IDD_CONTROL_COMMENTS, DIALOG Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/mptrack/resource.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -575,6 +575,7 @@ #define IDC_EDIT_COMMENTS 2004 #define IDC_EDIT_SONGTITLE 2005 #define IDC_SLIDER_PREAMP 2006 +#define IDC_EDIT_ARTIST 2006 #define IDC_EDIT_TEMPO 2007 #define IDC_EDIT_SPEED 2008 #define IDC_EDIT_GLOBALVOL 2009 @@ -738,7 +739,6 @@ #define IDC_FILTERMODE 2238 #define IDC_AUTOSAVE_USECUSTOMDIR 2245 #define IDC_BUTTON_MODTYPE2 2246 -#define IDC_BUTTON_PLAYERPROPS 2247 #define IDC_SLIDER_SAMPLEPREAMP3 2248 #define IDC_SLIDER_GLOBALVOL 2249 #define IDC_EDIT_VSTIVOL 2250 Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 16:47:39 UTC (rev 5179) @@ -1920,8 +1920,8 @@ // The reason is that ITs and XMs save [code][size][ins1.Value][ins2.Value]... // whereas ITP saves [code][size][ins1.Value][code][size][ins2.Value]... // too late to turn back.... -void CSoundFile::SaveExtendedInstrumentProperties(UINT nInstruments, FILE* f) const -//--------------------------------------------------------------------------------- +void CSoundFile::SaveExtendedInstrumentProperties(INSTRUMENTINDEX nInstruments, FILE *f) const +//-------------------------------------------------------------------------------------------- { uint32 code = MAGIC4BE('M','P','T','X'); // write extension header code mpt::IO::WriteIntLE<uint32>(f, code); @@ -1987,8 +1987,8 @@ return; } -void CSoundFile::WriteInstrumentPropertyForAllInstruments(uint32 code, int16 size, FILE* f, UINT nInstruments) const -//------------------------------------------------------------------------------------------------------------------ +void CSoundFile::WriteInstrumentPropertyForAllInstruments(uint32 code, int16 size, FILE *f, INSTRUMENTINDEX nInstruments) const +//----------------------------------------------------------------------------------------------------------------------------- { mpt::IO::WriteIntLE<uint32>(f, code); //write code mpt::IO::WriteIntLE<int16>(f, size); //write size @@ -2080,9 +2080,9 @@ WRITEMODULAR(MAGIC4BE('R','P','.','.'), m_nRestartPos); } - if(m_nResampling != SRCMODE_DEFAULT) + if(m_nResampling != SRCMODE_DEFAULT && GetType() == MOD_TYPE_MPT) { - WRITEMODULAR(MAGIC4LE('R','S','M','P'), m_nResampling); + WRITEMODULAR(MAGIC4LE('R','S','M','P'), static_cast<uint32>(m_nResampling)); } // Sample cues @@ -2106,7 +2106,7 @@ } } - //Additional flags for XM/IT/MPTM + // Additional flags for XM/IT/MPTM if(m_ModFlags) { WRITEMODULAR(MAGIC4BE('M','S','F','.'), m_ModFlags.GetRaw()); @@ -2248,7 +2248,7 @@ case MAGIC4BE('R','P','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nRestartPos); break; case MAGIC4BE('M','S','F','.'): ReadFieldFlagSet(chunk, size, m_ModFlags); break; case MAGIC4LE('R','S','M','P'): - ReadField(chunk, size, m_nResampling); + ReadFieldCast(chunk, size, m_nResampling); if(!IsKnownResamplingMode(m_nResampling)) m_nResampling = SRCMODE_DEFAULT; break; #ifdef MODPLUG_TRACKER Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2015-05-25 16:18:21 UTC (rev 5178) +++ trunk/OpenMPT/soundlib/Sndfile.h 2015-05-25 16:47:39 UTC (rev 5179) @@ -434,7 +434,7 @@ // Periods in MPT are 4 times as fine as Amiga periods because of extra fine frequency slides (introduced in the S3M format). int32 m_nMinPeriod, m_nMaxPeriod; - uint32 m_nResampling; // Resampling mode (if overriding the globally set resampling) + ResamplingMode m_nResampling; // Resampling mode (if overriding the globally set resampling) int32 m_nRepeatCount; // -1 means repeat infinitely. ORDERINDEX m_nMaxOrderPosition; ModChannelSettings ChnSettings[MAX_BASECHANNELS]; // Initial channels settings @@ -719,8 +719,8 @@ bool SaveMod(const mpt::PathString &filename) const; bool SaveIT(const mpt::PathString &filename, bool compatibilityExport = false); UINT SaveMixPlugins(FILE *f=NULL, bool bUpdate=true); - void WriteInstrumentPropertyForAllInstruments(uint32 code, int16 size, FILE* f, UINT nInstruments) const; - void SaveExtendedInstrumentProperties(UINT nInstruments, FILE* f) const; + void WriteInstrumentPropertyForAllInstruments(uint32 code, int16 size, FILE* f, INSTRUMENTINDEX nInstruments) const; + void SaveExtendedInstrumentProperties(INSTRUMENTINDEX nInstruments, FILE* f) const; void SaveExtendedSongProperties(FILE* f) const; size_t SaveModularInstrumentData(FILE *f, const ModInstrument *pIns) const; #endif // MODPLUG_NO_FILESAVE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-25 20:25:04
|
Revision: 5184 http://sourceforge.net/p/modplug/code/5184 Author: saga-games Date: 2015-05-25 20:24:50 +0000 (Mon, 25 May 2015) Log Message: ----------- [New] Can now set default artist name and mod type from the general options. [Mod] Moved default paths and autosaver setup to a new/renamed option tab, "Paths / Auto Save" [Ref] Move dialogs from Moptions.cpp/.h into separate source and header files to keep them more tidy. Modified Paths: -------------- trunk/OpenMPT/build/vs2008/OpenMPT.vcproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters trunk/OpenMPT/common/mptPathString.h trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/AutoSaver.h trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpt_midi.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/UpdateCheck.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 Added Paths: ----------- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp trunk/OpenMPT/mptrack/AdvancedConfigDlg.h trunk/OpenMPT/mptrack/ColorConfigDlg.cpp trunk/OpenMPT/mptrack/ColorConfigDlg.h trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp trunk/OpenMPT/mptrack/GeneralConfigDlg.h trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/PathConfigDlg.h trunk/OpenMPT/mptrack/SampleConfigDlg.cpp trunk/OpenMPT/mptrack/SampleConfigDlg.h Removed Paths: ------------- trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Moptions.h Modified: trunk/OpenMPT/build/vs2008/OpenMPT.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-25 20:24:50 UTC (rev 5184) @@ -804,6 +804,14 @@ > </File> <File + RelativePath="..\..\mptrack\AdvancedConfigDlg.cpp" + > + </File> + <File + RelativePath="..\..\mptrack\AdvancedConfigDlg.h" + > + </File> + <File RelativePath="..\..\mptrack\AppendModule.cpp" > </File> @@ -872,6 +880,14 @@ > </File> <File + RelativePath="..\..\mptrack\ColorConfigDlg.cpp" + > + </File> + <File + RelativePath="..\..\mptrack\ColorConfigDlg.h" + > + </File> + <File RelativePath="..\..\mptrack\ColourEdit.cpp" > </File> @@ -1004,6 +1020,14 @@ > </File> <File + RelativePath="..\..\mptrack\GeneralConfigDlg.cpp" + > + </File> + <File + RelativePath="..\..\mptrack\GeneralConfigDlg.h" + > + </File> + <File RelativePath="..\..\mptrack\Globals.cpp" > </File> @@ -1108,14 +1132,6 @@ > </File> <File - RelativePath="..\..\mptrack\Moptions.cpp" - > - </File> - <File - RelativePath="..\..\mptrack\Moptions.h" - > - </File> - <File RelativePath="..\..\mptrack\MoveFXSlotDialog.cpp" > </File> @@ -1164,6 +1180,14 @@ > </File> <File + RelativePath="..\..\mptrack\PathConfigDlg.cpp" + > + </File> + <File + RelativePath="..\..\mptrack\PathConfigDlg.h" + > + </File> + <File RelativePath="..\..\mptrack\PatternClipboard.cpp" > </File> @@ -1208,6 +1232,14 @@ > </File> <File + RelativePath="..\..\mptrack\SampleConfigDlg.cpp" + > + </File> + <File + RelativePath="..\..\mptrack\SampleConfigDlg.h" + > + </File> + <File RelativePath="..\..\mptrack\SampleEditorDialogs.cpp" > </File> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-25 20:24:50 UTC (rev 5184) @@ -373,6 +373,7 @@ <ClInclude Include="..\..\common\versionNumber.h" /> <ClInclude Include="..\..\mptrack\AboutDialog.h" /> <ClInclude Include="..\..\mptrack\AbstractVstEditor.h" /> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h" /> <ClInclude Include="..\..\mptrack\AutoSaver.h" /> <ClInclude Include="..\..\mptrack\Autotune.h" /> <ClInclude Include="..\..\mptrack\CImageListEx.h" /> @@ -382,6 +383,7 @@ <ClInclude Include="..\..\mptrack\Childfrm.h" /> <ClInclude Include="..\..\mptrack\CleanupSong.h" /> <ClInclude Include="..\..\mptrack\CloseMainDialog.h" /> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h" /> <ClInclude Include="..\..\mptrack\ColourEdit.h" /> <ClInclude Include="..\..\mptrack\CommandSet.h" /> <ClInclude Include="..\..\mptrack\CreditStatic.h" /> @@ -398,6 +400,7 @@ <ClInclude Include="..\..\mptrack\FadeLaws.h" /> <ClInclude Include="..\..\mptrack\FileDialog.h" /> <ClInclude Include="..\..\mptrack\FolderScanner.h" /> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h" /> <ClInclude Include="..\..\mptrack\Globals.h" /> <ClInclude Include="..\..\mptrack\InputHandler.h" /> <ClInclude Include="..\..\mptrack\KeyConfigDlg.h" /> @@ -409,19 +412,20 @@ <ClInclude Include="..\..\mptrack\Mainfrm.h" /> <ClInclude Include="..\..\mptrack\ModConvert.h" /> <ClInclude Include="..\..\mptrack\Moddoc.h" /> - <ClInclude Include="..\..\mptrack\Moptions.h" /> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h" /> <ClInclude Include="..\..\mptrack\Mpdlgs.h" /> <ClInclude Include="..\..\mptrack\Mptrack.h" /> <ClInclude Include="..\..\mptrack\Notification.h" /> <ClInclude Include="..\..\mptrack\PNG.h" /> <ClInclude Include="..\..\mptrack\PSRatioCalc.h" /> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h" /> <ClInclude Include="..\..\mptrack\PatternClipboard.h" /> <ClInclude Include="..\..\mptrack\PatternCursor.h" /> <ClInclude Include="..\..\mptrack\PatternEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\PatternFont.h" /> <ClInclude Include="..\..\mptrack\PatternGotoDialog.h" /> <ClInclude Include="..\..\mptrack\Reporting.h" /> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h" /> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\SampleGenerator.h" /> <ClInclude Include="..\..\mptrack\ScaleEnvPointsDlg.h" /> @@ -548,6 +552,7 @@ <ClCompile Include="..\..\common\version.cpp" /> <ClCompile Include="..\..\mptrack\AboutDialog.cpp" /> <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp" /> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\AppendModule.cpp" /> <ClCompile Include="..\..\mptrack\AutoSaver.cpp" /> <ClCompile Include="..\..\mptrack\Autotune.cpp" /> @@ -556,6 +561,7 @@ <ClCompile Include="..\..\mptrack\Childfrm.cpp" /> <ClCompile Include="..\..\mptrack\CleanupSong.cpp" /> <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp" /> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\ColourEdit.cpp" /> <ClCompile Include="..\..\mptrack\CommandSet.cpp" /> <ClCompile Include="..\..\mptrack\CreditStatic.cpp" /> @@ -573,6 +579,7 @@ <ClCompile Include="..\..\mptrack\ExternalSamples.cpp" /> <ClCompile Include="..\..\mptrack\FileDialog.cpp" /> <ClCompile Include="..\..\mptrack\FolderScanner.cpp" /> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\Globals.cpp" /> <ClCompile Include="..\..\mptrack\InputHandler.cpp" /> <ClCompile Include="..\..\mptrack\KeyConfigDlg.cpp" /> @@ -588,18 +595,19 @@ <ClCompile Include="..\..\mptrack\ModConvert.cpp" /> <ClCompile Include="..\..\mptrack\Moddoc.cpp" /> <ClCompile Include="..\..\mptrack\Modedit.cpp" /> - <ClCompile Include="..\..\mptrack\Moptions.cpp" /> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp" /> <ClCompile Include="..\..\mptrack\Mpdlgs.cpp" /> <ClCompile Include="..\..\mptrack\Mpt_midi.cpp" /> <ClCompile Include="..\..\mptrack\Mptrack.cpp" /> <ClCompile Include="..\..\mptrack\PNG.cpp" /> <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp" /> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp" /> <ClCompile Include="..\..\mptrack\PatternEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\PatternFont.cpp" /> <ClCompile Include="..\..\mptrack\PatternGotoDialog.cpp" /> <ClCompile Include="..\..\mptrack\Reporting.cpp" /> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\SampleGenerator.cpp" /> <ClCompile Include="..\..\mptrack\ScaleEnvPointsDlg.cpp" /> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-25 20:24:50 UTC (rev 5184) @@ -116,6 +116,9 @@ <ClInclude Include="..\..\mptrack\AbstractVstEditor.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\AutoSaver.h"> <Filter>mptrack</Filter> </ClInclude> @@ -143,6 +146,9 @@ <ClInclude Include="..\..\mptrack\CloseMainDialog.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\ColourEdit.h"> <Filter>mptrack</Filter> </ClInclude> @@ -191,6 +197,9 @@ <ClInclude Include="..\..\mptrack\FolderScanner.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\Globals.h"> <Filter>mptrack</Filter> </ClInclude> @@ -224,9 +233,6 @@ <ClInclude Include="..\..\mptrack\Moddoc.h"> <Filter>mptrack</Filter> </ClInclude> - <ClInclude Include="..\..\mptrack\Moptions.h"> - <Filter>mptrack</Filter> - </ClInclude> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h"> <Filter>mptrack</Filter> </ClInclude> @@ -245,6 +251,9 @@ <ClInclude Include="..\..\mptrack\PSRatioCalc.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\PatternClipboard.h"> <Filter>mptrack</Filter> </ClInclude> @@ -263,6 +272,9 @@ <ClInclude Include="..\..\mptrack\Reporting.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h"> <Filter>mptrack</Filter> </ClInclude> @@ -616,6 +628,9 @@ <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\AppendModule.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -640,6 +655,9 @@ <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\ColourEdit.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -691,6 +709,9 @@ <ClCompile Include="..\..\mptrack\FolderScanner.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\Globals.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -736,9 +757,6 @@ <ClCompile Include="..\..\mptrack\Modedit.cpp"> <Filter>mptrack</Filter> </ClCompile> - <ClCompile Include="..\..\mptrack\Moptions.cpp"> - <Filter>mptrack</Filter> - </ClCompile> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -757,6 +775,9 @@ <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -772,6 +793,9 @@ <ClCompile Include="..\..\mptrack\Reporting.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp"> <Filter>mptrack</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-25 20:24:50 UTC (rev 5184) @@ -379,6 +379,7 @@ <ClInclude Include="..\..\common\versionNumber.h" /> <ClInclude Include="..\..\mptrack\AboutDialog.h" /> <ClInclude Include="..\..\mptrack\AbstractVstEditor.h" /> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h" /> <ClInclude Include="..\..\mptrack\AutoSaver.h" /> <ClInclude Include="..\..\mptrack\Autotune.h" /> <ClInclude Include="..\..\mptrack\CImageListEx.h" /> @@ -388,6 +389,7 @@ <ClInclude Include="..\..\mptrack\Childfrm.h" /> <ClInclude Include="..\..\mptrack\CleanupSong.h" /> <ClInclude Include="..\..\mptrack\CloseMainDialog.h" /> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h" /> <ClInclude Include="..\..\mptrack\ColourEdit.h" /> <ClInclude Include="..\..\mptrack\CommandSet.h" /> <ClInclude Include="..\..\mptrack\CreditStatic.h" /> @@ -404,6 +406,7 @@ <ClInclude Include="..\..\mptrack\FadeLaws.h" /> <ClInclude Include="..\..\mptrack\FileDialog.h" /> <ClInclude Include="..\..\mptrack\FolderScanner.h" /> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h" /> <ClInclude Include="..\..\mptrack\Globals.h" /> <ClInclude Include="..\..\mptrack\InputHandler.h" /> <ClInclude Include="..\..\mptrack\KeyConfigDlg.h" /> @@ -415,19 +418,20 @@ <ClInclude Include="..\..\mptrack\Mainfrm.h" /> <ClInclude Include="..\..\mptrack\ModConvert.h" /> <ClInclude Include="..\..\mptrack\Moddoc.h" /> - <ClInclude Include="..\..\mptrack\Moptions.h" /> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h" /> <ClInclude Include="..\..\mptrack\Mpdlgs.h" /> <ClInclude Include="..\..\mptrack\Mptrack.h" /> <ClInclude Include="..\..\mptrack\Notification.h" /> <ClInclude Include="..\..\mptrack\PNG.h" /> <ClInclude Include="..\..\mptrack\PSRatioCalc.h" /> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h" /> <ClInclude Include="..\..\mptrack\PatternClipboard.h" /> <ClInclude Include="..\..\mptrack\PatternCursor.h" /> <ClInclude Include="..\..\mptrack\PatternEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\PatternFont.h" /> <ClInclude Include="..\..\mptrack\PatternGotoDialog.h" /> <ClInclude Include="..\..\mptrack\Reporting.h" /> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h" /> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\SampleGenerator.h" /> <ClInclude Include="..\..\mptrack\ScaleEnvPointsDlg.h" /> @@ -554,6 +558,7 @@ <ClCompile Include="..\..\common\version.cpp" /> <ClCompile Include="..\..\mptrack\AboutDialog.cpp" /> <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp" /> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\AppendModule.cpp" /> <ClCompile Include="..\..\mptrack\AutoSaver.cpp" /> <ClCompile Include="..\..\mptrack\Autotune.cpp" /> @@ -562,6 +567,7 @@ <ClCompile Include="..\..\mptrack\Childfrm.cpp" /> <ClCompile Include="..\..\mptrack\CleanupSong.cpp" /> <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp" /> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\ColourEdit.cpp" /> <ClCompile Include="..\..\mptrack\CommandSet.cpp" /> <ClCompile Include="..\..\mptrack\CreditStatic.cpp" /> @@ -579,6 +585,7 @@ <ClCompile Include="..\..\mptrack\ExternalSamples.cpp" /> <ClCompile Include="..\..\mptrack\FileDialog.cpp" /> <ClCompile Include="..\..\mptrack\FolderScanner.cpp" /> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\Globals.cpp" /> <ClCompile Include="..\..\mptrack\InputHandler.cpp" /> <ClCompile Include="..\..\mptrack\KeyConfigDlg.cpp" /> @@ -594,18 +601,19 @@ <ClCompile Include="..\..\mptrack\ModConvert.cpp" /> <ClCompile Include="..\..\mptrack\Moddoc.cpp" /> <ClCompile Include="..\..\mptrack\Modedit.cpp" /> - <ClCompile Include="..\..\mptrack\Moptions.cpp" /> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp" /> <ClCompile Include="..\..\mptrack\Mpdlgs.cpp" /> <ClCompile Include="..\..\mptrack\Mpt_midi.cpp" /> <ClCompile Include="..\..\mptrack\Mptrack.cpp" /> <ClCompile Include="..\..\mptrack\PNG.cpp" /> <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp" /> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp" /> <ClCompile Include="..\..\mptrack\PatternEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\PatternFont.cpp" /> <ClCompile Include="..\..\mptrack\PatternGotoDialog.cpp" /> <ClCompile Include="..\..\mptrack\Reporting.cpp" /> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\SampleGenerator.cpp" /> <ClCompile Include="..\..\mptrack\ScaleEnvPointsDlg.cpp" /> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-25 20:24:50 UTC (rev 5184) @@ -116,6 +116,9 @@ <ClInclude Include="..\..\mptrack\AbstractVstEditor.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\AutoSaver.h"> <Filter>mptrack</Filter> </ClInclude> @@ -143,6 +146,9 @@ <ClInclude Include="..\..\mptrack\CloseMainDialog.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\ColourEdit.h"> <Filter>mptrack</Filter> </ClInclude> @@ -191,6 +197,9 @@ <ClInclude Include="..\..\mptrack\FolderScanner.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\Globals.h"> <Filter>mptrack</Filter> </ClInclude> @@ -224,9 +233,6 @@ <ClInclude Include="..\..\mptrack\Moddoc.h"> <Filter>mptrack</Filter> </ClInclude> - <ClInclude Include="..\..\mptrack\Moptions.h"> - <Filter>mptrack</Filter> - </ClInclude> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h"> <Filter>mptrack</Filter> </ClInclude> @@ -245,6 +251,9 @@ <ClInclude Include="..\..\mptrack\PSRatioCalc.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\PatternClipboard.h"> <Filter>mptrack</Filter> </ClInclude> @@ -263,6 +272,9 @@ <ClInclude Include="..\..\mptrack\Reporting.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h"> <Filter>mptrack</Filter> </ClInclude> @@ -616,6 +628,9 @@ <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\AppendModule.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -640,6 +655,9 @@ <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\ColourEdit.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -691,6 +709,9 @@ <ClCompile Include="..\..\mptrack\FolderScanner.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\Globals.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -736,9 +757,6 @@ <ClCompile Include="..\..\mptrack\Modedit.cpp"> <Filter>mptrack</Filter> </ClCompile> - <ClCompile Include="..\..\mptrack\Moptions.cpp"> - <Filter>mptrack</Filter> - </ClCompile> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -757,6 +775,9 @@ <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -772,6 +793,9 @@ <ClCompile Include="..\..\mptrack\Reporting.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp"> <Filter>mptrack</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-25 20:24:50 UTC (rev 5184) @@ -380,6 +380,7 @@ <ClInclude Include="..\..\common\versionNumber.h" /> <ClInclude Include="..\..\mptrack\AboutDialog.h" /> <ClInclude Include="..\..\mptrack\AbstractVstEditor.h" /> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h" /> <ClInclude Include="..\..\mptrack\AutoSaver.h" /> <ClInclude Include="..\..\mptrack\Autotune.h" /> <ClInclude Include="..\..\mptrack\CImageListEx.h" /> @@ -389,6 +390,7 @@ <ClInclude Include="..\..\mptrack\Childfrm.h" /> <ClInclude Include="..\..\mptrack\CleanupSong.h" /> <ClInclude Include="..\..\mptrack\CloseMainDialog.h" /> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h" /> <ClInclude Include="..\..\mptrack\ColourEdit.h" /> <ClInclude Include="..\..\mptrack\CommandSet.h" /> <ClInclude Include="..\..\mptrack\CreditStatic.h" /> @@ -405,6 +407,7 @@ <ClInclude Include="..\..\mptrack\FadeLaws.h" /> <ClInclude Include="..\..\mptrack\FileDialog.h" /> <ClInclude Include="..\..\mptrack\FolderScanner.h" /> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h" /> <ClInclude Include="..\..\mptrack\Globals.h" /> <ClInclude Include="..\..\mptrack\InputHandler.h" /> <ClInclude Include="..\..\mptrack\KeyConfigDlg.h" /> @@ -416,19 +419,20 @@ <ClInclude Include="..\..\mptrack\Mainfrm.h" /> <ClInclude Include="..\..\mptrack\ModConvert.h" /> <ClInclude Include="..\..\mptrack\Moddoc.h" /> - <ClInclude Include="..\..\mptrack\Moptions.h" /> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h" /> <ClInclude Include="..\..\mptrack\Mpdlgs.h" /> <ClInclude Include="..\..\mptrack\Mptrack.h" /> <ClInclude Include="..\..\mptrack\Notification.h" /> <ClInclude Include="..\..\mptrack\PNG.h" /> <ClInclude Include="..\..\mptrack\PSRatioCalc.h" /> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h" /> <ClInclude Include="..\..\mptrack\PatternClipboard.h" /> <ClInclude Include="..\..\mptrack\PatternCursor.h" /> <ClInclude Include="..\..\mptrack\PatternEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\PatternFont.h" /> <ClInclude Include="..\..\mptrack\PatternGotoDialog.h" /> <ClInclude Include="..\..\mptrack\Reporting.h" /> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h" /> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\SampleGenerator.h" /> <ClInclude Include="..\..\mptrack\ScaleEnvPointsDlg.h" /> @@ -555,6 +559,7 @@ <ClCompile Include="..\..\common\version.cpp" /> <ClCompile Include="..\..\mptrack\AboutDialog.cpp" /> <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp" /> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\AppendModule.cpp" /> <ClCompile Include="..\..\mptrack\AutoSaver.cpp" /> <ClCompile Include="..\..\mptrack\Autotune.cpp" /> @@ -563,6 +568,7 @@ <ClCompile Include="..\..\mptrack\Childfrm.cpp" /> <ClCompile Include="..\..\mptrack\CleanupSong.cpp" /> <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp" /> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\ColourEdit.cpp" /> <ClCompile Include="..\..\mptrack\CommandSet.cpp" /> <ClCompile Include="..\..\mptrack\CreditStatic.cpp" /> @@ -580,6 +586,7 @@ <ClCompile Include="..\..\mptrack\ExternalSamples.cpp" /> <ClCompile Include="..\..\mptrack\FileDialog.cpp" /> <ClCompile Include="..\..\mptrack\FolderScanner.cpp" /> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\Globals.cpp" /> <ClCompile Include="..\..\mptrack\InputHandler.cpp" /> <ClCompile Include="..\..\mptrack\KeyConfigDlg.cpp" /> @@ -595,18 +602,19 @@ <ClCompile Include="..\..\mptrack\ModConvert.cpp" /> <ClCompile Include="..\..\mptrack\Moddoc.cpp" /> <ClCompile Include="..\..\mptrack\Modedit.cpp" /> - <ClCompile Include="..\..\mptrack\Moptions.cpp" /> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp" /> <ClCompile Include="..\..\mptrack\Mpdlgs.cpp" /> <ClCompile Include="..\..\mptrack\Mpt_midi.cpp" /> <ClCompile Include="..\..\mptrack\Mptrack.cpp" /> <ClCompile Include="..\..\mptrack\PNG.cpp" /> <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp" /> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp" /> <ClCompile Include="..\..\mptrack\PatternEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\PatternFont.cpp" /> <ClCompile Include="..\..\mptrack\PatternGotoDialog.cpp" /> <ClCompile Include="..\..\mptrack\Reporting.cpp" /> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\SampleGenerator.cpp" /> <ClCompile Include="..\..\mptrack\ScaleEnvPointsDlg.cpp" /> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-25 20:24:50 UTC (rev 5184) @@ -116,6 +116,9 @@ <ClInclude Include="..\..\mptrack\AbstractVstEditor.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\AutoSaver.h"> <Filter>mptrack</Filter> </ClInclude> @@ -143,6 +146,9 @@ <ClInclude Include="..\..\mptrack\CloseMainDialog.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\ColourEdit.h"> <Filter>mptrack</Filter> </ClInclude> @@ -191,6 +197,9 @@ <ClInclude Include="..\..\mptrack\FolderScanner.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\Globals.h"> <Filter>mptrack</Filter> </ClInclude> @@ -224,9 +233,6 @@ <ClInclude Include="..\..\mptrack\Moddoc.h"> <Filter>mptrack</Filter> </ClInclude> - <ClInclude Include="..\..\mptrack\Moptions.h"> - <Filter>mptrack</Filter> - </ClInclude> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h"> <Filter>mptrack</Filter> </ClInclude> @@ -245,6 +251,9 @@ <ClInclude Include="..\..\mptrack\PSRatioCalc.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\PatternClipboard.h"> <Filter>mptrack</Filter> </ClInclude> @@ -263,6 +272,9 @@ <ClInclude Include="..\..\mptrack\Reporting.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h"> <Filter>mptrack</Filter> </ClInclude> @@ -616,6 +628,9 @@ <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\AppendModule.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -640,6 +655,9 @@ <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\ColourEdit.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -691,6 +709,9 @@ <ClCompile Include="..\..\mptrack\FolderScanner.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\Globals.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -736,9 +757,6 @@ <ClCompile Include="..\..\mptrack\Modedit.cpp"> <Filter>mptrack</Filter> </ClCompile> - <ClCompile Include="..\..\mptrack\Moptions.cpp"> - <Filter>mptrack</Filter> - </ClCompile> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -757,6 +775,9 @@ <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -772,6 +793,9 @@ <ClCompile Include="..\..\mptrack\Reporting.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp"> <Filter>mptrack</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-25 20:24:50 UTC (rev 5184) @@ -380,6 +380,7 @@ <ClInclude Include="..\..\common\versionNumber.h" /> <ClInclude Include="..\..\mptrack\AboutDialog.h" /> <ClInclude Include="..\..\mptrack\AbstractVstEditor.h" /> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h" /> <ClInclude Include="..\..\mptrack\AutoSaver.h" /> <ClInclude Include="..\..\mptrack\Autotune.h" /> <ClInclude Include="..\..\mptrack\CImageListEx.h" /> @@ -389,6 +390,7 @@ <ClInclude Include="..\..\mptrack\Childfrm.h" /> <ClInclude Include="..\..\mptrack\CleanupSong.h" /> <ClInclude Include="..\..\mptrack\CloseMainDialog.h" /> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h" /> <ClInclude Include="..\..\mptrack\ColourEdit.h" /> <ClInclude Include="..\..\mptrack\CommandSet.h" /> <ClInclude Include="..\..\mptrack\CreditStatic.h" /> @@ -405,6 +407,7 @@ <ClInclude Include="..\..\mptrack\FadeLaws.h" /> <ClInclude Include="..\..\mptrack\FileDialog.h" /> <ClInclude Include="..\..\mptrack\FolderScanner.h" /> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h" /> <ClInclude Include="..\..\mptrack\Globals.h" /> <ClInclude Include="..\..\mptrack\InputHandler.h" /> <ClInclude Include="..\..\mptrack\KeyConfigDlg.h" /> @@ -416,19 +419,20 @@ <ClInclude Include="..\..\mptrack\Mainfrm.h" /> <ClInclude Include="..\..\mptrack\ModConvert.h" /> <ClInclude Include="..\..\mptrack\Moddoc.h" /> - <ClInclude Include="..\..\mptrack\Moptions.h" /> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h" /> <ClInclude Include="..\..\mptrack\Mpdlgs.h" /> <ClInclude Include="..\..\mptrack\Mptrack.h" /> <ClInclude Include="..\..\mptrack\Notification.h" /> <ClInclude Include="..\..\mptrack\PNG.h" /> <ClInclude Include="..\..\mptrack\PSRatioCalc.h" /> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h" /> <ClInclude Include="..\..\mptrack\PatternClipboard.h" /> <ClInclude Include="..\..\mptrack\PatternCursor.h" /> <ClInclude Include="..\..\mptrack\PatternEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\PatternFont.h" /> <ClInclude Include="..\..\mptrack\PatternGotoDialog.h" /> <ClInclude Include="..\..\mptrack\Reporting.h" /> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h" /> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h" /> <ClInclude Include="..\..\mptrack\SampleGenerator.h" /> <ClInclude Include="..\..\mptrack\ScaleEnvPointsDlg.h" /> @@ -555,6 +559,7 @@ <ClCompile Include="..\..\common\version.cpp" /> <ClCompile Include="..\..\mptrack\AboutDialog.cpp" /> <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp" /> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\AppendModule.cpp" /> <ClCompile Include="..\..\mptrack\AutoSaver.cpp" /> <ClCompile Include="..\..\mptrack\Autotune.cpp" /> @@ -563,6 +568,7 @@ <ClCompile Include="..\..\mptrack\Childfrm.cpp" /> <ClCompile Include="..\..\mptrack\CleanupSong.cpp" /> <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp" /> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\ColourEdit.cpp" /> <ClCompile Include="..\..\mptrack\CommandSet.cpp" /> <ClCompile Include="..\..\mptrack\CreditStatic.cpp" /> @@ -580,6 +586,7 @@ <ClCompile Include="..\..\mptrack\ExternalSamples.cpp" /> <ClCompile Include="..\..\mptrack\FileDialog.cpp" /> <ClCompile Include="..\..\mptrack\FolderScanner.cpp" /> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\Globals.cpp" /> <ClCompile Include="..\..\mptrack\InputHandler.cpp" /> <ClCompile Include="..\..\mptrack\KeyConfigDlg.cpp" /> @@ -595,18 +602,19 @@ <ClCompile Include="..\..\mptrack\ModConvert.cpp" /> <ClCompile Include="..\..\mptrack\Moddoc.cpp" /> <ClCompile Include="..\..\mptrack\Modedit.cpp" /> - <ClCompile Include="..\..\mptrack\Moptions.cpp" /> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp" /> <ClCompile Include="..\..\mptrack\Mpdlgs.cpp" /> <ClCompile Include="..\..\mptrack\Mpt_midi.cpp" /> <ClCompile Include="..\..\mptrack\Mptrack.cpp" /> <ClCompile Include="..\..\mptrack\PNG.cpp" /> <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp" /> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp" /> <ClCompile Include="..\..\mptrack\PatternEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\PatternFont.cpp" /> <ClCompile Include="..\..\mptrack\PatternGotoDialog.cpp" /> <ClCompile Include="..\..\mptrack\Reporting.cpp" /> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp" /> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp" /> <ClCompile Include="..\..\mptrack\SampleGenerator.cpp" /> <ClCompile Include="..\..\mptrack\ScaleEnvPointsDlg.cpp" /> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-25 20:24:50 UTC (rev 5184) @@ -116,6 +116,9 @@ <ClInclude Include="..\..\mptrack\AbstractVstEditor.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\AdvancedConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\AutoSaver.h"> <Filter>mptrack</Filter> </ClInclude> @@ -143,6 +146,9 @@ <ClInclude Include="..\..\mptrack\CloseMainDialog.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\ColorConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\ColourEdit.h"> <Filter>mptrack</Filter> </ClInclude> @@ -191,6 +197,9 @@ <ClInclude Include="..\..\mptrack\FolderScanner.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\GeneralConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\Globals.h"> <Filter>mptrack</Filter> </ClInclude> @@ -224,9 +233,6 @@ <ClInclude Include="..\..\mptrack\Moddoc.h"> <Filter>mptrack</Filter> </ClInclude> - <ClInclude Include="..\..\mptrack\Moptions.h"> - <Filter>mptrack</Filter> - </ClInclude> <ClInclude Include="..\..\mptrack\MoveFXSlotDialog.h"> <Filter>mptrack</Filter> </ClInclude> @@ -245,6 +251,9 @@ <ClInclude Include="..\..\mptrack\PSRatioCalc.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\PathConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\PatternClipboard.h"> <Filter>mptrack</Filter> </ClInclude> @@ -263,6 +272,9 @@ <ClInclude Include="..\..\mptrack\Reporting.h"> <Filter>mptrack</Filter> </ClInclude> + <ClInclude Include="..\..\mptrack\SampleConfigDlg.h"> + <Filter>mptrack</Filter> + </ClInclude> <ClInclude Include="..\..\mptrack\SampleEditorDialogs.h"> <Filter>mptrack</Filter> </ClInclude> @@ -616,6 +628,9 @@ <ClCompile Include="..\..\mptrack\AbstractVstEditor.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\AdvancedConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\AppendModule.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -640,6 +655,9 @@ <ClCompile Include="..\..\mptrack\CloseMainDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\ColorConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\ColourEdit.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -691,6 +709,9 @@ <ClCompile Include="..\..\mptrack\FolderScanner.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\GeneralConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\Globals.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -736,9 +757,6 @@ <ClCompile Include="..\..\mptrack\Modedit.cpp"> <Filter>mptrack</Filter> </ClCompile> - <ClCompile Include="..\..\mptrack\Moptions.cpp"> - <Filter>mptrack</Filter> - </ClCompile> <ClCompile Include="..\..\mptrack\MoveFXSlotDialog.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -757,6 +775,9 @@ <ClCompile Include="..\..\mptrack\PSRatioCalc.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\PathConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\PatternClipboard.cpp"> <Filter>mptrack</Filter> </ClCompile> @@ -772,6 +793,9 @@ <ClCompile Include="..\..\mptrack\Reporting.cpp"> <Filter>mptrack</Filter> </ClCompile> + <ClCompile Include="..\..\mptrack\SampleConfigDlg.cpp"> + <Filter>mptrack</Filter> + </ClCompile> <ClCompile Include="..\..\mptrack\SampleEditorDialogs.cpp"> <Filter>mptrack</Filter> </ClCompile> Modified: trunk/OpenMPT/common/mptPathString.h =================================================================== --- trunk/OpenMPT/common/mptPathString.h 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/common/mptPathString.h 2015-05-25 20:24:50 UTC (rev 5184) @@ -96,7 +96,9 @@ PathString GetPath() const; // Drive + Dir, e.g. "C:\OpenMPT\" PathString GetFileName() const; // File name without extension, e.g. "mptrack" PathString GetFileExt() const; // Extension including dot, e.g. ".exe" - PathString GetFullFileName() const; // File name + extension, e.g. "mptrack.exe"+ + PathString GetFullFileName() const; // File name + extension, e.g. "mptrack.exe" + + size_t Length() const { return path.size(); } // Verify if this path represents a valid directory on the file system. bool IsDirectory() const { return ::PathIsDirectoryW(path.c_str()) != FALSE; } Added: trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp (rev 0) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp 2015-05-25 20:24:50 UTC (rev 5184) @@ -0,0 +1,140 @@ +/* + * AdvancedConfigDlg.cpp + * --------------------- + * Purpose: Implementation of the advanced settings dialog. + * 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 "Mainfrm.h" +#include "AdvancedConfigDlg.h" +#include "Settings.h" +#include "dlg_misc.h" + +#if defined(MPT_SETTINGS_CACHE) + +OPENMPT_NAMESPACE_BEGIN + +BEGIN_MESSAGE_MAP(COptionsAdvanced, CPropertyPage) + ON_LBN_DBLCLK(IDC_LIST4, OnOptionDblClick) + ON_EN_CHANGE(IDC_EDIT1, OnFindStringChanged) +END_MESSAGE_MAP() + +void COptionsAdvanced::DoDataExchange(CDataExchange* pDX) +//------------------------------------------------------- +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CModTypeDlg) + DDX_Control(pDX, IDC_LIST4, m_List); + //}}AFX_DATA_MAP +} + + +static CString FormatSetting(const SettingPath &path, const SettingValue &val) +//---------------------------------------------------------------------------- +{ + return mpt::ToCString(path.FormatAsString() + MPT_USTRING(" = ") + val.FormatAsString()); +} + + +BOOL COptionsAdvanced::PreTranslateMessage(MSG *msg) +//-------------------------------------------------- +{ + if(msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) + { + OnOptionDblClick(); + return TRUE; + } + return FALSE; +} + + +BOOL COptionsAdvanced::OnInitDialog() +//----------------------------------- +{ + CPropertyPage::OnInitDialog(); + ReInit(); + return TRUE; +} + + +void COptionsAdvanced::ReInit() +//----------------------------- +{ + m_List.SetRedraw(FALSE); + m_List.ResetContent(); + m_IndexToPath.clear(); + CString findStr; + GetDlgItemText(IDC_EDIT1, findStr); + findStr.MakeLower(); + for(SettingsContainer::SettingsMap::const_iterator it = theApp.GetSettings().begin(); it != theApp.GetSettings().end(); ++it) + { + CString str = FormatSetting(it->first, it->second); + bool addString = true; + if(!findStr.IsEmpty()) + { + CString strLower = str; + addString = strLower.MakeLower().Find(findStr) >= 0; + } + if(addString) + { + int index = m_List.AddString(str); + m_IndexToPath[index] = it->first; + } + } + m_List.SetRedraw(TRUE); + m_List.Invalidate(FALSE); +} + + +void COptionsAdvanced::OnOK() +//--------------------------- +{ + CPropertyPage::OnOK(); +} + + +BOOL COptionsAdvanced::OnSetActive() +//---------------------------------- +{ + ReInit(); + CMainFrame::m_nLastOptionsPage = OPTIONS_PAGE_ADVANCED; + return CPropertyPage::OnSetActive(); +} + + +void COptionsAdvanced::OnOptionDblClick() +//--------------------------------------- +{ + const int index = m_List.GetCurSel(); + if(m_IndexToPath.find(index) == m_IndexToPath.end()) + { + return; + } + const SettingPath path = m_IndexToPath[index]; + SettingValue val = theApp.GetSettings().GetMap().find(path)->second; + if(val.GetType() == SettingTypeBool) + { + val = !val.as<bool>(); + } else + { + CInputDlg inputDlg(this, mpt::ToCString(path.FormatAsString()), mpt::ToCString(val.FormatValueAsString())); + if(inputDlg.DoModal() != IDOK) + { + return; + } + val.SetFromString(inputDlg.resultString); + } + theApp.GetSettings().Write(path, val); + m_List.DeleteString(index); + m_List.InsertString(index, FormatSetting(path, val)); + m_List.SetCurSel(index); + OnSettingsChanged(); +} + +OPENMPT_NAMESPACE_END + +#endif // MPT_SETTINGS_CACHE Property changes on: trunk/OpenMPT/mptrack/AdvancedConfigDlg.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/AdvancedConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.h (rev 0) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.h 2015-05-25 20:24:50 UTC (rev 5184) @@ -0,0 +1,45 @@ +/* + * AdvancedConfigDlg.h + * ------------------- + * Purpose: Implementation of the advanced settings dialog. + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + +#if defined(MPT_SETTINGS_CACHE) + +OPENMPT_NAMESPACE_BEGIN + +//========================================== +class COptionsAdvanced: public CPropertyPage +//========================================== +{ +protected: + CListBox m_List; + std::map<int, SettingPath> m_IndexToPath; + +public: + COptionsAdvanced():CPropertyPage(IDD_OPTIONS_ADVANCED) {} + +protected: + virtual BOOL OnInitDialog(); + virtual void OnOK(); + virtual BOOL OnSetActive(); + virtual void DoDataExchange(CDataExchange* pDX); + virtual BOOL PreTranslateMessage(MSG *msg); + afx_msg void OnOptionDblClick(); + afx_msg void OnSettingsChanged() { SetModified(TRUE); } + afx_msg void OnFindStringChanged() { ReInit(); } + + void ReInit(); + + DECLARE_MESSAGE_MAP(); +}; + +OPENMPT_NAMESPACE_END + +#endif // MPT_SETTINGS_CACHE Property changes on: trunk/OpenMPT/mptrack/AdvancedConfigDlg.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/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2015-05-25 20:24:50 UTC (rev 5184) @@ -9,11 +9,10 @@ #include "stdafx.h" -#include "mptrack.h" -#include "mainfrm.h" -#include "moddoc.h" +#include "Mptrack.h" +#include "Mainfrm.h" +#include "Moddoc.h" #include "AutoSaver.h" -#include "moptions.h" #include "FileDialog.h" #include <algorithm> @@ -223,148 +222,4 @@ } -/////////////////////////////////////////////////////////////////////////////////////// -// CAutoSaverGUI dialog : AutoSaver GUI -/////////////////////////////////////////////////////////////////////////////////////// - - -IMPLEMENT_DYNAMIC(CAutoSaverGUI, CPropertyPage) -CAutoSaverGUI::CAutoSaverGUI(CAutoSaver* pAutoSaver) - : CPropertyPage(CAutoSaverGUI::IDD) -{ - m_pAutoSaver = pAutoSaver; -} - - -void CAutoSaverGUI::DoDataExchange(CDataExchange* pDX) -//---------------------------------------------------- -{ - CPropertyPage::DoDataExchange(pDX); -} - -BEGIN_MESSAGE_MAP(CAutoSaverGUI, CPropertyPage) - ON_BN_CLICKED(IDC_AUTOSAVE_BROWSE, OnBnClickedAutosaveBrowse) - ON_BN_CLICKED(IDC_AUTOSAVE_ENABLE, OnBnClickedAutosaveEnable) - ON_BN_CLICKED(IDC_AUTOSAVE_USEORIGDIR, OnBnClickedAutosaveUseorigdir) - ON_BN_CLICKED(IDC_AUTOSAVE_USECUSTOMDIR, OnBnClickedAutosaveUseorigdir) - ON_EN_UPDATE(IDC_AUTOSAVE_PATH, OnSettingsChanged) - ON_EN_UPDATE(IDC_AUTOSAVE_HISTORY, OnSettingsChanged) - ON_EN_UPDATE(IDC_AUTOSAVE_INTERVAL, OnSettingsChanged) -END_MESSAGE_MAP() - - -// CAutoSaverGUI message handlers - -BOOL CAutoSaverGUI::OnInitDialog() -//-------------------------------- -{ - CPropertyPage::OnInitDialog(); - - CheckDlgButton(IDC_AUTOSAVE_ENABLE, m_pAutoSaver->IsEnabled()?BST_CHECKED:BST_UNCHECKED); - //SetDlgItemText(IDC_AUTOSAVE_FNTEMPLATE, m_pAutoSaver->GetFilenameTemplate()); - SetDlgItemInt(IDC_AUTOSAVE_HISTORY, m_pAutoSaver->GetHistoryDepth()); //TODO - ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, m_pAutoSaver->GetPath().AsNative().c_str()); - SetDlgItemInt(IDC_AUTOSAVE_INTERVAL, m_pAutoSaver->GetSaveInterval()); - CheckDlgButton(IDC_AUTOSAVE_USEORIGDIR, m_pAutoSaver->GetUseOriginalPath()?BST_CHECKED:BST_UNCHECKED); - CheckDlgButton(IDC_AUTOSAVE_USECUSTOMDIR, m_pAutoSaver->GetUseOriginalPath()?BST_UNCHECKED:BST_CHECKED); - - //enable/disable stuff as appropriate - OnBnClickedAutosaveEnable(); - OnBnClickedAutosaveUseorigdir(); - - return TRUE; -} - - -void CAutoSaverGUI::OnOK() -//------------------------ -{ - WCHAR tempPath[MAX_PATH]; - m_pAutoSaver->SetEnabled(IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE) != BST_UNCHECKED); - m_pAutoSaver->SetHistoryDepth(GetDlgItemInt(IDC_AUTOSAVE_HISTORY)); - m_pAutoSaver->SetSaveInterval(GetDlgItemInt(IDC_AUTOSAVE_INTERVAL)); - m_pAutoSaver->SetUseOriginalPath(IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR) == BST_CHECKED); - ::GetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, tempPath, CountOf(tempPath)); - mpt::PathString path = mpt::PathString::FromNative(tempPath); - if(!path.empty() && !path.HasTrailingSlash()) - { - path += MPT_PATHSTRING("\\"); - } - m_pAutoSaver->SetPath(path); - - CPropertyPage::OnOK(); -} - -void CAutoSaverGUI::OnBnClickedAutosaveBrowse() -//--------------------------------------------- -{ - WCHAR szPath[MAX_PATH] = L""; - ::GetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, szPath, CountOf(szPath)); - - BrowseForFolder dlg(mpt::PathString::FromNative(szPath), TEXT("Select a folder to store autosaved files in...")); - if(dlg.Show(this)) - { - ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, dlg.GetDirectory().AsNative().c_str()); - OnSettingsChanged(); - } -} - - -void CAutoSaverGUI::OnBnClickedAutosaveEnable() -//--------------------------------------------- -{ - BOOL enabled = IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE); - GetDlgItem(IDC_AUTOSAVE_INTERVAL)->EnableWindow(enabled); - GetDlgItem(IDC_AUTOSAVE_HISTORY)->EnableWindow(enabled); - GetDlgItem(IDC_AUTOSAVE_USEORIGDIR)->EnableWindow(enabled); - GetDlgItem(IDC_AUTOSAVE_USECUSTOMDIR)->EnableWindow(enabled); - GetDlgItem(IDC_AUTOSAVE_PATH)->EnableWindow(enabled); - GetDlgItem(IDC_AUTOSAVE_BROWSE)->EnableWindow(enabled); - OnSettingsChanged(); - return; -} - -void CAutoSaverGUI::OnBnClickedAutosaveUseorigdir() -//------------------------------------------------- -{ - if (IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE)) - { - BOOL enabled = IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR); - GetDlgItem(IDC_AUTOSAVE_PATH)->EnableWindow(!enabled); - GetDlgItem(IDC_AUTOSAVE_BROWSE)->EnableWindow(!enabled); - OnSettingsChanged(); - } - return; -} - -void CAutoSaverGUI::OnSettingsChanged() -//------------------------------------- -{ - SetModified(TRUE); -} - -BOOL CAutoSaverGUI::OnSetActive() -//-------------------------------- -{ - CMainFrame::m_nLastOptionsPage = OPTIONS_PAGE_AUTOSAVE; - return CPropertyPage::OnSetActive(); -} - -BOOL CAutoSaverGUI::OnKillActive() -//-------------------------------- -{ - WCHAR szPath[MAX_PATH] = L""; - ::GetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, szPath, CountOf(szPath)); - - if (!::PathIsDirectoryW(szPath) && IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE) && !IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR)) - { - Reporting::Error("Backup path does not exist."); - GetDlgItem(IDC_AUTOSAVE_PATH)->SetFocus(); - return 0; - } - - return CPropertyPage::OnKillActive(); -} - - OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/AutoSaver.h =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.h 2015-05-25 20:12:50 UTC (rev 5183) +++ trunk/OpenMPT/mptrack/AutoSaver.h 2015-05-25 20:24:50 UTC (rev 5184) @@ -64,38 +64,4 @@ }; -// CAutoSaverGUI dialog - -class CAutoSaverGUI : public CPropertyPage -{ - DECLARE_DYNAMIC(CAutoSaverGUI) - -public: - CAutoSaverGUI(CAutoSaver* pAutoSaver); - -// Dialog Data - enum { IDD = IDD_OPTIONS_AUTOSAVE }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - - DECLARE_MESSAGE_MAP() -public: - virtual void OnOK(); - virtual BOOL OnKillActive(); - -private: - CAutoSaver *m_pAutoSaver; - -public: - afx_msg void OnBnClickedAutosaveBrowse(); - virtual BOOL OnInitDialog(); - afx_msg void OnBnClickedAutosaveEnable(); - afx_msg void OnBnClickedAutosaveUseorigdir(); - void OnSettingsChanged(); - BOOL OnSetActive(); - -}; - - OPENMPT_NAMESPACE_END Added: trunk/OpenMPT/mptrack/ColorConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ColorConfigDlg.cpp (rev 0) +++ trunk/OpenMPT/mptrack/ColorConfigDlg.cpp 2015-05-25 20:24:50 UTC (rev 5184) @@ -0,0 +1,667 @@ +/* + * ColorConfigDlg.cpp + * ------------------ + * Purpose: Implementation of the color setup dialog. + * 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 "Mainfrm.h" +#include "ColorConfigDlg.h" +#include "Settings.h" +#include "FileDialog.h" +#include "../common/StringFixer.h" + + +OPENMPT_NAMESPACE_BEGIN + +static const struct ColorDescriptions +{ + const char *name; + int previewImage; + uint32 colorIndex1, colorIndex2, colorIndex3; + const char *descText1, *descText2, *descText3; +} colorDefs[] = +{ + {"Pattern Editor", 0, MODCOLOR_BACKNORMAL, MODCOLOR_TEXTNORMAL, MODCOLOR_BACKHILIGHT, "Background:", "Foreground:", "Highlighted:"}, + {"Active Row", 0, MODCOLOR_BACKCURROW, MODCOLOR_TEXTCURROW, 0, "Background:", "Foreground:", NULL}, + {"Pattern Selection",0, MODCOLOR_BACKSELECTED, MODCOLOR_TEXTSELECTED, 0, "Background:", "Foreground:", NULL}, + {"Play Cursor", 0, MODCOLOR_BACKPLAYCURSOR, MODCOLOR_TEXTPLAYCURSOR, 0, "Background:", "Foreground:", NULL}, + {"Note Highlight", 0, MODCOLOR_NOTE, MODCOLOR_INSTRUMENT, MODCOLOR_VOLUME, "Note:", "Instrument:", "Volume:"}, + {"Effect Highlight",0, MODCOLOR_PANNING, MODCOLOR_PITCH, MODCOLOR_GLOBALS, "Panning Effects:", "Pitch Effects:", "Global Effects:"}, + {"Invalid Commands",0, MODCOLOR_DODGY_COMMANDS, 0, 0, "Invalid Note:", NULL, NULL}, + {"Channel Separator",0, MODCOLOR_SEPHILITE, MODCOLOR_SEPFACE, MODCOLOR_SEPSHADOW, "Highlight:", "Face:", "Shadow:"}, + {"Next/Prev Pattern",0, MODCOLOR_BLENDCOLOR, 0, 0, "Blend Colour:", NULL, NULL}, + {"Sample Editor", 1, MODCOLOR_SAMPLE, MODCOLOR_BACKSAMPLE, MODCOLOR_SAMPLESELECTED, "Sample Data:", "Background:", "Selection:"}, + {"Instrument Editor",2, MODCOLOR_ENVELOPES, MODCOLOR_BACKENV, 0, "Envelopes:", "Background:", NULL}, + {"VU-Meters", 0, MODCOLOR_VUMETER_HI, MODCOLOR_VUMETER_MED, MODCOLOR_VUMETER_LO, "Hi:", "Med:", "Lo:"} +}; + +#define PREVIEWBMP_WIDTH 88 +#define PREVIEWBMP_HEIGHT 39 + + +BEGIN_MESSAGE_MAP(COptionsColors, CPropertyPage) + ON_WM_DRAWITEM() + ON_CBN_SELCHANGE(IDC_COMBO1, OnColorSelChanged) + ON_CBN_SELCHANGE(IDC_COMBO2, OnSettingsChanged) + ON_EN_CHANGE(IDC_PRIMARYHILITE, OnSettingsChanged) + ON_EN_CHANGE(IDC_SECONDARYHILITE, OnSettingsChanged) + ON_COMMAND(IDC_BUTTON1, OnSelectColor1) + ON_COMMAND(IDC_BUTTON2, OnSelectColor2) + ON_COMMAND(IDC_BUTTON3, OnSelectColor3) + ON_COMMAND(IDC_BUTTON5, OnPresetMPT) + ON_COMMAND(IDC_BUTTON6, OnPresetFT2) + ON_COMMAND(IDC_BUTTON7, OnPresetIT) + ON_COMMAND(IDC_BUTTON8, OnPresetBuzz) + ON_COMMAND(IDC_BUTTON9, OnChoosePatternFont) + ON_COMMAND(IDC_BUTTON10, OnChooseCommentFont) + ON_COMMAND(IDC_LOAD_COLORSCHEME, OnLoadColorScheme) + ON_COMMAND(IDC_SAVE_COLORSCHEME, OnSaveColorScheme) + ON_COMMAND(IDC_CHECK1, OnSettingsChanged) + ON_COMMAND(IDC_CHECK2, OnPreviewChanged) + ON_COMMAND(IDC_CHECK3, OnSettingsChanged) + ON_COMMAND(IDC_CHECK4, OnPreviewChanged) +END_MESSAGE_MAP() + + +void COptionsColors::DoDataExchange(CDataExchange* pDX) +//----------------------------------------------------- +{ + CPropertyPage::DoDataExchange(pDX); + //{{AFX_DATA_MAP(COptionsColors) + DDX_Control(pDX, IDC_COMBO1, m_ComboItem); + DDX_Control(pDX, IDC_COMBO2, m_ComboFont); + DDX_Control(pDX, IDC_BUTTON1, m_BtnColor1); + DDX_Control(pDX, IDC_BUTTON2, m_BtnColor2); + DDX_Control(pDX, IDC_BUTTON3, m_BtnColor3); + DDX_Control(pDX, IDC_BUTTON4, m_BtnPreview); + DDX_Control(pDX, IDC_TEXT1, m_TxtColor1); + DDX_Control(pDX, IDC_TEXT2, m_TxtColor2); + DDX_Control(pDX, IDC_TEXT3, m_TxtColor3); + //}}AFX_DATA_MAP +} + + +static std::string FormatFontName(const FontSetting &font) +//-------------------------------------------------------- +{ + return font.name + ", " + mpt::ToString(font.size / 10); +} + + +BOOL COptionsColors::OnInitDialog() +//--------------------------------- +{ + CPropertyPage::OnInitDialog(); + m_pPreviewDib = LoadDib(MAKEINTRESOURCE(IDB_COLORSETUP)); + MemCopy(CustomColors, TrackerSettings::Instance().rgbCustomColors); + for (... [truncated message content] |
From: <sag...@us...> - 2015-05-25 22:02:17
|
Revision: 5186 http://sourceforge.net/p/modplug/code/5186 Author: saga-games Date: 2015-05-25 22:02:11 +0000 (Mon, 25 May 2015) Log Message: ----------- [Ref] Make hasArtistName and hasDefaultResampling members of CModSpecifications instead of distinguishing them by file format in the code. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/mod_specifications.cpp trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-25 21:16:02 UTC (rev 5185) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-25 22:02:11 UTC (rev 5186) @@ -271,7 +271,7 @@ const BOOL bIsNotMOD = (m_sndFile.GetType() != MOD_TYPE_MOD); const BOOL bIsNotMOD_S3M = ((bIsNotMOD) && (m_sndFile.GetType() != MOD_TYPE_S3M)); const BOOL bIsNotMOD_XM = ((bIsNotMOD) && (m_sndFile.GetType() != MOD_TYPE_XM)); - m_EditArtist.EnableWindow(bIsNotMOD_S3M); + m_EditArtist.EnableWindow(specs.hasArtistName); m_EditTempo.EnableWindow(bIsNotMOD); m_SpinTempo.EnableWindow(bIsNotMOD); GetDlgItem(IDC_BUTTON1)->EnableWindow(bIsNotMOD); @@ -660,7 +660,7 @@ if(sel >= 0) { m_sndFile.m_nResampling = static_cast<ResamplingMode>(m_CbnResampling.GetItemData(sel)); - if(m_sndFile.GetType() == MOD_TYPE_MPT) + if(m_sndFile.GetModSpecifications().hasDefaultResampling) { m_modDoc.SetModified(); } Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2015-05-25 21:16:02 UTC (rev 5185) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2015-05-25 22:02:11 UTC (rev 5186) @@ -469,7 +469,7 @@ } } - if((m_SndFile.GetType() & (MOD_TYPE_XM|MOD_TYPE_IT)) && !m_SndFile.songArtist.empty()) + if(!originalSpecs->hasArtistName && !m_SndFile.songArtist.empty()) { AddToLog("Found artist name"); foundHacks = true; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 21:16:02 UTC (rev 5185) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-25 22:02:11 UTC (rev 5186) @@ -2080,7 +2080,7 @@ WRITEMODULAR(MAGIC4BE('R','P','.','.'), m_nRestartPos); } - if(m_nResampling != SRCMODE_DEFAULT && GetType() == MOD_TYPE_MPT) + if(m_nResampling != SRCMODE_DEFAULT && GetModSpecifications().hasDefaultResampling) { WRITEMODULAR(MAGIC4LE('R','S','M','P'), static_cast<uint32>(m_nResampling)); } Modified: trunk/OpenMPT/soundlib/mod_specifications.cpp =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.cpp 2015-05-25 21:16:02 UTC (rev 5185) +++ trunk/OpenMPT/soundlib/mod_specifications.cpp 2015-05-25 22:02:11 UTC (rev 5186) @@ -58,18 +58,20 @@ 200, // Max MIDI mapping directives 1, // Min Speed 255, // Max Speed - true, // Has song comments MAX_ENVPOINTS, // Envelope point count true, // Has envelope release node - " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\:#?????", // Supported Effects - " vpcdabuhlrgfe?o", // Supported Volume Column commands + true, // Has song comments true, // Has "+++" pattern true, // Has "---" pattern true, // Has restart position (order) true, // Supports plugins true, // Custom pattern time signatures true, // Pattern names + true, // Has artist name + true, // Has default resampling SongFlag(0) | SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG, // Supported song flags + " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\:#?????", // Supported Effects + " vpcdabuhlrgfe?o", // Supported Volume Column commands }; @@ -104,18 +106,20 @@ 0, // Max MIDI mapping directives 1, // Min Speed 32, // Max Speed - false, // No song comments 0, // No instrument envelopes false, // No envelope release node - " 0123456789ABCD?FF?E????????????????????", // Supported Effects - " ???????????????", // Supported Volume Column commands + false, // No song comments false, // Doesn't have "+++" pattern false, // Doesn't have "---" pattern true, // Has restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures false, // No pattern names + false, // Doesn't have artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_PT1XMODE | SONG_AMIGALIMITS | SONG_VBLANK_TIMING, // Supported song flags + " 0123456789ABCD?FF?E????????????????????", // Supported Effects + " ???????????????", // Supported Volume Column commands }; @@ -148,18 +152,20 @@ 0, // Max MIDI mapping directives 1, // Min Speed 31, // Max Speed - false, // No song comments 12, // Envelope point count false, // No envelope release node - " 0123456789ABCDRFFTE???GHK??XPL?????????", // Supported Effects - " vpcdabuhlrg????", // Supported Volume Column commands + false, // No song comments false, // Doesn't have "+++" pattern false, // Doesn't have "---" pattern true, // Has restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures false, // No pattern names + false, // Doesn't have artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_LINEARSLIDES, // Supported song flags + " 0123456789ABCDRFFTE???GHK??XPL?????????", // Supported Effects + " vpcdabuhlrg????", // Supported Volume Column commands }; // XM with MPT extensions @@ -192,18 +198,20 @@ 200, // Max MIDI mapping directives 1, // Min Speed 31, // Max Speed - true, // Has song comments 12, // Envelope point count false, // No envelope release node - " 0123456789ABCDRFFTE???GHK?YXPLZ\\?#?????", // Supported Effects - " vpcdabuhlrgfe??", // Supported Volume Column commands + true, // Has song comments false, // Doesn't have "+++" pattern false, // Doesn't have "---" pattern true, // Has restart position (order) true, // Supports plugins false, // No custom pattern time signatures true, // Pattern names + true, // Has artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_EMBEDMIDICFG, // Supported song flags + " 0123456789ABCDRFFTE???GHK?YXPLZ\\?#?????", // Supported Effects + " vpcdabuhlrgfe??", // Supported Volume Column commands }; const CModSpecifications s3m = @@ -235,18 +243,20 @@ 0, // Max MIDI mapping directives 1, // Min Speed 255, // Max Speed - false, // No song comments 0, // No instrument envelopes false, // No envelope release node - " JFEGHLKRXODB?CQATI?SMNVW?U?????????????", // Supported Effects - " vp?????????????", // Supported Volume Column commands + false, // No song comments true, // Has "+++" pattern true, // Has "---" pattern false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures false, // No pattern names + false, // Doesn't have artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_FASTVOLSLIDES | SONG_AMIGALIMITS, // Supported song flags + " JFEGHLKRXODB?CQATI?SMNVW?U?????????????", // Supported Effects + " vp?????????????", // Supported Volume Column commands }; // S3M with MPT extensions @@ -279,18 +289,20 @@ 0, // Max MIDI mapping directives 1, // Min Speed 255, // Max Speed - false, // No song comments 0, // No instrument envelopes false, // No envelope release node - " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z????????", // Supported Effects - " vp?????????????", // Supported Volume Column commands + false, // No song comments true, // Has "+++" pattern true, // Has "---" pattern false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures false, // No pattern names + false, // Doesn't have artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_FASTVOLSLIDES | SONG_AMIGALIMITS, // Supported song flags + " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z????????", // Supported Effects + " vp?????????????", // Supported Volume Column commands }; const CModSpecifications it = @@ -322,18 +334,20 @@ 0, // Max MIDI mapping directives 1, // Min Speed 255, // Max Speed - true, // Has song comments 25, // Envelope point count false, // No envelope release node - " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z????????", // Supported Effects - " vpcdab?h??gfe??", // Supported Volume Column commands + true, // Has song comments true, // Has "+++" pattern true, // Has "--" pattern false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures false, // No pattern names + false, // Doesn't have artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_LINEARSLIDES | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG, // Supported song flags + " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z????????", // Supported Effects + " vpcdab?h??gfe??", // Supported Volume Column commands }; const CModSpecifications itEx = @@ -365,18 +379,20 @@ 200, // Max MIDI mapping directives 1, // Min Speed 255, // Max Speed - true, // Has song comments 25, // Envelope point count false, // No envelope release node - " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\?#?????", // Supported Effects - " vpcdab?h??gfe??", // Supported Volume Column commands + true, // Has song comments true, // Has "+++" pattern true, // Has "---" pattern false, // Doesn't have restart position (order) true, // Supports plugins false, // No custom pattern time signatures true, // Pattern names + true, // Has artist name + false, // Doesn't have default resampling SongFlag(0) | SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG, // Supported song flags + " JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\?#?????", // Supported Effects + " vpcdab?h??gfe??", // Supported Volume Column commands }; const CModSpecifications *Collection[] = { &mptm, &mod, &s3m, &s3mEx, &xm, &xmEx, &it, &itEx }; Modified: trunk/OpenMPT/soundlib/mod_specifications.h =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.h 2015-05-25 21:16:02 UTC (rev 5185) +++ trunk/OpenMPT/soundlib/mod_specifications.h 2015-05-25 22:02:11 UTC (rev 5186) @@ -39,9 +39,9 @@ MODTYPE internalType; // Internal MODTYPE value ModCommand::NOTE noteMin; // Minimum note index (index starts from 1) ModCommand::NOTE noteMax; // Maximum note index (index starts from 1) - bool hasNoteCut; // True if format has notecut. - bool hasNoteOff; // True if format has noteoff. - bool hasNoteFade; // True if format has notefade. + bool hasNoteCut : 1; // True if format has note cut (^^). + bool hasNoteOff : 1; // True if format has note off (==). + bool hasNoteFade : 1; // True if format has note fade (~~). PATTERNINDEX patternsMax; ORDERINDEX ordersMax; SEQUENCEINDEX sequencesMax; @@ -62,18 +62,20 @@ uint8 MIDIMappingDirectivesMax; // Number of MIDI Mapping directives that the format can store (0 = none) UINT speedMin; // Minimum ticks per frame UINT speedMax; // Maximum ticks per frame - bool hasComments; // True if format has a comments field uint8 envelopePointsMax; // Maximum number of points of each envelope - bool hasReleaseNode; // Envelope release node + bool hasReleaseNode : 1; // Envelope release node + bool hasComments : 1; // True if format has a comments field + bool hasIgnoreIndex : 1; // Does "+++" pattern exist? + bool hasStopIndex : 1; // Does "---" pattern exist? + bool hasRestartPos : 1; // Format has an automatic restart order position + bool supportsPlugins : 1; // Format can store plugins + bool hasPatternSignatures : 1; // Can patterns have a custom time signature? + bool hasPatternNames : 1; // Cat patterns have a name? + bool hasArtistName : 1; // Can artist name be stored in file? + bool hasDefaultResampling : 1; // Can default resampling be saved? (if not, it can still be modified in the GUI but won't set the module as modified) + FlagSet<SongFlags>::store_type songFlags; // Supported song flags NOTE: Do not use the overloaded operator | to set these flags because this results in dynamic initialization char commands[MAX_EFFECTS + 1]; // An array holding all commands this format supports; commands that are not supported are marked with "?" char volcommands[MAX_VOLCMDS + 1]; // Ditto, but for volume column - bool hasIgnoreIndex; // Does "+++" pattern exist? - bool hasStopIndex; // Does "---" pattern exist? - bool hasRestartPos; // Format has an automatic restart order position - bool supportsPlugins; // Format can store plugins - bool hasPatternSignatures; // Can patterns have a custom time signature? - bool hasPatternNames; // Cat patterns have a name? - FlagSet<SongFlags>::store_type songFlags; // Supported song flags NOTE: Do not use the overloaded operator | to set these flags because this results in dynamic initialization FlagSet<SongFlags> GetSongFlags() const { return FlagSet<SongFlags>(songFlags); } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-26 08:38:21
|
Revision: 5189 http://sourceforge.net/p/modplug/code/5189 Author: manxorist Date: 2015-05-26 08:38:15 +0000 (Tue, 26 May 2015) Log Message: ----------- [Ref] Consolidate PluginBridge availability check und knowledge about its filename to a single place into a Component class. Modified Paths: -------------- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.h trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp trunk/OpenMPT/pluginBridge/BridgeWrapper.h Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-26 08:37:32 UTC (rev 5188) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-26 08:38:15 UTC (rev 5189) @@ -62,9 +62,6 @@ m_pModDoc = pModDoc; m_nPlugSlot = nPlugSlot; - hasBridge32 = (theApp.GetAppDirPath() + MPT_PATHSTRING("PluginBridge32.exe")).IsFile(); - hasBridge64 = (theApp.GetAppDirPath() + MPT_PATHSTRING("PluginBridge64.exe")).IsFile(); - if(m_pModDoc) { if(0 <= m_nPlugSlot && m_nPlugSlot < MAX_MIXPLUGINS) @@ -452,7 +449,11 @@ ::SetDlgItemTextW(m_hWnd, IDC_TEXT_CURRENT_VSTPLUG, pPlug->dllPath.ToWide().c_str()); if(pPlug->pluginId1 == kEffectMagic) { - bool isBridgeAvailable = (hasBridge32 && pPlug->GetDllBits() == 32) || (hasBridge64 && pPlug->GetDllBits() == 64); + bool isBridgeAvailable = + ((pPlug->GetDllBits() == 32) && IsComponentAvailable(pluginBridge32)) + || + ((pPlug->GetDllBits() == 64) && IsComponentAvailable(pluginBridge64)) + ; if(TrackerSettings::Instance().bridgeAllPlugins || !isBridgeAvailable) { m_chkBridge.EnableWindow(FALSE); Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.h =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.h 2015-05-26 08:37:32 UTC (rev 5188) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.h 2015-05-26 08:38:15 UTC (rev 5189) @@ -12,12 +12,15 @@ #pragma once #include "CTreeCtrl.h" +#include "../common/ComponentManager.h" OPENMPT_NAMESPACE_BEGIN class CModDoc; struct SNDMIXPLUGIN; struct VSTPluginLib; +class ComponentPluginBridge32; +class ComponentPluginBridge64; //==================================== class CSelectPluginDlg: public CDialog @@ -30,7 +33,8 @@ CTreeCtrlW m_treePlugins; CButton m_chkBridge, m_chkShare; std::wstring m_nameFilter; - bool hasBridge32, hasBridge64; + ComponentHandle<ComponentPluginBridge32> pluginBridge32; + ComponentHandle<ComponentPluginBridge64> pluginBridge64; HTREEITEM AddTreeItem(const WCHAR *title, int image, bool sort, HTREEITEM hParent = TVI_ROOT, LPARAM lParam = NULL); Modified: trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp =================================================================== --- trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp 2015-05-26 08:37:32 UTC (rev 5188) +++ trunk/OpenMPT/pluginBridge/BridgeWrapper.cpp 2015-05-26 08:38:15 UTC (rev 5189) @@ -24,6 +24,56 @@ OPENMPT_NAMESPACE_BEGIN +ComponentPluginBridge::ComponentPluginBridge(int bitness) + : ComponentBase(ComponentTypeBundled) + , bitness(bitness) + , availability(AvailabilityUnknown) +{ + return; +} + + +bool ComponentPluginBridge::DoInitialize() +{ + if(bitness != 32 && bitness != 64) + { + return false; + } + exeName = theApp.GetAppDirPath(); + if(bitness == 32) + { + exeName = exeName + MPT_PATHSTRING("PluginBridge32.exe"); + } + if(bitness == 64) + { + exeName = exeName + MPT_PATHSTRING("PluginBridge64.exe"); + } + // First, check for validity of the bridge executable. + if(!exeName.IsFile()) + { + availability = AvailabilityMissing; + return false; + } + WCHAR exePath[MAX_PATH]; + GetModuleFileNameW(0, exePath, CountOf(exePath)); + mpt::String::SetNullTerminator(exePath); + uint64 mptVersion = BridgeWrapper::GetFileVersion(exePath); + uint64 bridgeVersion = BridgeWrapper::GetFileVersion(exeName.AsNative().c_str()); + if(bridgeVersion != mptVersion) + { + availability = AvailabilityWrongVersion; + return false; + } + availability = AvailabilityOK; + return true; +} + + +MPT_REGISTERED_COMPONENT(ComponentPluginBridge32) + +MPT_REGISTERED_COMPONENT(ComponentPluginBridge64) + + // Check whether we need to load a 32-bit or 64-bit wrapper. BridgeWrapper::BinaryType BridgeWrapper::GetPluginBinaryType(const mpt::PathString &pluginPath) { @@ -144,28 +194,27 @@ return false; } - const mpt::PathString exeName = theApp.GetAppDirPath() + (binType == bin64Bit ? MPT_PATHSTRING("PluginBridge64.exe") : MPT_PATHSTRING("PluginBridge32.exe")); - - // First, check for validity of the bridge executable. - static uint64 mptVersion = 0; - if(!mptVersion) + const bool available = (binType == bin32Bit) ? IsComponentAvailable(pluginBridge32) : IsComponentAvailable(pluginBridge64); + if(!available) { - WCHAR exePath[_MAX_PATH]; - GetModuleFileNameW(0, exePath, CountOf(exePath)); - mpt::String::SetNullTerminator(exePath); - mptVersion = GetFileVersion(exePath); + ComponentPluginBridge::Availability availability = (binType == bin32Bit) ? pluginBridge32->GetAvailability() : pluginBridge64->GetAvailability(); + switch(availability) + { + case ComponentPluginBridge::AvailabilityMissing: + // Silently fail if bridge is missing. + throw BridgeNotFoundException(); + break; + case ComponentPluginBridge::AvailabilityWrongVersion: + throw BridgeException("The plugin bridge version does not match your OpenMPT version."); + break; + default: + throw BridgeNotFoundException(); + break; + } } - uint64 bridgeVersion = GetFileVersion(exeName.AsNative().c_str()); - if(bridgeVersion == 0) - { - // Silently fail if bridge is missing. - throw BridgeNotFoundException(); - } else if(bridgeVersion != mptVersion) - { - throw BridgeException("The plugin bridge version does not match your OpenMPT version."); - return nullptr; - } + const mpt::PathString exeName = (binType == bin32Bit) ? pluginBridge32->GetFileName() : pluginBridge64->GetFileName(); + otherPtrSize = binType; // Command-line must be a modifiable string... Modified: trunk/OpenMPT/pluginBridge/BridgeWrapper.h =================================================================== --- trunk/OpenMPT/pluginBridge/BridgeWrapper.h 2015-05-26 08:37:32 UTC (rev 5188) +++ trunk/OpenMPT/pluginBridge/BridgeWrapper.h 2015-05-26 08:38:15 UTC (rev 5189) @@ -11,11 +11,54 @@ #pragma once #include "BridgeCommon.h" +#include "../common/ComponentManager.h" OPENMPT_NAMESPACE_BEGIN struct VSTPluginLib; +class ComponentPluginBridge + : public ComponentBase +{ +public: + enum Availability + { + AvailabilityUnknown = 0, + AvailabilityOK = 1, + AvailabilityMissing = -1, + AvailabilityWrongVersion = -2, + }; +private: + const int bitness; + mpt::PathString exeName; + Availability availability; +protected: + ComponentPluginBridge(int bitness); +protected: + virtual bool DoInitialize(); +public: + Availability GetAvailability() const { return availability; } + mpt::PathString GetFileName() const { return exeName; } +}; + +class ComponentPluginBridge32 + : public ComponentPluginBridge +{ + MPT_DECLARE_COMPONENT_MEMBERS +public: + ComponentPluginBridge32() : ComponentPluginBridge(32) { } + std::string GetSettingsKey() const { return "PluginBridge32"; } +}; + +class ComponentPluginBridge64 + : public ComponentPluginBridge +{ + MPT_DECLARE_COMPONENT_MEMBERS +public: + ComponentPluginBridge64() : ComponentPluginBridge(64) { } + std::string GetSettingsKey() const { return "PluginBridge64"; } +}; + class BridgeWrapper : protected BridgeCommon { protected: @@ -25,6 +68,9 @@ ERect editRect; VstSpeakerArrangement speakers[2]; + ComponentHandle<ComponentPluginBridge32> pluginBridge32; + ComponentHandle<ComponentPluginBridge64> pluginBridge64; + public: enum BinaryType { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-26 10:50:49
|
Revision: 5191 http://sourceforge.net/p/modplug/code/5191 Author: manxorist Date: 2015-05-26 10:50:41 +0000 (Tue, 26 May 2015) Log Message: ----------- [Ref] Add new build macro MPT_BUILD_WINESUPPORT (there is no build system yet that makes any use of this). [Ref] Make common/ and sounddev/ compile in MODPLUG_TRACKER && MPT_BUILD_WINESUPPORT mode on non-Windows platforms. This boils mostly down to adding a couple of #if MPT_OS_WINDOWS around Windows-only code. Non-Windows versions can be added later on when actually required. There should be no changes to MODPLUG_TRACKER or libopenmpt builds. Modified Paths: -------------- trunk/OpenMPT/common/AudioCriticalSection.cpp trunk/OpenMPT/common/AudioCriticalSection.h trunk/OpenMPT/common/ComponentManager.cpp trunk/OpenMPT/common/ComponentManager.h trunk/OpenMPT/common/Logging.cpp trunk/OpenMPT/common/Logging.h trunk/OpenMPT/common/misc_util.cpp trunk/OpenMPT/common/misc_util.h trunk/OpenMPT/common/mptFileIO.cpp trunk/OpenMPT/common/mptFileIO.h trunk/OpenMPT/common/mptPathString.cpp trunk/OpenMPT/common/mptPathString.h trunk/OpenMPT/common/stdafx.h trunk/OpenMPT/sounddev/SoundDeviceBase.h trunk/OpenMPT/sounddev/SoundDeviceManager.cpp trunk/OpenMPT/sounddev/SoundDeviceManager.h trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp trunk/OpenMPT/sounddev/SoundDeviceUtilities.cpp trunk/OpenMPT/sounddev/SoundDeviceUtilities.h trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp trunk/OpenMPT/sounddev/SoundDeviceWaveout.h trunk/OpenMPT/soundlib/SampleFormatConverters.h Modified: trunk/OpenMPT/common/AudioCriticalSection.cpp =================================================================== --- trunk/OpenMPT/common/AudioCriticalSection.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/AudioCriticalSection.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -13,7 +13,7 @@ OPENMPT_NAMESPACE_BEGIN -#ifdef MODPLUG_TRACKER +#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) CRITICAL_SECTION g_csAudio; int g_csAudioLockCount = 0; #else Modified: trunk/OpenMPT/common/AudioCriticalSection.h =================================================================== --- trunk/OpenMPT/common/AudioCriticalSection.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/AudioCriticalSection.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -11,7 +11,7 @@ OPENMPT_NAMESPACE_BEGIN -#ifdef MODPLUG_TRACKER +#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) extern CRITICAL_SECTION g_csAudio; extern int g_csAudioLockCount; @@ -93,7 +93,6 @@ void Enter() {} void Leave() {} ~CriticalSection() {} - static void AssertUnlocked() {} }; #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/ComponentManager.cpp =================================================================== --- trunk/OpenMPT/common/ComponentManager.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/ComponentManager.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -348,7 +348,7 @@ { TComponentMap::const_iterator it = m_Components.find(componentFactory.GetName()); MPT_SHARED_PTR<IComponent> component = (it != m_Components.end()) ? it->second : componentFactory.Construct(); - ASSERT(component); + MPT_ASSERT(component); InitializeComponent(component); return component; } Modified: trunk/OpenMPT/common/ComponentManager.h =================================================================== --- trunk/OpenMPT/common/ComponentManager.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/ComponentManager.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -21,7 +21,7 @@ #if defined(MPT_WITH_DYNBIND) -#ifdef MODPLUG_TRACKER +#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) #define MPT_COMPONENT_MANAGER 1 #else #define MPT_COMPONENT_MANAGER 0 Modified: trunk/OpenMPT/common/Logging.cpp =================================================================== --- trunk/OpenMPT/common/Logging.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/Logging.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -56,10 +56,12 @@ // remove eol if already present message = mpt::String::RTrim(message, MPT_USTRING("\r\n")); #if defined(MODPLUG_TRACKER) +#if MPT_OS_WINDOWS static uint64 s_lastlogtime = 0; uint64 cur = mpt::Date::ANSI::Now(); uint64 diff = cur/10000 - s_lastlogtime; s_lastlogtime = cur/10000; +#endif #ifdef LOG_TO_FILE { static FILE * s_logfile = nullptr; @@ -70,8 +72,13 @@ if(s_logfile) { fprintf(s_logfile, mpt::ToCharset(mpt::CharsetUTF8, mpt::String::Print(MPT_USTRING("%1+%2 %3(%4): %5 [%6]\n" +#if MPT_OS_WINDOWS , mpt::Date::ANSI::ToString(cur) , mpt::ufmt::dec<6>(diff) +#else + , 0 + , 0 +#endif , mpt::ToUnicode(mpt::CharsetASCII, context.file) , context.line , message @@ -152,6 +159,8 @@ namespace Trace { +#if MPT_OS_WINDOWS + // Debugging functionality will use simple globals. bool volatile g_Enabled = false; @@ -344,6 +353,8 @@ } } +#endif // MPT_OS_WINDOWS + } // namespace Trace #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/Logging.h =================================================================== --- trunk/OpenMPT/common/Logging.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/Logging.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -108,7 +108,7 @@ -#if defined(MODPLUG_TRACKER) +#if defined(MODPLUG_TRACKER) && MPT_OS_WINDOWS namespace Trace { Modified: trunk/OpenMPT/common/misc_util.cpp =================================================================== --- trunk/OpenMPT/common/misc_util.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/misc_util.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -28,11 +28,10 @@ #if MPT_OS_WINDOWS #include <windows.h> -#endif - #if defined(MODPLUG_TRACKER) #include <mmsystem.h> #endif +#endif OPENMPT_NAMESPACE_BEGIN @@ -112,6 +111,8 @@ #if defined(MODPLUG_TRACKER) +#if MPT_OS_WINDOWS + namespace ANSI { @@ -156,6 +157,8 @@ } // namespace ANSI +#endif // MPT_OS_WINDOWS + #endif // MODPLUG_TRACKER namespace Unix @@ -259,6 +262,8 @@ namespace Util { +#if MPT_OS_WINDOWS + void MultimediaClock::Init() { m_CurrentPeriod = 0; @@ -339,6 +344,8 @@ return (uint64)timeGetTime() * (uint64)1000000; } +#endif // MPT_OS_WINDOWS + } // namespace Util #endif // MODPLUG_TRACKER @@ -464,6 +471,9 @@ { +#if MPT_OS_WINDOWS + + std::wstring CLSIDToString(CLSID clsid) //------------------------------------- { @@ -663,6 +673,9 @@ } +#endif // MPT_OS_WINDOWS + + } // namespace Util #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/misc_util.h =================================================================== --- trunk/OpenMPT/common/misc_util.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/misc_util.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -432,6 +432,8 @@ #if defined(MODPLUG_TRACKER) +#if MPT_OS_WINDOWS + namespace ANSI { // uint64 counts 100ns since 1601-01-01T00:00Z @@ -442,6 +444,8 @@ } // namespacee ANSI +#endif // MPT_OS_WINDOWS + #endif // MODPLUG_TRACKER namespace Unix @@ -764,6 +768,8 @@ namespace Util { +#if MPT_OS_WINDOWS + // RAII wrapper around timeBeginPeriod/timeEndPeriod/timeGetTime (on Windows). // This clock is monotonic, even across changing its resolution. // This is needed to synchronize time in Steinberg APIs (ASIO and VST). @@ -797,9 +803,11 @@ uint64 NowNanoseconds() const; }; +#endif // MPT_OS_WINDOWS + } // namespace Util -#endif +#endif // MODPLUG_TRACKER #ifdef ENABLE_ASM #define PROCSUPPORT_MMX 0x00001 // Processor supports MMX instructions @@ -823,6 +831,8 @@ namespace Util { +#if MPT_OS_WINDOWS + // COM CLSID<->string conversion // A CLSID string is not necessarily a standard UUID string, // it might also be a symbolic name for the interface. @@ -864,6 +874,8 @@ // Returns a new unique absolute path. mpt::PathString CreateTempFileName(const mpt::PathString &fileNamePrefix = mpt::PathString(), const mpt::PathString &fileNameExtension = MPT_PATHSTRING("tmp")); +#endif // MPT_OS_WINDOWS + } // namespace Util #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/mptFileIO.cpp =================================================================== --- trunk/OpenMPT/common/mptFileIO.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/mptFileIO.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -96,6 +96,8 @@ #ifdef MODPLUG_TRACKER +#if MPT_OS_WINDOWS + CMappedFile::~CMappedFile() //------------------------- { @@ -220,6 +222,7 @@ return lpStream; } +#endif // MPT_OS_WINDOWS #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/mptFileIO.h =================================================================== --- trunk/OpenMPT/common/mptFileIO.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/mptFileIO.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -514,6 +514,7 @@ #ifdef MODPLUG_TRACKER +#if MPT_OS_WINDOWS //=============== class CMappedFile //=============== @@ -536,6 +537,7 @@ size_t GetLength(); const void *Lock(); }; +#endif // MPT_OS_WINDOWS #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/mptPathString.cpp =================================================================== --- trunk/OpenMPT/common/mptPathString.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/mptPathString.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -35,7 +35,7 @@ #endif // MPT_OS_WINDOWS -#if defined(MODPLUG_TRACKER) +#if defined(MODPLUG_TRACKER) && MPT_OS_WINDOWS namespace mpt { @@ -197,12 +197,12 @@ #endif } -#endif -#endif +#endif // MFC +#endif // MPT_OS_WINDOWS } // namespace mpt -#endif +#endif // MODPLUG_TRACKER && MPT_OS_WINDOWS #if defined(MODPLUG_TRACKER) @@ -299,7 +299,7 @@ str.SetAt(i, SanitizeFilenameChar(str.GetAt(i))); } } -#endif +#endif // MFC #endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/common/mptPathString.h =================================================================== --- trunk/OpenMPT/common/mptPathString.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/mptPathString.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -88,7 +88,7 @@ public: -#if defined(MODPLUG_TRACKER) +#if defined(MODPLUG_TRACKER) && MPT_OS_WINDOWS void SplitPath(PathString *drive, PathString *dir, PathString *fname, PathString *ext) const; PathString GetDrive() const; // Drive letter + colon, e.g. "C:" @@ -134,7 +134,7 @@ mpt::PathString AbsolutePathToRelative(const mpt::PathString &relativeTo) const; mpt::PathString RelativePathToAbsolute(const mpt::PathString &relativeTo) const; -#endif // MODPLUG_TRACKER +#endif // MODPLUG_TRACKER && MPT_OS_WINDOWS public: Modified: trunk/OpenMPT/common/stdafx.h =================================================================== --- trunk/OpenMPT/common/stdafx.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/common/stdafx.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -16,8 +16,10 @@ #include "BuildSettings.h" -#if defined(MODPLUG_TRACKER) +#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) +#if MPT_OS_WINDOWS + #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions #include <afxcmn.h> // MFC support for Windows Common Controls @@ -30,9 +32,11 @@ #include <shlwapi.h> #include <mmsystem.h> -#endif // MODPLUG_TRACKER +#endif // MPT_OS_WINDOWS +#endif // MODPLUG_TRACKER && !MPT_BUILD_WINESUPPORT + #if MPT_COMPILER_MSVC #include <intrin.h> #endif Modified: trunk/OpenMPT/sounddev/SoundDeviceBase.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceBase.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceBase.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -141,7 +141,7 @@ virtual bool OnIdle() { return false; } SoundDevice::Settings GetSettings() const { return m_Settings; } - SampleFormat GetActualSampleFormat() const { return IsOpen() ? m_Settings.sampleFormat : SampleFormatInvalid; } + SampleFormat GetActualSampleFormat() const { return IsOpen() ? m_Settings.sampleFormat : SampleFormat(SampleFormatInvalid); } SoundDevice::BufferAttributes GetEffectiveBufferAttributes() const { return (IsOpen() && IsPlaying()) ? InternalGetEffectiveBufferAttributes() : SoundDevice::BufferAttributes(); } SoundDevice::TimeInfo GetTimeInfo() const { return m_TimeInfo; } Modified: trunk/OpenMPT/sounddev/SoundDeviceManager.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceManager.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -84,10 +84,12 @@ } #endif // NO_PORTAUDIO +#if MPT_OS_WINDOWS if(IsComponentAvailable(m_WaveOut)) { EnumerateDevices<CWaveDevice>(); } +#endif // MPT_OS_WINDOWS #ifndef NO_DSOUND // kind of deprecated by now Modified: trunk/OpenMPT/sounddev/SoundDeviceManager.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceManager.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceManager.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -48,7 +48,9 @@ const SoundDevice::AppInfo m_AppInfo; +#if MPT_OS_WINDOWS ComponentHandle<ComponentWaveOut> m_WaveOut; +#endif // MPT_OS_WINDOWS #ifndef NO_DSOUND ComponentHandle<ComponentDirectSound> m_DirectSound; #endif // NO_DSOUND Modified: trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -341,6 +341,7 @@ bool CPortaudioDevice::OpenDriverSettings() //----------------------------------------- { +#if MPT_OS_WINDOWS if(m_HostApiType != paWASAPI) { return false; @@ -356,6 +357,9 @@ } controlEXE += MPT_PATHSTRING("control.exe"); return ((int)ShellExecuteW(NULL, L"open", controlEXE.AsNative().c_str(), (hasVista ? L"/name Microsoft.Sound" : L"mmsys.cpl"), NULL, SW_SHOW) > 32); +#else // !MPT_OS_WINDOWS + return false; +#endif // MPT_OS_WINDOWS } @@ -494,8 +498,6 @@ } - - std::vector<std::pair<PaDeviceIndex, mpt::ustring> > CPortaudioDevice::EnumerateInputOnlyDevices(PaHostApiTypeId hostApiType) //--------------------------------------------------------------------------------------------------------------------------- { @@ -556,6 +558,7 @@ } +#if MPT_COMPILER_MSVC static void PortaudioLog(const char *text) //---------------------------------------- { @@ -564,6 +567,7 @@ PALOG(mpt::String::Print("PortAudio: %1", text)); } } +#endif // MPT_COMPILER_MSVC MPT_REGISTERED_COMPONENT(ComponentPortAudio) @@ -577,7 +581,9 @@ bool ComponentPortAudio::DoInitialize() { +#if MPT_COMPILER_MSVC PaUtil_SetDebugPrintFunction(PortaudioLog); +#endif // MPT_COMPILER_MSVC return (Pa_Initialize() == paNoError); } Modified: trunk/OpenMPT/sounddev/SoundDeviceUtilities.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceUtilities.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceUtilities.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -18,7 +18,9 @@ #include <algorithm> +#if MPT_OS_WINDOWS #include <mmsystem.h> +#endif // MPT_OS_WINDOWS OPENMPT_NAMESPACE_BEGIN @@ -26,7 +28,9 @@ namespace SoundDevice { - + +#if MPT_OS_WINDOWS + bool FillWaveFormatExtensible(WAVEFORMATEXTENSIBLE &WaveFormat, const SoundDevice::Settings &m_Settings) //------------------------------------------------------------------------------------------------------ { @@ -59,7 +63,11 @@ return true; } +#endif // MPT_OS_WINDOWS + +#if MPT_OS_WINDOWS + CAudioThread::CAudioThread(CSoundDeviceWithThread &SoundDevice) : m_SoundDevice(SoundDevice) //------------------------------------------------------------------------------------------ { @@ -460,7 +468,9 @@ m_AudioThread.Deactivate(); } +#endif // MPT_OS_WINDOWS + } // namespace SoundDevice Modified: trunk/OpenMPT/sounddev/SoundDeviceUtilities.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceUtilities.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceUtilities.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -15,7 +15,9 @@ #include "../common/misc_util.h" +#if MPT_OS_WINDOWS #include <mmreg.h> +#endif // MPT_OS_WINDOWS OPENMPT_NAMESPACE_BEGIN @@ -24,9 +26,13 @@ namespace SoundDevice { +#if MPT_OS_WINDOWS bool FillWaveFormatExtensible(WAVEFORMATEXTENSIBLE &WaveFormat, const SoundDevice::Settings &m_Settings); +#endif // MPT_OS_WINDOWS +#if MPT_OS_WINDOWS + class CSoundDeviceWithThread; @@ -95,7 +101,9 @@ virtual void StopFromSoundThread() = 0; }; +#endif // MPT_OS_WINDOWS + } // namespace SoundDevice Modified: trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceWaveout.cpp 2015-05-26 10:50:41 UTC (rev 5191) @@ -25,6 +25,8 @@ namespace SoundDevice { +#if MPT_OS_WINDOWS + MPT_REGISTERED_COMPONENT(ComponentWaveOut) @@ -391,7 +393,9 @@ return devices; } +#endif // MPT_OS_WINDOWS + } // namespace SoundDevice Modified: trunk/OpenMPT/sounddev/SoundDeviceWaveout.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/sounddev/SoundDeviceWaveout.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -16,7 +16,9 @@ #include "../common/ComponentManager.h" +#if MPT_OS_WINDOWS #include <MMSystem.h> +#endif // MPT_OS_WINDOWS OPENMPT_NAMESPACE_BEGIN @@ -25,6 +27,8 @@ namespace SoundDevice { +#if MPT_OS_WINDOWS + class ComponentWaveOut : public ComponentBuiltin { MPT_DECLARE_COMPONENT_MEMBERS @@ -82,7 +86,9 @@ static std::vector<SoundDevice::Info> EnumerateDevices(); }; +#endif // MPT_OS_WINDOWS + } // namespace SoundDevice Modified: trunk/OpenMPT/soundlib/SampleFormatConverters.h =================================================================== --- trunk/OpenMPT/soundlib/SampleFormatConverters.h 2015-05-26 08:39:41 UTC (rev 5190) +++ trunk/OpenMPT/soundlib/SampleFormatConverters.h 2015-05-26 10:50:41 UTC (rev 5191) @@ -11,10 +11,10 @@ #pragma once -OPENMPT_NAMESPACE_BEGIN +#include "../common/Endianness.h" -struct ModSample; +OPENMPT_NAMESPACE_BEGIN // Byte offsets, from lowest significant to highest significant byte (for various functor template parameters) @@ -882,6 +882,10 @@ +#if defined(LIBOPENMPT_BUILD) || (defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT)) + +struct ModSample; + ////////////////////////////////////////////////////// // Actual sample conversion functions @@ -1138,5 +1142,7 @@ } } +#endif + OPENMPT_NAMESPACE_END This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-26 15:29:15
|
Revision: 5192 http://sourceforge.net/p/modplug/code/5192 Author: saga-games Date: 2015-05-26 15:29:09 +0000 (Tue, 26 May 2015) Log Message: ----------- [Fix] Changing the default artist name didn't set the settings dialog as modified. [Reg] No longer allow a tempo of 256+ BPM in IT files (except for legacy files of course) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_gen.h trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-26 10:50:41 UTC (rev 5191) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-26 15:29:09 UTC (rev 5192) @@ -93,31 +93,17 @@ // Song Title m_EditTitle.SetLimitText(specs.modNameLengthMax); -// -> CODE#0016 -// -> DESC="default tempo update" -// m_SpinTempo.SetRange(32, 255); // 255 bpm max - - if(m_sndFile.GetType() & MOD_TYPE_S3M) - { - // S3M HACK: ST3 will ignore speed 255, even though it can be used with Axx. - m_SpinSpeed.SetRange(1, 254); - } else - { - m_SpinSpeed.SetRange((short)specs.speedMin, (short)specs.speedMax); - } - m_SpinTempo.SetRange((short)specs.tempoMin, (short)specs.tempoMax); - -// -! BEHAVIOUR_CHANGE#0016 - m_SpinGlobalVol.SetRange(0, (short)(256 / GetGlobalVolumeFactor())); m_SpinSamplePA.SetRange(0, 2000); m_SpinVSTiVol.SetRange(0, 2000); m_SpinRestartPos.SetRange(0, 255); - m_SliderTempo.SetRange(0, specs.tempoMax - specs.tempoMin); m_SliderGlobalVol.SetRange(0, MAX_SLIDER_GLOBAL_VOL); m_SliderVSTiVol.SetRange(0, MAX_SLIDER_VSTI_VOL); m_SliderSamplePreAmp.SetRange(0, MAX_SLIDER_SAMPLE_VOL); + + m_SliderTempo.SetLineSize(1); + m_SliderTempo.SetPageSize(10); m_bEditsLocked=false; UpdateView(GeneralHint().ModType()); @@ -198,8 +184,9 @@ } newTempo /= delay; - const CModSpecifications specs = m_sndFile.GetModSpecifications(); - Limit(newTempo, specs.tempoMin, specs.tempoMax); + int tempoMin, tempoMax; + m_SpinTempo.GetRange32(tempoMin, tempoMax); + Limit(newTempo, TEMPO(tempoMin), TEMPO(tempoMax)); SetDlgItemInt(IDC_EDIT_TEMPO, newTempo, FALSE); } } @@ -211,62 +198,49 @@ if (pHint == this) return; FlagSet<HintType> hintType = hint.GetType(); const bool updateAll = hintType[HINT_MODTYPE]; + + const struct + { + const TCHAR *name; + ResamplingMode mode; + } interpolationTypes[] = + { + { _T("No Interpolation"), SRCMODE_NEAREST }, + { _T("Linear"), SRCMODE_LINEAR }, + { _T("Cubic Spline"), SRCMODE_SPLINE }, + { _T("Polyphase"), SRCMODE_POLYPHASE }, + { _T("XMMS-ModPlug"), SRCMODE_FIRFILTER }, + }; + if (hintType == HINT_MPTOPTIONS || updateAll) { m_CbnResampling.ResetContent(); - const struct - { - const TCHAR *name; - ResamplingMode mode; - } interpolationTypes[] = - { - { _T("No Interpolation"), SRCMODE_NEAREST }, - { _T("Linear"), SRCMODE_LINEAR }, - { _T("Cubic Spline"), SRCMODE_SPLINE }, - { _T("Polyphase"), SRCMODE_POLYPHASE }, - { _T("XMMS-ModPlug"), SRCMODE_FIRFILTER }, - }; m_CbnResampling.SetItemData(m_CbnResampling.AddString(_T("Default (") + CString(interpolationTypes[TrackerSettings::Instance().ResamplerMode].name) + _T(")")), SRCMODE_DEFAULT); - int selection = 0; for(int i = 0; i < CountOf(interpolationTypes); i++) { - if(m_sndFile.m_nResampling == interpolationTypes[i].mode) selection = i + 1; m_CbnResampling.SetItemData(m_CbnResampling.AddString(interpolationTypes[i].name), interpolationTypes[i].mode); } - - m_CbnResampling.SetCurSel(selection); m_CbnResampling.Invalidate(FALSE); } - if (updateAll || (hint.GetCategory() == HINTCAT_SEQUENCE && hintType[HINT_MODSEQUENCE])) - { - // Set max valid restart position - m_SpinRestartPos.SetRange32(0, m_sndFile.Order.GetLengthTailTrimmed() - 1); - } - if (updateAll || (hint.GetCategory() == HINTCAT_GENERAL && hintType[HINT_MODGENERAL])) - { - if (!m_bEditsLocked) - { - m_EditTitle.SetWindowText(m_sndFile.GetTitle().c_str()); - ::SetWindowTextW(m_EditArtist.m_hWnd, mpt::ToWide(m_sndFile.songArtist).c_str()); - SetDlgItemInt(IDC_EDIT_TEMPO, m_sndFile.m_nDefaultTempo, FALSE); - SetDlgItemInt(IDC_EDIT_SPEED, m_sndFile.m_nDefaultSpeed, FALSE); - SetDlgItemInt(IDC_EDIT_GLOBALVOL, m_sndFile.m_nDefaultGlobalVolume / GetGlobalVolumeFactor(), FALSE); - SetDlgItemInt(IDC_EDIT_RESTARTPOS, m_sndFile.m_nRestartPos, FALSE); - SetDlgItemInt(IDC_EDIT_VSTIVOL, m_sndFile.m_nVSTiVolume, FALSE); - SetDlgItemInt(IDC_EDIT_SAMPLEPA, m_sndFile.m_nSamplePreAmp, FALSE); - } - m_SliderGlobalVol.SetPos(MAX_SLIDER_GLOBAL_VOL-m_sndFile.m_nDefaultGlobalVolume); - m_SliderVSTiVol.SetPos(MAX_SLIDER_VSTI_VOL-m_sndFile.m_nVSTiVolume); - m_SliderSamplePreAmp.SetPos(MAX_SLIDER_SAMPLE_VOL-m_sndFile.m_nSamplePreAmp); - m_SliderTempo.SetPos(m_sndFile.GetModSpecifications().tempoMax - m_sndFile.m_nDefaultTempo); - } - if (updateAll) { CModSpecifications specs = m_sndFile.GetModSpecifications(); - m_SpinTempo.SetRange(specs.tempoMin, specs.tempoMax); - m_SliderTempo.SetRange(0, specs.tempoMax - specs.tempoMin); + + // S3M HACK: ST3 will ignore speed 255, even though it can be used with Axx. + if(m_sndFile.GetType() == MOD_TYPE_S3M) + m_SpinSpeed.SetRange32(1, 254); + else + m_SpinSpeed.SetRange32(specs.speedMin, specs.speedMax); + + TEMPO tempoMin = specs.tempoMin; + tempoMax = specs.tempoMax; + // IT Hack: There are legacy OpenMPT-made ITs out there which use a higher default speed than 255. + // Changing the upper tempo limit in the mod specs would break them, so do it here instead. + if(m_sndFile.GetType() == MOD_TYPE_IT && m_sndFile.m_nDefaultTempo <= 255) + tempoMax = 255; + m_SliderTempo.SetRange(0, tempoMax - tempoMin); + m_SpinTempo.SetRange(tempoMin, tempoMax); const BOOL bIsNotMOD = (m_sndFile.GetType() != MOD_TYPE_MOD); const BOOL bIsNotMOD_S3M = ((bIsNotMOD) && (m_sndFile.GetType() != MOD_TYPE_S3M)); @@ -307,7 +281,40 @@ wsprintf(s, _T("%s, %d channel%s"), modType, m_sndFile.GetNumChannels(), (m_sndFile.GetNumChannels() != 1) ? _T("s") : _T("")); m_BtnModType.SetWindowText(s); } - CheckDlgButton(IDC_CHECK_LOOPSONG, (TrackerSettings::Instance().gbLoopSong) ? TRUE : FALSE); + + if (updateAll || (hint.GetCategory() == HINTCAT_SEQUENCE && hintType[HINT_MODSEQUENCE])) + { + // Set max valid restart position + m_SpinRestartPos.SetRange32(0, m_sndFile.Order.GetLengthTailTrimmed() - 1); + } + if (updateAll || (hint.GetCategory() == HINTCAT_GENERAL && hintType[HINT_MODGENERAL])) + { + if (!m_bEditsLocked) + { + m_EditTitle.SetWindowText(m_sndFile.GetTitle().c_str()); + ::SetWindowTextW(m_EditArtist.m_hWnd, mpt::ToWide(m_sndFile.songArtist).c_str()); + SetDlgItemInt(IDC_EDIT_TEMPO, m_sndFile.m_nDefaultTempo, FALSE); + SetDlgItemInt(IDC_EDIT_SPEED, m_sndFile.m_nDefaultSpeed, FALSE); + SetDlgItemInt(IDC_EDIT_GLOBALVOL, m_sndFile.m_nDefaultGlobalVolume / GetGlobalVolumeFactor(), FALSE); + SetDlgItemInt(IDC_EDIT_RESTARTPOS, m_sndFile.m_nRestartPos, FALSE); + SetDlgItemInt(IDC_EDIT_VSTIVOL, m_sndFile.m_nVSTiVolume, FALSE); + SetDlgItemInt(IDC_EDIT_SAMPLEPA, m_sndFile.m_nSamplePreAmp, FALSE); + } + + m_SliderGlobalVol.SetPos(MAX_SLIDER_GLOBAL_VOL - m_sndFile.m_nDefaultGlobalVolume); + m_SliderVSTiVol.SetPos(MAX_SLIDER_VSTI_VOL - m_sndFile.m_nVSTiVolume); + m_SliderSamplePreAmp.SetPos(MAX_SLIDER_SAMPLE_VOL - m_sndFile.m_nSamplePreAmp); + m_SliderTempo.SetPos(tempoMax - m_sndFile.m_nDefaultTempo); + + int srcMode = 0; + for(int i = 0; i < CountOf(interpolationTypes); i++) + { + if(m_sndFile.m_nResampling == interpolationTypes[i].mode) srcMode = i + 1; + } + m_CbnResampling.SetCurSel(srcMode); + } + + CheckDlgButton(IDC_CHECK_LOOPSONG, (TrackerSettings::Instance().gbLoopSong) ? TRUE : FALSE); if (hintType[HINT_MPTOPTIONS]) { m_VuMeterLeft.InvalidateRect(NULL, FALSE); @@ -327,9 +334,7 @@ if (pSlider==&m_SliderTempo) { - int min, max; - m_SpinTempo.GetRange(min, max); - const UINT tempo = max - m_SliderTempo.GetPos(); + const TEMPO tempo = tempoMax - TEMPO(m_SliderTempo.GetPos()); if ((tempo >= m_sndFile.GetModSpecifications().tempoMin) && (tempo <= m_sndFile.GetModSpecifications().tempoMax) && (tempo != m_sndFile.m_nDefaultTempo)) { m_sndFile.m_nDefaultTempo = tempo; @@ -423,8 +428,10 @@ m_EditTempo.GetWindowText(s, sizeof(s)); if (s[0]) { - UINT n = atoi(s); - n = Clamp(n, m_sndFile.GetModSpecifications().tempoMin, m_sndFile.GetModSpecifications().tempoMax); + TEMPO n = TEMPO(atoi(s)); + int tempoMin, tempoMax; + m_SpinTempo.GetRange32(tempoMin, tempoMax); + n = Clamp(n, TEMPO(tempoMin), TEMPO(tempoMax)); if (n != m_sndFile.m_nDefaultTempo) { m_bEditsLocked=true; @@ -663,6 +670,7 @@ if(m_sndFile.GetModSpecifications().hasDefaultResampling) { m_modDoc.SetModified(); + m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this); } } } Modified: trunk/OpenMPT/mptrack/Ctrl_gen.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.h 2015-05-26 10:50:41 UTC (rev 5191) +++ trunk/OpenMPT/mptrack/Ctrl_gen.h 2015-05-26 15:29:09 UTC (rev 5192) @@ -72,6 +72,8 @@ CSliderCtrl m_SliderTempo, m_SliderSamplePreAmp, m_SliderGlobalVol, m_SliderVSTiVol; CVuMeter m_VuMeterLeft, m_VuMeterRight; + + TEMPO tempoMax; //}}AFX_DATA //{{AFX_VIRTUAL(CCtrlGeneral) virtual BOOL OnInitDialog(); Modified: trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-05-26 10:50:41 UTC (rev 5191) +++ trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-05-26 15:29:09 UTC (rev 5192) @@ -25,6 +25,7 @@ ON_COMMAND(IDC_RADIO1, OnSettingsChanged) ON_COMMAND(IDC_RADIO2, OnSettingsChanged) ON_COMMAND(IDC_RADIO3, OnSettingsChanged) + ON_EN_CHANGE(IDC_EDIT1, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO1, OnDefaultTypeChanged) ON_CBN_SELCHANGE(IDC_COMBO2, OnTemplateChanged) ON_CBN_EDITCHANGE(IDC_COMBO2, OnTemplateChanged) Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-26 10:50:41 UTC (rev 5191) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-26 15:29:09 UTC (rev 5192) @@ -536,11 +536,14 @@ memory.state.m_nMusicTempo = 0; } } + + TEMPO tempoMin = GetModSpecifications().tempoMin, tempoMax = GetModSpecifications().tempoMax; + if(IsCompatibleMode(TRK_ALLTRACKERS)) // clamp tempo correctly in compatible mode + { + tempoMax = 255; + } + Limit(memory.state.m_nMusicTempo, tempoMin, tempoMax); } - if(IsCompatibleMode(TRK_ALLTRACKERS)) // clamp tempo correctly in compatible mode - memory.state.m_nMusicTempo = Clamp(memory.state.m_nMusicTempo, 32u, 255u); - else - memory.state.m_nMusicTempo = Clamp(memory.state.m_nMusicTempo, GetModSpecifications().tempoMin, GetModSpecifications().tempoMax); break; case CMD_S3MCMDEX: @@ -5024,6 +5027,7 @@ //------------------------------------------------------------ { const CModSpecifications& specs = GetModSpecifications(); + if(setAsNonModcommand) { // Set tempo from UI - ignore slide commands and such. @@ -5040,10 +5044,12 @@ else m_PlayState.m_nMusicTempo -= (param & 0x0F); + TEMPO tempoMin = GetModSpecifications().tempoMin, tempoMax = GetModSpecifications().tempoMax; if(IsCompatibleMode(TRK_ALLTRACKERS)) // clamp tempo correctly in compatible mode - m_PlayState.m_nMusicTempo = Clamp(m_PlayState.m_nMusicTempo, 32u, 255u); - else - m_PlayState.m_nMusicTempo = Clamp(m_PlayState.m_nMusicTempo, specs.tempoMin, specs.tempoMax); + { + tempoMax = 255; + } + Limit(m_PlayState.m_nMusicTempo, tempoMin, tempoMax); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-27 22:36:02
|
Revision: 5197 http://sourceforge.net/p/modplug/code/5197 Author: manxorist Date: 2015-05-27 22:35:54 +0000 (Wed, 27 May 2015) Log Message: ----------- [Ref] Repair MPT_USTRING_MODE_UTF8 compile. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp trunk/OpenMPT/unarchiver/unzip.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-26 21:16:52 UTC (rev 5196) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2015-05-27 22:35:54 UTC (rev 5197) @@ -408,7 +408,7 @@ { if (!m_EditArtist.m_hWnd || !m_EditArtist.GetModify()) return; - std::wstring artist = GetWindowTextW(m_EditArtist); + mpt::ustring artist = mpt::ToUnicode(GetWindowTextW(m_EditArtist)); if(artist != m_sndFile.songArtist) { m_EditArtist.SetModify(FALSE); Modified: trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-05-26 21:16:52 UTC (rev 5196) +++ trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-05-27 22:35:54 UTC (rev 5197) @@ -146,7 +146,7 @@ void COptionsGeneral::OnOK() //-------------------------- { - TrackerSettings::Instance().defaultArtist = GetWindowTextW(m_defaultArtist); + TrackerSettings::Instance().defaultArtist = mpt::ToUnicode(GetWindowTextW(m_defaultArtist)); TrackerSettings::Instance().defaultModType = static_cast<MODTYPE>(m_defaultFormat.GetItemData(m_defaultFormat.GetCurSel())); TrackerSettings::Instance().defaultTemplateFile = mpt::PathString::FromNative(GetWindowTextW(m_defaultTemplate)); Modified: trunk/OpenMPT/unarchiver/unzip.cpp =================================================================== --- trunk/OpenMPT/unarchiver/unzip.cpp 2015-05-26 21:16:52 UTC (rev 5196) +++ trunk/OpenMPT/unarchiver/unzip.cpp 2015-05-27 22:35:54 UTC (rev 5197) @@ -138,7 +138,7 @@ if(unzGetGlobalComment(zipFile, &commentData[0], info.size_comment) >= 0) { commentData[info.size_comment - 1] = '\0'; - comment = mpt::ToWide(mpt::CharsetCP437, &commentData[0]); + comment = mpt::ToUnicode(mpt::CharsetCP437, &commentData[0]); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-28 08:27:27
|
Revision: 5198 http://sourceforge.net/p/modplug/code/5198 Author: manxorist Date: 2015-05-28 08:27:19 +0000 (Thu, 28 May 2015) Log Message: ----------- [Ref] Remove class TrackerDirectories. TrackerDirectories got introduced back in r3074 during the conversion to the Settings framework in order to break circular dependencies between TrackerSettings and SetupPaths. These dependencies have since been refactored and removed, thus there is no need for TrackerDirectories anymore. Merge them back into class TrackerSettings. [Ref] Move the relative/absolute and portable mode handling of configured directories into its own wrapper type instead of handling all directories in own global container class. This further reduces the amount of imperative code during TrackerSettings construction and destruction. Revision Links: -------------- http://sourceforge.net/p/modplug/code/3074 Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/ExternalSamples.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/TuningDialog.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/WelcomeDialog.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/plugins/PluginManager.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1466,7 +1466,7 @@ EndWaitCursor(); if (bOk) { - TrackerDirectories::Instance().SetWorkingDirectory(fileName, DIR_INSTRUMENTS, true); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(fileName, true); ModInstrument *pIns = m_sndFile.Instruments[m_nInstrument]; if (pIns) { @@ -1732,11 +1732,11 @@ "SoundFont 2.0 Banks (*.sf2)|*.sf2;*.sbk|" "DLS Sound Banks (*.dls)|*.dls|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)) + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()) .FilterIndex(&nLastIndex); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -1791,7 +1791,7 @@ "Compressed Impulse Tracker Instruments (*.iti)|*.iti|" "Impulse Tracker Instruments with external Samples (*.iti)|*.iti|" "FastTracker II Instruments (*.xi)|*.xi||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)) + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()) .FilterIndex(&index); if(!dlg.Show(this)) return; @@ -1807,7 +1807,7 @@ if (!ok) ErrorBox(IDS_ERR_SAVEINS, this); else - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); SwitchToView(); } Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -895,7 +895,7 @@ EndWaitCursor(); if (bOk) { - TrackerDirectories::Instance().SetWorkingDirectory(fileName, DIR_SAMPLES, true); + TrackerSettings::Instance().PathSamples.SetWorkingDir(fileName, true); if (!sample.filename[0]) { mpt::PathString name, ext; @@ -1031,11 +1031,11 @@ "AIFF Files (*.aiff;*.8svx)|*.aif;*.aiff;*.iff;*.8sv;*.8svx;*.svx|" "Raw Samples (*.raw,*.snd,*.pcm)|*.raw;*.snd;*.pcm|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)) + .WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()) .FilterIndex(&nLastIndex); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) @@ -1112,7 +1112,7 @@ .ExtensionFilter("Wave File (*.wav)|*.wav|" "FLAC File (*.flac)|*.flac|" "RAW Audio (*.raw)|*.raw||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)) + .WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()) .FilterIndex(&filter); if(!dlg.Show(this)) return; @@ -1189,7 +1189,7 @@ ErrorBox(IDS_ERR_SAVESMP, this); } else { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); } SwitchToView(); } Modified: trunk/OpenMPT/mptrack/ExternalSamples.cpp =================================================================== --- trunk/OpenMPT/mptrack/ExternalSamples.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/ExternalSamples.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -105,11 +105,11 @@ if(TrackerSettings::Instance().previewInFileDialogs) dlg.EnableAudioPreview(); if(path.empty()) - dlg.WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)); + dlg.WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()); else dlg.DefaultFilename(path); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); SetSample(smp, dlg.GetFirstFile()); modDoc.UpdateAllViews(nullptr, SampleHint(smp).Info().Names().Data()); @@ -126,10 +126,10 @@ return; } - BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES), _T("Select a folder to search for missing samples...")); + BrowseForFolder dlg(TrackerSettings::Instance().PathSamples.GetWorkingDir(), _T("Select a folder to search for missing samples...")); if(dlg.Show()) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetDirectory()); FolderScanner scan(dlg.GetDirectory(), true); mpt::PathString fileName; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1743,11 +1743,11 @@ //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ { // will also set working directory - TrackerDirectories::Instance().SetDefaultDirectory(szModDir, DIR_MODS); - TrackerDirectories::Instance().SetDefaultDirectory(szSampleDir, DIR_SAMPLES); - TrackerDirectories::Instance().SetDefaultDirectory(szInstrDir, DIR_INSTRUMENTS); - TrackerDirectories::Instance().SetDefaultDirectory(szVstDir, DIR_PLUGINS); - TrackerDirectories::Instance().SetDefaultDirectory(szPresetDir, DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathSongs.SetDefaultDir(szModDir); + TrackerSettings::Instance().PathSamples.SetDefaultDir(szSampleDir); + TrackerSettings::Instance().PathInstruments.SetDefaultDir(szInstrDir); + TrackerSettings::Instance().PathPlugins.SetDefaultDir(szVstDir); + TrackerSettings::Instance().PathPluginPresets.SetDefaultDir(szPresetDir); return TRUE; } @@ -2803,7 +2803,7 @@ pMenu->InsertMenu(firstMenu, MF_STRING | MF_BYPOSITION, ID_MRU_LIST_FIRST, _T("Recent File")); } else { - const mpt::PathString workDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS); + const mpt::PathString workDir = TrackerSettings::Instance().PathSongs.GetWorkingDir(); for(size_t i = 0; i < TrackerSettings::Instance().mruFiles.size(); i++) { Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -619,10 +619,10 @@ .DefaultExtension(defaultExtension) .DefaultFilename(defaultSaveName) .ExtensionFilter(ModTypeToFilter(m_SndFile)) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)); + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()); if(!dlg.Show()) return FALSE; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS); + TrackerSettings::Instance().PathSongs.SetWorkingDir(dlg.GetWorkingDirectory()); saveFileName = dlg.GetFirstFile(); } else @@ -1681,11 +1681,11 @@ .DefaultExtension(extension) .DefaultFilename(GetPathNameMpt().GetFileName() + MPT_PATHSTRING(".") + extension) .ExtensionFilter(encFactory->GetTraits().fileDescription + MPT_USTRING(" (*.") + extension.ToUnicode() + MPT_USTRING(")|*.") + extension.ToUnicode() + MPT_USTRING("||")) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_EXPORT)); + .WorkingDirectory(TrackerSettings::Instance().PathExport.GetWorkingDir()); if(!dlg.Show()) return; // will set default dir here because there's no setup option for export dir yet (feel free to add one...) - TrackerDirectories::Instance().SetDefaultDirectory(dlg.GetWorkingDirectory(), DIR_EXPORT, true); + TrackerSettings::Instance().PathExport.SetDefaultDir(dlg.GetWorkingDirectory(), true); mpt::PathString drive, dir, name, ext; dlg.GetFirstFile().SplitPath(&drive, &dir, &name, &ext); @@ -1966,7 +1966,7 @@ .DefaultExtension(ext) .DefaultFilename(filename) .ExtensionFilter(pattern) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)); + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()); if(!dlg.Show()) return; ScopedLogCapturer logcapturer(*this); @@ -2888,7 +2888,7 @@ //---------------------------------- { // Create template folder if doesn't exist already. - const mpt::PathString templateFolder = TrackerDirectories::Instance().GetDefaultDirectory(DIR_TEMPLATE_FILES_USER); + const mpt::PathString templateFolder = TrackerSettings::Instance().PathUserTemplates.GetDefaultDir(); if (!templateFolder.IsDirectory()) { if (!CreateDirectoryW(templateFolder.AsNative().c_str(), nullptr)) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -645,7 +645,6 @@ CTrackApp::CTrackApp() //-------------------- : m_GuiThreadId(0) - , m_pTrackerDirectories(nullptr) , m_pSettingsIniFile(nullptr) , m_pSongSettings(nullptr) , m_pSettings(nullptr) @@ -942,13 +941,12 @@ m_pSettingsIniFile = new IniFileSettingsBackend(m_szConfigFileName); m_pSettings = new SettingsContainer(m_pSettingsIniFile); - m_pTrackerDirectories = new TrackerDirectories(); m_pTrackerSettings = new TrackerSettings(*m_pSettings); // Create missing diretories - if(!TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).IsDirectory()) + if(!TrackerSettings::Instance().PathTunings.GetDefaultDir().IsDirectory()) { - CreateDirectoryW(TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING).AsNative().c_str(), 0); + CreateDirectoryW(TrackerSettings::Instance().PathTunings.GetDefaultDir().AsNative().c_str(), 0); } m_pSongSettingsIniFile = new IniFileSettingsBackend(m_szConfigDirectory + MPT_PATHSTRING("SongSettings.ini")); @@ -1151,8 +1149,6 @@ m_pComponentManagerSettings = nullptr; delete m_pTrackerSettings; m_pTrackerSettings = nullptr; - delete m_pTrackerDirectories; - m_pTrackerDirectories = nullptr; delete m_pSettings; m_pSettings = nullptr; delete m_pSettingsIniFile; @@ -1299,11 +1295,11 @@ "Wave Files (*.wav)|*.wav|" "MIDI Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" "All Files (*.*)|*.*||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_MODS)) + .WorkingDirectory(TrackerSettings::Instance().PathSongs.GetWorkingDir()) .FilterIndex(&nFilterIndex); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_MODS); + TrackerSettings::Instance().PathSongs.SetWorkingDir(dlg.GetWorkingDirectory()); files = dlg.GetFilenames(); } Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Mptrack.h 2015-05-28 08:27:19 UTC (rev 5198) @@ -28,7 +28,6 @@ class Manager; } // namespace SoundDevice class CDLSBank; -class TrackerDirectories; class TrackerSettings; class ComponentManagerSettings; @@ -204,7 +203,6 @@ IniFileSettingsBackend *m_pSettingsIniFile; SettingsContainer *m_pSettings; - TrackerDirectories *m_pTrackerDirectories; TrackerSettings *m_pTrackerSettings; IniFileSettingsBackend *m_pSongSettingsIniFile; SettingsContainer *m_pSongSettings; @@ -258,11 +256,6 @@ void GetDefaultMidiMacro(MIDIMacroConfig &cfg) const { cfg = m_MidiCfg; } void SetDefaultMidiMacro(const MIDIMacroConfig &cfg) { m_MidiCfg = cfg; } mpt::PathString GetConfigFileName() const { return m_szConfigFileName; } - TrackerDirectories & GetTrackerDirectories() - { - ASSERT(m_pTrackerDirectories); - return *m_pTrackerDirectories; - } SettingsContainer & GetSettings() { ASSERT(m_pSettings); Modified: trunk/OpenMPT/mptrack/PathConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -61,11 +61,11 @@ CPropertyPage::OnInitDialog(); // Paths - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_MODS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_MODS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_SAMPS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_SAMPLES).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_INSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_INSTRUMENTS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).AsNative().c_str()); - ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTPRESETS, TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINPRESETS).AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_MODS, TrackerSettings::Instance().PathSongs.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_SAMPS, TrackerSettings::Instance().PathSamples.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_INSTS, TrackerSettings::Instance().PathInstruments.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTS, TrackerSettings::Instance().PathPlugins.GetDefaultDir().AsNative().c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTPRESETS, TrackerSettings::Instance().PathPluginPresets.GetDefaultDir().AsNative().c_str()); // Autosave CheckDlgButton(IDC_AUTOSAVE_ENABLE, m_AutoSaver.IsEnabled() ? BST_CHECKED : BST_UNCHECKED); Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -549,10 +549,10 @@ .AllowMultiSelect() .DefaultExtension("dll") .ExtensionFilter("VST Plugins (*.dll)|*.dll||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINS)); + .WorkingDirectory(TrackerSettings::Instance().PathPlugins.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetWorkingDirectory()); CVstPluginManager *pManager = theApp.GetPluginManager(); @@ -619,10 +619,10 @@ void CSelectPluginDlg::OnScanFolder() //----------------------------------- { - BrowseForFolder dlg(TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINS), "Select a folder that should be scanned for VST plugins (including sub-folders)"); + BrowseForFolder dlg(TrackerSettings::Instance().PathPlugins.GetWorkingDir(), "Select a folder that should be scanned for VST plugins (including sub-folders)"); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetDirectory(), DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetDirectory()); VSTPluginLib *plugLib = ScanPlugins(dlg.GetDirectory(), this); UpdatePluginsList(plugLib ? plugLib->pluginId2 : 0); } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -37,16 +37,6 @@ #define OLD_SOUNDSETUP_NOBOOSTTHREADPRIORITY 0x80 -TrackerDirectories &TrackerDirectories::Instance() -//------------------------------------------------ -{ - return theApp.GetTrackerDirectories(); -} - - -const TCHAR *TrackerDirectories::m_szDirectoryToSettingsName[NUM_DIRS] = { _T("Songs_Directory"), _T("Samples_Directory"), _T("Instruments_Directory"), _T("Plugins_Directory"), _T("Plugin_Presets_Directory"), _T("Export_Directory"), _T(""), _T("") }; - - TrackerSettings &TrackerSettings::Instance() //------------------------------------------ { @@ -233,6 +223,15 @@ // Components , ComponentsLoadOnStartup(conf, "Components", "LoadOnStartup", ComponentManagerSettingsDefault().LoadOnStartup()) , ComponentsKeepLoaded(conf, "Components", "KeepLoaded", ComponentManagerSettingsDefault().KeepLoaded()) + // Paths + , PathSongs(conf, "Paths", "Songs_Directory", mpt::PathString()) + , PathSamples(conf, "Paths", "Samples_Directory", mpt::PathString()) + , PathInstruments(conf, "Paths", "Instruments_Directory", mpt::PathString()) + , PathPlugins(conf, "Paths", "Plugins_Directory", mpt::PathString()) + , PathPluginPresets(conf, "Paths", "Plugin_Presets_Directory", mpt::PathString()) + , PathExport(conf, "Paths", "Export_Directory", mpt::PathString()) + , PathTunings(theApp.GetConfigPath() + MPT_PATHSTRING("tunings\\")) + , PathUserTemplates(theApp.GetConfigPath() + MPT_PATHSTRING("TemplateModules\\")) // Default template , defaultTemplateFile(conf, "Paths", "DefaultTemplate", mpt::PathString()) , defaultArtist(conf, "Misc", "DefaultArtist", mpt::ToUnicode(mpt::CharsetLocale, std::getenv("USERNAME"))) @@ -294,19 +293,6 @@ CMainFrame::m_pAutoSaver->SetUseOriginalPath(conf.Read<bool>("AutoSave", "UseOriginalPath", CMainFrame::m_pAutoSaver->GetUseOriginalPath())); CMainFrame::m_pAutoSaver->SetPath(theApp.RelativePathToAbsolute(conf.Read<mpt::PathString>("AutoSave", "Path", CMainFrame::m_pAutoSaver->GetPath()))); // Paths - TrackerDirectories::Instance().SetDefaultDirectory(theApp.GetConfigPath() + MPT_PATHSTRING("tunings\\"), DIR_TUNING); - TrackerDirectories::Instance().SetDefaultDirectory(theApp.GetConfigPath() + MPT_PATHSTRING("TemplateModules\\"), DIR_TEMPLATE_FILES_USER); - for(size_t i = 0; i < NUM_DIRS; i++) - { - if(TrackerDirectories::Instance().m_szDirectoryToSettingsName[i][0] == '\0') - { - continue; - } - const CString settingKey = TrackerDirectories::Instance().m_szDirectoryToSettingsName[i]; - mpt::PathString path = conf.Read<mpt::PathString>(MPT_USTRING("Paths"), mpt::ToUnicode(settingKey), TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i))); - path = theApp.RelativePathToAbsolute(path); - TrackerDirectories::Instance().SetDefaultDirectory(path, static_cast<Directory>(i), false); - } m_szKbdFile = conf.Read<mpt::PathString>("Paths", "Key_Config_File", mpt::PathString()); conf.Forget("Paths", "Key_Config_File"); @@ -589,10 +575,6 @@ theApp.SetDefaultMidiMacro(macros); // Paths - for(size_t i = 0; i < NUM_DIRS; i++) - { - TrackerDirectories::Instance().m_szWorkingDirectory[i] = TrackerDirectories::Instance().m_szDefaultDirectory[i]; - } m_szKbdFile = theApp.RelativePathToAbsolute(m_szKbdFile); // Sample undo buffer size (used to be a hidden, absolute setting in MiB) @@ -912,19 +894,6 @@ conf.Write<mpt::PathString>("AutoSave", "Path", path); // Paths - for(size_t i = 0; i < NUM_DIRS; i++) - { - if(TrackerDirectories::Instance().m_szDirectoryToSettingsName[i][0] == '\0') - { - continue; - } - mpt::PathString path = TrackerDirectories::Instance().GetDefaultDirectory(static_cast<Directory>(i)); - if(theApp.IsPortableMode()) - { - path = theApp.AbsolutePathToRelative(path); - } - conf.Write<mpt::PathString>("Paths", TrackerDirectories::Instance().m_szDirectoryToSettingsName[i], path); - } // Obsolete, since we always write to Keybindings.mkb now. // Older versions of OpenMPT 1.18+ will look for this file if this entry is missing, so removing this entry after having read it is kind of backwards compatible. conf.Remove("Paths", "Key_Config_File"); @@ -1075,83 +1044,84 @@ } -// Retrieve / set default directory from given string and store it our setup variables -// If stripFilename is true, the filenameFrom parameter is assumed to be a full path including a filename. -void TrackerDirectories::SetDirectory(const mpt::PathString &filenameFrom, Directory dir, mpt::PathString (&directories)[NUM_DIRS], bool stripFilename) -//----------------------------------------------------------------------------------------------------------------------------------------------------- +DefaultAndWorkingDirectory::DefaultAndWorkingDirectory() +//------------------------------------------------------ { - mpt::PathString path; + return; +} - if(stripFilename) - { - path = filenameFrom.GetPath(); - } else - { - path = filenameFrom; - } +DefaultAndWorkingDirectory::DefaultAndWorkingDirectory(const mpt::PathString &def) +//-------------------------------------------------------------------------------- + : m_Default(def) + , m_Working(def) +{ + return; +} - if(!path.empty() && !path.HasTrailingSlash()) - { - path += MPT_PATHSTRING("\\"); - } +DefaultAndWorkingDirectory::~DefaultAndWorkingDirectory() +//------------------------------------------------------- +{ + return; +} - const mpt::PathString oldDir = directories[dir]; // for comparison - - directories[dir] = path; - - // When updating default directory, also update the working directory. - if(!path.empty() && directories == m_szDefaultDirectory) +void DefaultAndWorkingDirectory::SetDefaultDir(const mpt::PathString &filenameFrom, bool stripFilename) +//----------------------------------------------------------------------------------------------------- +{ + if(InternalSet(m_Default, filenameFrom, stripFilename) && !m_Default.empty()) { - if(oldDir != path) // update only if default directory has changed - SetWorkingDirectory(path, dir); + // When updating default directory, also update the working directory. + InternalSet(m_Working, filenameFrom, stripFilename); } } - -void TrackerDirectories::SetDefaultDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- +void DefaultAndWorkingDirectory::SetWorkingDir(const mpt::PathString &filenameFrom, bool stripFilename) +//----------------------------------------------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szDefaultDirectory, bStripFilename); + InternalSet(m_Working, filenameFrom, stripFilename); } - -void TrackerDirectories::SetWorkingDirectory(const mpt::PathString &szFilenameFrom, Directory dir, bool bStripFilename) -//--------------------------------------------------------------------------------------------------------------------- +mpt::PathString DefaultAndWorkingDirectory::GetDefaultDir() const +//--------------------------------------------------------------- { - SetDirectory(szFilenameFrom, dir, m_szWorkingDirectory, bStripFilename); + return m_Default; } - -// Get slash-terminated default directory of given type. -mpt::PathString TrackerDirectories::GetDefaultDirectory(Directory dir) const -//-------------------------------------------------------------------------- +mpt::PathString DefaultAndWorkingDirectory::GetWorkingDir() const +//--------------------------------------------------------------- { - return m_szDefaultDirectory[dir]; + return m_Working; } - -// Get slash-terminated working directory of given type. -mpt::PathString TrackerDirectories::GetWorkingDirectory(Directory dir) const -//-------------------------------------------------------------------------- +// Retrieve / set default directory from given string and store it our setup variables +// If stripFilename is true, the filenameFrom parameter is assumed to be a full path including a filename. +// Return true if the value changed. +bool DefaultAndWorkingDirectory::InternalSet(mpt::PathString &dest, const mpt::PathString &filenameFrom, bool stripFilename) +//-------------------------------------------------------------------------------------------------------------------------- { - return m_szWorkingDirectory[dir]; + mpt::PathString newPath = (stripFilename ? filenameFrom.GetPath() : filenameFrom); + if(!newPath.empty() && !newPath.HasTrailingSlash()) + { + newPath += MPT_PATHSTRING("\\"); + } + mpt::PathString oldPath = dest; + dest = newPath; + return newPath != oldPath; } - - - -TrackerDirectories::TrackerDirectories() -//-------------------------------------- +ConfigurableDirectory::ConfigurableDirectory(SettingsContainer &conf, const AnyStringLocale §ion, const AnyStringLocale &key, const mpt::PathString &def) +//----------------------------------------------------------------------------------------------------------------------------------------------------------- + : conf(conf) + , m_Setting(conf, section, key, def) { - return; + SetDefaultDir(theApp.RelativePathToAbsolute(m_Setting), false); } - -TrackerDirectories::~TrackerDirectories() -//--------------------------------------- +ConfigurableDirectory::~ConfigurableDirectory() +//--------------------------------------------- { - return; + m_Setting = theApp.IsPortableMode() ? theApp.AbsolutePathToRelative(m_Default) : m_Default; } + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-05-28 08:27:19 UTC (rev 5198) @@ -28,23 +28,7 @@ OPENMPT_NAMESPACE_BEGIN -///////////////////////////////////////////////////////////////////////// -// Default directories -enum Directory -{ - DIR_MODS = 0, - DIR_SAMPLES, - DIR_INSTRUMENTS, - DIR_PLUGINS, - DIR_PLUGINPRESETS, - DIR_EXPORT, - DIR_TUNING, - DIR_TEMPLATE_FILES_USER, - NUM_DIRS -}; - - // User-defined colors enum { @@ -387,6 +371,37 @@ return setting; } + +class DefaultAndWorkingDirectory +{ +protected: + mpt::PathString m_Default; + mpt::PathString m_Working; +public: + DefaultAndWorkingDirectory(); + DefaultAndWorkingDirectory(const mpt::PathString &def); + ~DefaultAndWorkingDirectory(); +public: + void SetDefaultDir(const mpt::PathString &filenameFrom, bool stripFilename = false); + void SetWorkingDir(const mpt::PathString &filenameFrom, bool stripFilename = false); + mpt::PathString GetDefaultDir() const; + mpt::PathString GetWorkingDir() const; +private: + bool InternalSet(mpt::PathString &dest, const mpt::PathString &filenameFrom, bool stripFilename); +}; + +class ConfigurableDirectory + : public DefaultAndWorkingDirectory +{ +protected: + SettingsContainer &conf; + Setting<mpt::PathString> m_Setting; +public: + ConfigurableDirectory(SettingsContainer &conf, const AnyStringLocale §ion, const AnyStringLocale &key, const mpt::PathString &def); + ~ConfigurableDirectory(); +}; + + //=================== class TrackerSettings //=================== @@ -554,6 +569,14 @@ // Paths + ConfigurableDirectory PathSongs; + ConfigurableDirectory PathSamples; + ConfigurableDirectory PathInstruments; + ConfigurableDirectory PathPlugins; + ConfigurableDirectory PathPluginPresets; + ConfigurableDirectory PathExport; + DefaultAndWorkingDirectory PathTunings; + DefaultAndWorkingDirectory PathUserTemplates; mpt::PathString m_szKbdFile; // Default template @@ -608,37 +631,5 @@ }; -//====================== -class TrackerDirectories -//====================== -{ - friend class TrackerSettings; -private: - // Directory Arrays (default dir + last dir) - mpt::PathString m_szDefaultDirectory[NUM_DIRS]; - mpt::PathString m_szWorkingDirectory[NUM_DIRS]; - // Directory to INI setting translation - static const TCHAR *m_szDirectoryToSettingsName[NUM_DIRS]; - -public: - - TrackerDirectories(); - ~TrackerDirectories(); - - // access to default + working directories - void SetWorkingDirectory(const mpt::PathString &filenameFrom, Directory dir, bool stripFilename = false); - mpt::PathString GetWorkingDirectory(Directory dir) const; - void SetDefaultDirectory(const mpt::PathString &filenameFrom, Directory dir, bool stripFilename = false); - mpt::PathString GetDefaultDirectory(Directory dir) const; - - static TrackerDirectories &Instance(); - -protected: - - void SetDirectory(const mpt::PathString &szFilenameFrom, Directory dir, mpt::PathString (&pDirs)[NUM_DIRS], bool bStripFilename); - -}; - - OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -631,7 +631,7 @@ FileDialog dlg = SaveFileDialog() .DefaultExtension(CTuning::s_FileExtension) .ExtensionFilter(filter) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_TUNING)) + .WorkingDirectory(TrackerSettings::Instance().PathTunings.GetWorkingDir()) .FilterIndex(&filterIndex); if(!dlg.Show(this)) return; @@ -672,11 +672,11 @@ FileDialog dlg = OpenFileDialog() .AllowMultiSelect() .ExtensionFilter(sFilter) - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_TUNING)); + .WorkingDirectory(TrackerSettings::Instance().PathTunings.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_TUNING); + TrackerSettings::Instance().PathTunings.SetWorkingDir(dlg.GetWorkingDirectory()); std::wstring sLoadReport; Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -2552,9 +2552,9 @@ FileDialog dlg = OpenFileDialog() .DefaultExtension("envelope") .ExtensionFilter("Instrument Envelopes (*.envelope)|*.envelope||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)); + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); if(GetDocument()->LoadEnvelope(m_nInstrument, m_nEnv, dlg.GetFirstFile())) { @@ -2576,9 +2576,9 @@ FileDialog dlg = SaveFileDialog() .DefaultExtension("envelope") .ExtensionFilter("Instrument Envelopes (*.envelope)|*.envelope||") - .WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_INSTRUMENTS)); + .WorkingDirectory(TrackerSettings::Instance().PathInstruments.GetWorkingDir()); if(!dlg.Show(this)) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_INSTRUMENTS); + TrackerSettings::Instance().PathInstruments.SetWorkingDir(dlg.GetWorkingDirectory()); if(!GetDocument()->SaveEnvelope(m_nInstrument, m_nEnv, dlg.GetFirstFile())) { Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -200,10 +200,14 @@ if(!IsSampleBrowser()) { - const Directory dirs[] = { DIR_SAMPLES, DIR_INSTRUMENTS, DIR_MODS }; + const mpt::PathString dirs[] = { + TrackerSettings::Instance().PathSamples.GetDefaultDir(), + TrackerSettings::Instance().PathInstruments.GetDefaultDir(), + TrackerSettings::Instance().PathSongs.GetDefaultDir() + }; for(int i = 0; i < CountOf(dirs); i++) { - m_InstrLibPath = TrackerDirectories::Instance().GetDefaultDirectory(dirs[i]); + m_InstrLibPath = dirs[i]; if(!m_InstrLibPath.empty()) { break; @@ -3228,11 +3232,11 @@ FileDialog dlg = OpenFileDialog() .ExtensionFilter("All Samples|*.wav;*.flac|All files(*.*)|*.*||"); // Only show samples that we actually can save as well. if(path.empty()) - dlg.WorkingDirectory(TrackerDirectories::Instance().GetWorkingDirectory(DIR_SAMPLES)); + dlg.WorkingDirectory(TrackerSettings::Instance().PathSamples.GetWorkingDir()); else dlg.DefaultFilename(path); if(!dlg.Show()) return; - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_SAMPLES); + TrackerSettings::Instance().PathSamples.SetWorkingDir(dlg.GetWorkingDirectory()); if(dlg.GetFirstFile() != pModDoc->GetrSoundFile().GetSamplePath(smpID)) { Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -406,7 +406,7 @@ //Log("VST plugin to host: Get Directory\n"); // Need to allocate space for path only, but I guess noone relies on this anyway. //return ToVstPtr(pVstPlugin->GetPluginFactory().szDllPath); - //return ToVstPtr(TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS)); + //return ToVstPtr(TrackerSettings::Instance().PathPlugins.GetDefaultDir()); break; // something has changed, update 'multi-fx' display @@ -524,7 +524,7 @@ } else { // Plugins are probably looking for presets...? - //workingDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + //workingDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); } FileDialog dlg = OpenFileDialog(); @@ -977,7 +977,7 @@ bool CVstPlugin::SaveProgram() //---------------------------- { - mpt::PathString defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + mpt::PathString defaultDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -999,7 +999,7 @@ if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathPluginPresets.SetWorkingDir(dlg.GetWorkingDirectory()); } bool bank = (dlg.GetExtension() == MPT_PATHSTRING("fxb")); @@ -1020,7 +1020,7 @@ bool CVstPlugin::LoadProgram(mpt::PathString fileName) //---------------------------------------------------- { - mpt::PathString defaultDir = TrackerDirectories::Instance().GetWorkingDirectory(DIR_PLUGINPRESETS); + mpt::PathString defaultDir = TrackerSettings::Instance().PathPluginPresets.GetWorkingDir(); bool useDefaultDir = !defaultDir.empty(); if(!useDefaultDir) { @@ -1040,7 +1040,7 @@ if(useDefaultDir) { - TrackerDirectories::Instance().SetWorkingDirectory(dlg.GetWorkingDirectory(), DIR_PLUGINPRESETS); + TrackerSettings::Instance().PathPluginPresets.SetWorkingDir(dlg.GetWorkingDirectory()); } fileName = dlg.GetFirstFile(); } Modified: trunk/OpenMPT/mptrack/WelcomeDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -68,9 +68,9 @@ if(!vstPath.empty()) { ::SetDlgItemTextW(m_hWnd, IDC_EDIT1, vstPath.AsNative().c_str()); - if(TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS).empty()) + if(TrackerSettings::Instance().PathPlugins.GetDefaultDir().empty()) { - TrackerDirectories::Instance().SetDefaultDirectory(vstPath, DIR_PLUGINS); + TrackerSettings::Instance().PathPlugins.SetDefaultDir(vstPath); } } else { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -1629,7 +1629,7 @@ // Load local tunings. s_pTuningsSharedLocal->SetSavefilePath( - TrackerDirectories::Instance().GetDefaultDirectory(DIR_TUNING) + TrackerSettings::Instance().PathTunings.GetDefaultDir() + MPT_PATHSTRING("local_tunings") + mpt::PathString::FromUTF8(CTuningCollection::s_FileExtension) ); Modified: trunk/OpenMPT/soundlib/plugins/PluginManager.cpp =================================================================== --- trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2015-05-27 22:35:54 UTC (rev 5197) +++ trunk/OpenMPT/soundlib/plugins/PluginManager.cpp 2015-05-28 08:27:19 UTC (rev 5198) @@ -526,7 +526,7 @@ if(!pFound && strcmp(mixPlugin.GetLibraryName(), "")) { // Try finding the plugin DLL in the plugin directory or plugin cache instead. - mpt::PathString fullPath = TrackerDirectories::Instance().GetDefaultDirectory(DIR_PLUGINS); + mpt::PathString fullPath = TrackerSettings::Instance().PathPlugins.GetDefaultDir(); if(fullPath.empty()) { fullPath = theApp.GetAppDirPath() + MPT_PATHSTRING("Plugins\\"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-28 09:23:29
|
Revision: 5199 http://sourceforge.net/p/modplug/code/5199 Author: manxorist Date: 2015-05-28 09:23:24 +0000 (Thu, 28 May 2015) Log Message: ----------- [Ref] Revert parts of r5178 and enable back all warnings in assertions. Use the less intrusive Util::TypeCanHoldValue in the one offending assertion instead. Revision Links: -------------- http://sourceforge.net/p/modplug/code/5178 Modified Paths: -------------- trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2015-05-28 08:27:19 UTC (rev 5198) +++ trunk/OpenMPT/common/typedefs.h 2015-05-28 09:23:24 UTC (rev 5199) @@ -229,8 +229,8 @@ #elif MPT_GCC_AT_LEAST(4,4,0) // GCC 4.4 does not like _Pragma inside functions. // As GCC 4.4 is one of our major compilers, we do not want a noisy build. -// Thus, just disable this warning globally. -#pragma GCC diagnostic ignored "-Wtype-limits" +// Thus, just disable this warning globally. (not required for now) +//#pragma GCC diagnostic ignored "-Wtype-limits" #endif #endif @@ -249,7 +249,7 @@ #endif #if !defined(MPT_MAYBE_CONSTANT_IF) -// MPT_MAYBE_CONSTANT_IF disables compiler warnings for conditions that may in some case be either always false or always true (useful in ASSERTions in some cases). +// MPT_MAYBE_CONSTANT_IF disables compiler warnings for conditions that may in some case be either always false or always true (this may turn out to be useful in ASSERTions in some cases). #define MPT_MAYBE_CONSTANT_IF(x) if(x) #endif @@ -314,8 +314,8 @@ #define MPT_ASSERT_ALWAYS(expr) ASSERT((expr)) #define MPT_ASSERT_ALWAYS_MSG(expr, msg) ASSERT((expr) && (msg)) #else -#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif @@ -325,18 +325,18 @@ #define MPT_ASSERT(expr) MPT_CHECKER_ASSUME(expr) #define MPT_ASSERT_MSG(expr, msg) MPT_CHECKER_ASSUME(expr) -#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif #else // !NO_ASSERTS -#define MPT_ASSERT(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS(expr) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) -#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { MPT_MAYBE_CONSTANT_IF(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS(expr) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr); } MPT_CHECKER_ASSUME(expr); } while(0) +#define MPT_ASSERT_ALWAYS_MSG(expr, msg) do { if(!(expr)) { AssertHandler(__FILE__, __LINE__, __FUNCTION__, #expr, msg); } MPT_CHECKER_ASSUME(expr); } while(0) #ifndef MPT_ASSERT_HANDLER_NEEDED #define MPT_ASSERT_HANDLER_NEEDED #endif Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-28 08:27:19 UTC (rev 5198) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-28 09:23:24 UTC (rev 5199) @@ -2014,7 +2014,7 @@ #define WRITEMODULARHEADER(code, fsize) \ { \ mpt::IO::WriteIntLE<uint32>(f, code); \ - MPT_ASSERT(fsize <= uint16_max); \ + MPT_ASSERT(Util::TypeCanHoldValue<uint16>(fsize)); \ const uint16 _size = fsize; \ mpt::IO::WriteIntLE<uint16>(f, _size); \ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-05-28 10:13:06
|
Revision: 5202 http://sourceforge.net/p/modplug/code/5202 Author: manxorist Date: 2015-05-28 10:13:01 +0000 (Thu, 28 May 2015) Log Message: ----------- [Ref] Move #define _USE_MATH_DEFINES to BuildSettings.h. [Ref] Move #define M_PI to misc_utils.h. Modified Paths: -------------- trunk/OpenMPT/common/BuildSettings.h trunk/OpenMPT/common/misc_util.h trunk/OpenMPT/mptrack/FadeLaws.h trunk/OpenMPT/soundlib/Snd_flt.cpp Modified: trunk/OpenMPT/common/BuildSettings.h =================================================================== --- trunk/OpenMPT/common/BuildSettings.h 2015-05-28 10:04:06 UTC (rev 5201) +++ trunk/OpenMPT/common/BuildSettings.h 2015-05-28 10:13:01 UTC (rev 5202) @@ -479,6 +479,8 @@ #define __STDC_CONSTANT_MACROS #define __STDC_LIMIT_MACROS +#define _USE_MATH_DEFINES + #ifndef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #endif Modified: trunk/OpenMPT/common/misc_util.h =================================================================== --- trunk/OpenMPT/common/misc_util.h 2015-05-28 10:04:06 UTC (rev 5201) +++ trunk/OpenMPT/common/misc_util.h 2015-05-28 10:13:01 UTC (rev 5202) @@ -27,6 +27,15 @@ OPENMPT_NAMESPACE_BEGIN +// cmath fixups +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923 +#endif + + bool ConvertStrToBool(const std::string &str); signed char ConvertStrToSignedChar(const std::string &str); unsigned char ConvertStrToUnsignedChar(const std::string &str); Modified: trunk/OpenMPT/mptrack/FadeLaws.h =================================================================== --- trunk/OpenMPT/mptrack/FadeLaws.h 2015-05-28 10:04:06 UTC (rev 5201) +++ trunk/OpenMPT/mptrack/FadeLaws.h 2015-05-28 10:13:01 UTC (rev 5202) @@ -9,14 +9,7 @@ #pragma once -#define _USE_MATH_DEFINES #include <cmath> -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif #include "../common/misc_util.h" OPENMPT_NAMESPACE_BEGIN Modified: trunk/OpenMPT/soundlib/Snd_flt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_flt.cpp 2015-05-28 10:04:06 UTC (rev 5201) +++ trunk/OpenMPT/soundlib/Snd_flt.cpp 2015-05-28 10:13:01 UTC (rev 5202) @@ -12,14 +12,9 @@ #include "stdafx.h" #include "Sndfile.h" #include "Tables.h" +#include "../common/misc_util.h" -#define _USE_MATH_DEFINES -#include <cmath> -#ifndef M_PI -#define M_PI 3.1415926535897932385 -#endif - OPENMPT_NAMESPACE_BEGIN This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-29 21:58:01
|
Revision: 5207 http://sourceforge.net/p/modplug/code/5207 Author: saga-games Date: 2015-05-29 21:57:55 +0000 (Fri, 29 May 2015) Log Message: ----------- [Imp] Write less redundant information into OpenMPT instrument extensions which was only needed for ITP files. Envelope data is now as short as possible (will break envelopes with > 25 points in some older OpenMPT builds, but this can be neglected) [Fix] Saving of the instrument flags in ITI/XI files was broken since most likel r2271 (the code+size header was never written). This also broke reading of several other extra fields as a consequence. Since this flag was also only needed for ITP files, remove it completely from ITI/XI files. [Mod] OpenMPT: Version is now 1.25.00.09 Revision Links: -------------- http://sourceforge.net/p/modplug/code/2271 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2015-05-29 21:28:57 UTC (rev 5206) +++ trunk/OpenMPT/common/versionNumber.h 2015-05-29 21:57:55 UTC (rev 5207) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 25 #define VER_MINOR 00 -#define VER_MINORMINOR 08 +#define VER_MINORMINOR 09 //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/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-29 21:28:57 UTC (rev 5206) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-05-29 21:57:55 UTC (rev 5207) @@ -1935,7 +1935,6 @@ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','P','.','.'), sizeof(ModInstrument().nMidiProgram),f, nInstruments); WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','B','.','.'), sizeof(ModInstrument().wMidiBank), f, nInstruments); WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','.','.','.'), sizeof(ModInstrument().nPan), f, nInstruments); - WriteInstrumentPropertyForAllInstruments(MAGIC4BE('G','V','.','.'), sizeof(ModInstrument().nGlobalVol), f, nInstruments); WriteInstrumentPropertyForAllInstruments(MAGIC4BE('F','O','.','.'), sizeof(ModInstrument().nFadeOut), f, nInstruments); WriteInstrumentPropertyForAllInstruments(MAGIC4BE('R','.','.','.'), sizeof(ModInstrument().nResampling), f, nInstruments); WriteInstrumentPropertyForAllInstruments(MAGIC4BE('C','S','.','.'), sizeof(ModInstrument().nCutSwing), f, nInstruments); Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-29 21:28:57 UTC (rev 5206) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2015-05-29 21:57:55 UTC (rev 5207) @@ -192,7 +192,7 @@ static_assert(sizeof(input->name) == sizeof(type), "Instrument property does match specified type!");\ fcode = MULTICHAR_STRING_TO_INT(#code);\ fsize = sizeof( type );\ - if(only_this_code == Util::MaxValueOfType(only_this_code)) \ + if(writeAll) \ { \ mpt::IO::WriteIntLE<uint32>(file, fcode); \ mpt::IO::WriteIntLE<int16>(file, fsize); \ @@ -215,7 +215,7 @@ static_assert(sizeof(input->name) > sizeof(type), "Instrument property would not be truncated, use WRITE_MPTHEADER_sized_member instead!");\ fcode = MULTICHAR_STRING_TO_INT(#code);\ fsize = sizeof( type );\ - if(only_this_code == Util::MaxValueOfType(only_this_code)) \ + if(writeAll) \ { \ mpt::IO::WriteIntLE<uint32>(file, fcode); \ mpt::IO::WriteIntLE<int16>(file, fsize); \ @@ -250,7 +250,7 @@ MPT_ASSERT(sizeof(input->name) >= sizeof(type) * arraysize);\ fcode = MULTICHAR_STRING_TO_INT(#code);\ fsize = sizeof( type ) * arraysize;\ - if(only_this_code == Util::MaxValueOfType(only_this_code)) \ + if(writeAll) \ { \ mpt::IO::WriteIntLE<uint32>(file, fcode); \ mpt::IO::WriteIntLE<int16>(file, fsize); \ @@ -271,96 +271,35 @@ } \ /**/ -// Create 'dF..' entry. -static DWORD CreateExtensionFlags(const ModInstrument& ins) -//--------------------------------------------------------- -{ - DWORD dwFlags = 0; - if(ins.VolEnv.dwFlags[ENV_ENABLED]) dwFlags |= dFdd_VOLUME; - if(ins.VolEnv.dwFlags[ENV_SUSTAIN]) dwFlags |= dFdd_VOLSUSTAIN; - if(ins.VolEnv.dwFlags[ENV_LOOP]) dwFlags |= dFdd_VOLLOOP; - if(ins.PanEnv.dwFlags[ENV_ENABLED]) dwFlags |= dFdd_PANNING; - if(ins.PanEnv.dwFlags[ENV_SUSTAIN]) dwFlags |= dFdd_PANSUSTAIN; - if(ins.PanEnv.dwFlags[ENV_LOOP]) dwFlags |= dFdd_PANLOOP; - if(ins.PitchEnv.dwFlags[ENV_ENABLED]) dwFlags |= dFdd_PITCH; - if(ins.PitchEnv.dwFlags[ENV_SUSTAIN]) dwFlags |= dFdd_PITCHSUSTAIN; - if(ins.PitchEnv.dwFlags[ENV_LOOP]) dwFlags |= dFdd_PITCHLOOP; - if(ins.dwFlags[INS_SETPANNING]) dwFlags |= dFdd_SETPANNING; - if(ins.PitchEnv.dwFlags[ENV_FILTER]) dwFlags |= dFdd_FILTER; - if(ins.VolEnv.dwFlags[ENV_CARRY]) dwFlags |= dFdd_VOLCARRY; - if(ins.PanEnv.dwFlags[ENV_CARRY]) dwFlags |= dFdd_PANCARRY; - if(ins.PitchEnv.dwFlags[ENV_CARRY]) dwFlags |= dFdd_PITCHCARRY; - if(ins.dwFlags[INS_MUTE]) dwFlags |= dFdd_MUTE; - return dwFlags; -} // Write (in 'file') 'input' ModInstrument with 'code' & 'size' extra field infos for each member void WriteInstrumentHeaderStructOrField(ModInstrument * input, FILE * file, uint32 only_this_code, int16 fixedsize) { uint32 fcode; int16 fsize; +// If true, all extension are written to the file; otherwise only the specified extension is written. +// writeAll is true iff we are saving an instrument (or, hypothetically, the legacy ITP format) +const bool writeAll = only_this_code == Util::MaxValueOfType(only_this_code); -if(only_this_code != Util::MaxValueOfType(only_this_code)) +if(!writeAll) { MPT_ASSERT(fixedsize > 0); } -WRITE_MPTHEADER_sized_member( nFadeOut , UINT , FO.. ) - -if(only_this_code == Util::MaxValueOfType(only_this_code) || only_this_code == MULTICHAR_STRING_TO_INT("dF..")){ // dwFlags needs to be constructed so write it manually. - //WRITE_MPTHEADER_sized_member( dwFlags , DWORD , dF.. ) - uint32 dwFlags = CreateExtensionFlags(*input); - fcode = MULTICHAR_STRING_TO_INT("dF.."); - fsize = sizeof(dwFlags); - if(!only_this_code) - { - mpt::IO::WriteIntLE<int32>(file, fcode); - mpt::IO::WriteIntLE<int16>(file, fsize); - } - dwFlags = SwapBytesReturnLE(dwFlags); - fwrite(&dwFlags, 1, fsize, file); -} - -WRITE_MPTHEADER_sized_member( nGlobalVol , uint32 , GV.. ) +WRITE_MPTHEADER_sized_member( nFadeOut , uint32 , FO.. ) WRITE_MPTHEADER_sized_member( nPan , uint32 , P... ) WRITE_MPTHEADER_sized_member( VolEnv.nNodes , uint32 , VE.. ) WRITE_MPTHEADER_sized_member( PanEnv.nNodes , uint32 , PE.. ) WRITE_MPTHEADER_sized_member( PitchEnv.nNodes , uint32 , PiE. ) -WRITE_MPTHEADER_sized_member( VolEnv.nLoopStart , uint8 , VLS. ) -WRITE_MPTHEADER_sized_member( VolEnv.nLoopEnd , uint8 , VLE. ) -WRITE_MPTHEADER_sized_member( VolEnv.nSustainStart , uint8 , VSB. ) -WRITE_MPTHEADER_sized_member( VolEnv.nSustainEnd , uint8 , VSE. ) -WRITE_MPTHEADER_sized_member( PanEnv.nLoopStart , uint8 , PLS. ) -WRITE_MPTHEADER_sized_member( PanEnv.nLoopEnd , uint8 , PLE. ) -WRITE_MPTHEADER_sized_member( PanEnv.nSustainStart , uint8 , PSB. ) -WRITE_MPTHEADER_sized_member( PanEnv.nSustainEnd , uint8 , PSE. ) -WRITE_MPTHEADER_sized_member( PitchEnv.nLoopStart , uint8 , PiLS ) -WRITE_MPTHEADER_sized_member( PitchEnv.nLoopEnd , uint8 , PiLE ) -WRITE_MPTHEADER_sized_member( PitchEnv.nSustainStart , uint8 , PiSB ) -WRITE_MPTHEADER_sized_member( PitchEnv.nSustainEnd , uint8 , PiSE ) -WRITE_MPTHEADER_sized_member( nNNA , uint8 , NNA. ) -WRITE_MPTHEADER_sized_member( nDCT , uint8 , DCT. ) -WRITE_MPTHEADER_sized_member( nDNA , uint8 , DNA. ) -WRITE_MPTHEADER_sized_member( nPanSwing , uint8 , PS.. ) -WRITE_MPTHEADER_sized_member( nVolSwing , uint8 , VS.. ) -WRITE_MPTHEADER_sized_member( nIFC , uint8 , IFC. ) -WRITE_MPTHEADER_sized_member( nIFR , uint8 , IFR. ) WRITE_MPTHEADER_sized_member( wMidiBank , uint16 , MB.. ) WRITE_MPTHEADER_sized_member( nMidiProgram , uint8 , MP.. ) WRITE_MPTHEADER_sized_member( nMidiChannel , uint8 , MC.. ) -WRITE_MPTHEADER_sized_member( nMidiDrumKey , uint8 , MDK. ) -WRITE_MPTHEADER_sized_member( nPPS , int8 , PPS. ) -WRITE_MPTHEADER_sized_member( nPPC , uint8 , PPC. ) -WRITE_MPTHEADER_array_member( VolEnv.Ticks , uint16 , VP[. , ((input->VolEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( PanEnv.Ticks , uint16 , PP[. , ((input->PanEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( PitchEnv.Ticks , uint16 , PiP[ , ((input->PitchEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( VolEnv.Values , uint8 , VE[. , ((input->VolEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( PanEnv.Values , uint8 , PE[. , ((input->PanEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( PitchEnv.Values , uint8 , PiE[ , ((input->PitchEnv.nNodes > 32) ? MAX_ENVPOINTS : 32)) -WRITE_MPTHEADER_array_member( NoteMap , uint8 , NM[. , 128 ) -WRITE_MPTHEADER_array_member( Keyboard , uint16 , K[.. , 128 ) -WRITE_MPTHEADER_array_member( name , char , n[.. , 32 ) -WRITE_MPTHEADER_array_member( filename , char , fn[. , 12 ) +WRITE_MPTHEADER_array_member( VolEnv.Ticks , uint16 , VP[. , (int16) input->VolEnv.nNodes) +WRITE_MPTHEADER_array_member( PanEnv.Ticks , uint16 , PP[. , (int16) input->PanEnv.nNodes) +WRITE_MPTHEADER_array_member( PitchEnv.Ticks , uint16 , PiP[ , (int16) input->PitchEnv.nNodes) +WRITE_MPTHEADER_array_member( VolEnv.Values , uint8 , VE[. , (int16) input->VolEnv.nNodes) +WRITE_MPTHEADER_array_member( PanEnv.Values , uint8 , PE[. , (int16) input->PanEnv.nNodes) +WRITE_MPTHEADER_array_member( PitchEnv.Values , uint8 , PiE[ , (int16) input->PitchEnv.nNodes) WRITE_MPTHEADER_sized_member( nMixPlug , uint8 , MiP. ) WRITE_MPTHEADER_sized_member( nVolRampUp , uint16 , VR.. ) WRITE_MPTHEADER_trunc_member( nResampling , uint16 , R... ) @@ -409,10 +348,10 @@ if(fcode == MULTICHAR_STRING_TO_INT(#code)) {\ if( fsize <= sizeof( type ) * arraysize ) \ { \ - if(!file.CanRead(sizeof(type) * arraysize)) return false; \ + FileReader arrayChunk = file.ReadChunk(fsize); \ for(std::size_t i = 0; i < arraysize; ++i) \ { \ - input-> name [i] = file.ReadIntLE<type>(); \ + input-> name [i] = arrayChunk.ReadIntLE<type>(); \ } \ return true; \ } \ @@ -469,7 +408,7 @@ GET_MPTHEADER_array_member( filename , char , fn[. , 12 ) GET_MPTHEADER_sized_member( nMixPlug , uint8 , MiP. ) GET_MPTHEADER_sized_member( nVolRampUp , uint16 , VR.. ) -GET_MPTHEADER_sized_member( nResampling , UINT , R... ) +GET_MPTHEADER_sized_member( nResampling , uint32 , R... ) GET_MPTHEADER_sized_member( nCutSwing , uint8 , CS.. ) GET_MPTHEADER_sized_member( nResSwing , uint8 , RS.. ) GET_MPTHEADER_sized_member( nFilterMode , uint8 , FM.. ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-05-29 23:10:42
|
Revision: 5208 http://sourceforge.net/p/modplug/code/5208 Author: saga-games Date: 2015-05-29 23:10:31 +0000 (Fri, 29 May 2015) Log Message: ----------- [Ref] Move all code related to MPTM instrument extension I/O from Sndfile.cpp, SampleFormats.cpp and Load_it.cpp to InstrumentExtensions.cpp (no functional changes) to keep this messy code at least a little bit tidy. Modified Paths: -------------- trunk/OpenMPT/build/android_ndk/Android-unmo3.mk trunk/OpenMPT/build/android_ndk/Android.mk trunk/OpenMPT/build/autotools/Makefile.am trunk/OpenMPT/build/vs2008/OpenMPT.vcproj trunk/OpenMPT/build/vs2008/libopenmpt.vcproj trunk/OpenMPT/build/vs2008/libopenmptDLL.vcproj trunk/OpenMPT/build/vs2008/libopenmpt_test.vcproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj.filters trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj.filters trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj.filters trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj.filters trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj.filters trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj.filters trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj.filters trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj.filters trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj.filters trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj.filters trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj.filters trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj.filters trunk/OpenMPT/common/FlagSet.h trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/ModInstrument.h trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Added Paths: ----------- trunk/OpenMPT/soundlib/InstrumentExtensions.cpp Modified: trunk/OpenMPT/build/android_ndk/Android-unmo3.mk =================================================================== --- trunk/OpenMPT/build/android_ndk/Android-unmo3.mk 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/android_ndk/Android-unmo3.mk 2015-05-29 23:10:31 UTC (rev 5208) @@ -68,6 +68,7 @@ soundlib/Dither.cpp \ soundlib/Dlsbank.cpp \ soundlib/Fastmix.cpp \ + soundlib/InstrumentExtensions.cpp \ soundlib/ITCompression.cpp \ soundlib/ITTools.cpp \ soundlib/Load_669.cpp \ Modified: trunk/OpenMPT/build/android_ndk/Android.mk =================================================================== --- trunk/OpenMPT/build/android_ndk/Android.mk 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/android_ndk/Android.mk 2015-05-29 23:10:31 UTC (rev 5208) @@ -36,6 +36,7 @@ soundlib/Dither.cpp \ soundlib/Dlsbank.cpp \ soundlib/Fastmix.cpp \ + soundlib/InstrumentExtensions.cpp \ soundlib/ITCompression.cpp \ soundlib/ITTools.cpp \ soundlib/Load_669.cpp \ Modified: trunk/OpenMPT/build/autotools/Makefile.am =================================================================== --- trunk/OpenMPT/build/autotools/Makefile.am 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/autotools/Makefile.am 2015-05-29 23:10:31 UTC (rev 5208) @@ -120,6 +120,7 @@ libopenmpt_la_SOURCES += soundlib/Dlsbank.h libopenmpt_la_SOURCES += soundlib/Fastmix.cpp libopenmpt_la_SOURCES += soundlib/FloatMixer.h +libopenmpt_la_SOURCES += soundlib/InstrumentExtensions.cpp libopenmpt_la_SOURCES += soundlib/IntMixer.h libopenmpt_la_SOURCES += soundlib/ITCompression.cpp libopenmpt_la_SOURCES += soundlib/ITCompression.h @@ -323,6 +324,7 @@ libopenmpttest_SOURCES += soundlib/Dlsbank.h libopenmpttest_SOURCES += soundlib/Fastmix.cpp libopenmpttest_SOURCES += soundlib/FloatMixer.h +libopenmpttest_SOURCES += soundlib/InstrumentExtensions.cpp libopenmpttest_SOURCES += soundlib/IntMixer.h libopenmpttest_SOURCES += soundlib/ITCompression.cpp libopenmpttest_SOURCES += soundlib/ITCompression.h Modified: trunk/OpenMPT/build/vs2008/OpenMPT.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2008/OpenMPT.vcproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -1660,6 +1660,10 @@ > </File> <File + RelativePath="..\..\soundlib\InstrumentExtensions.cpp" + > + </File> + <File RelativePath="..\..\soundlib\IntMixer.h" > </File> Modified: trunk/OpenMPT/build/vs2008/libopenmpt.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/libopenmpt.vcproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2008/libopenmpt.vcproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -559,6 +559,10 @@ > </File> <File + RelativePath="..\..\soundlib\InstrumentExtensions.cpp" + > + </File> + <File RelativePath="..\..\soundlib\IntMixer.h" > </File> Modified: trunk/OpenMPT/build/vs2008/libopenmptDLL.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/libopenmptDLL.vcproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2008/libopenmptDLL.vcproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -607,6 +607,10 @@ > </File> <File + RelativePath="..\..\soundlib\InstrumentExtensions.cpp" + > + </File> + <File RelativePath="..\..\soundlib\IntMixer.h" > </File> Modified: trunk/OpenMPT/build/vs2008/libopenmpt_test.vcproj =================================================================== --- trunk/OpenMPT/build/vs2008/libopenmpt_test.vcproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2008/libopenmpt_test.vcproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -607,6 +607,10 @@ > </File> <File + RelativePath="..\..\soundlib\InstrumentExtensions.cpp" + > + </File> + <File RelativePath="..\..\soundlib\IntMixer.h" > </File> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -654,6 +654,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/OpenMPT.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -934,6 +934,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -273,6 +273,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmpt.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -277,6 +277,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmptDLL.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -286,6 +286,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2010/libopenmpt_test.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -326,6 +326,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -660,6 +660,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/OpenMPT.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -934,6 +934,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -277,6 +277,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmpt.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -281,6 +281,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmptDLL.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -290,6 +290,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2012/libopenmpt_test.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -326,6 +326,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -661,6 +661,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/OpenMPT.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -934,6 +934,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -278,6 +278,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmpt.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -282,6 +282,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmptDLL.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -291,6 +291,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2013/libopenmpt_test.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -326,6 +326,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -661,6 +661,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/OpenMPT.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -934,6 +934,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -278,6 +278,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmpt.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -282,6 +282,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmptDLL.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -308,6 +308,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -291,6 +291,7 @@ <ClCompile Include="..\..\soundlib\Fastmix.cpp" /> <ClCompile Include="..\..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\..\soundlib\ITTools.cpp" /> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\..\soundlib\Load_669.cpp" /> <ClCompile Include="..\..\soundlib\Load_amf.cpp" /> <ClCompile Include="..\..\soundlib\Load_ams.cpp" /> Modified: trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj.filters =================================================================== --- trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/build/vs2015/libopenmpt_test.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -326,6 +326,9 @@ <ClCompile Include="..\..\soundlib\ITTools.cpp"> <Filter>soundlib</Filter> </ClCompile> + <ClCompile Include="..\..\soundlib\InstrumentExtensions.cpp"> + <Filter>soundlib</Filter> + </ClCompile> <ClCompile Include="..\..\soundlib\Load_669.cpp"> <Filter>soundlib</Filter> </ClCompile> Modified: trunk/OpenMPT/common/FlagSet.h =================================================================== --- trunk/OpenMPT/common/FlagSet.h 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/common/FlagSet.h 2015-05-29 23:10:31 UTC (rev 5208) @@ -194,7 +194,7 @@ // C++11 explicit conversion cast operators ('explicit operator bool ();') // would solve this in a better way and always fail at compile-time instead of this // solution which just warns in some cases. - // The macro-based extended instrument fields writer in Sndfile.cpp currently needs this conversion, + // The macro-based extended instrument fields writer in InstrumentExtensions.cpp currently needs this conversion, // so it is not marked deprecated (for now). /*MPT_DEPRECATED*/ forceinline operator store_type () const { Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -564,6 +564,10 @@ > </File> <File + RelativePath="..\soundlib\InstrumentExtensions.cpp" + > + </File> + <File RelativePath="..\soundlib\ITCompression.cpp" > </File> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-05-29 23:10:31 UTC (rev 5208) @@ -763,6 +763,7 @@ <IntrinsicFunctions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</IntrinsicFunctions> <IntrinsicFunctions Condition="'$(Configuration)|$(Platform)'=='VSTi-Debug|x64'">true</IntrinsicFunctions> </ClCompile> + <ClCompile Include="..\soundlib\InstrumentExtensions.cpp" /> <ClCompile Include="..\soundlib\ITCompression.cpp" /> <ClCompile Include="..\soundlib\ITTools.cpp" /> <ClCompile Include="..\soundlib\Load_digi.cpp" /> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-05-29 21:57:55 UTC (rev 5207) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-05-29 23:10:31 UTC (rev 5208) @@ -565,6 +565,9 @@ <ClCompile Include="AdvancedConfigDlg.cpp"> <Filter>Source Files\mptrack\Dialogs</Filter> </ClCompile> + <ClCompile Include="..\soundlib\InstrumentExtensions.cpp"> + <Filter>Source Files\soundlib</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\soundlib\Loaders.h"> Added: trunk/OpenMPT/soundlib/InstrumentExtensions.cpp =================================================================== --- trunk/OpenMPT/soundlib/InstrumentExtensions.cpp (rev 0) +++ trunk/OpenMPT/soundlib/InstrumentExtensions.cpp 2015-05-29 23:10:31 UTC (rev 5208) @@ -0,0 +1,635 @@ +/* + * InstrumentExtensions.cpp + * ------------------------ + * Purpose: Instrument properties I/O + * Notes : Welcome to the absolutely horrible abominations that are the "extended instrument properties" + * which are some of the earliest additions OpenMPT did to the IT / XM format. They are ugly, + * and the way they work even differs between IT/XM and ITI/XI/ITP. + * Yes, the world would be a better place without this stuff. + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include "stdafx.h" +#include "Loaders.h" + +OPENMPT_NAMESPACE_BEGIN + +/*--------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------- +MODULAR (in/out) ModInstrument : +----------------------------------------------------------------------------------------------- + +* to update: +------------ + +- both following functions need to be updated when adding a new member in ModInstrument : + +void WriteInstrumentHeaderStructOrField(ModInstrument * input, FILE * file, uint32 only_this_code, int16 fixedsize); +bool ReadInstrumentHeaderField(ModInstrument * input, uint32 fcode, int16 fsize, FileReader &file); + +- see below for body declaration. + + +* members: +---------- + +- 32bit identification CODE tag (must be unique) +- 16bit content SIZE in byte(s) +- member field + + +* CODE tag naming convention: +----------------------------- + +- have a look below in current tag dictionnary +- take the initial ones of the field name +- 4 caracters code (not more, not less) +- must be filled with '.' caracters if code has less than 4 caracters +- for arrays, must include a '[' caracter following significant caracters ('.' not significant!!!) +- use only caracters used in full member name, ordered as they appear in it +- match caracter attribute (small,capital) + +Example with "PanEnv.nLoopEnd" , "PitchEnv.nLoopEnd" & "VolEnv.Values[MAX_ENVPOINTS]" members : +- use 'PLE.' for PanEnv.nLoopEnd +- use 'PiLE' for PitchEnv.nLoopEnd +- use 'VE[.' for VolEnv.Values[MAX_ENVPOINTS] + + +* In use CODE tag dictionary (alphabetical order): +-------------------------------------------------- + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!! SECTION TO BE UPDATED !!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + [EXT] means external (not related) to ModInstrument content + +C... [EXT] nChannels +ChnS [EXT] IT/MPTM: Channel settings for channels 65-127 if needed (doesn't fit to IT header). +CS.. nCutSwing +CWV. [EXT] dwCreatedWithVersion +DCT. nDCT; +dF.. dwFlags; +DGV. [EXT] nDefaultGlobalVolume +DT.. [EXT] nDefaultTempo; +DNA. nDNA; +EBIH [EXT] embeded instrument header tag (ITP file format) +FM.. nFilterMode; +fn[. filename[12]; +FO.. nFadeOut; +GV.. nGlobalVol; +IFC. nIFC; +IFR. nIFR; +K[. Keyboard[128]; +LSWV [EXT] Last Saved With Version +MB.. wMidiBank; +MC.. nMidiChannel; +MDK. nMidiDrumKey; +MIMA [EXT] MIdi MApping directives +MiP. nMixPlug; +MP.. nMidiProgram; +MPTS [EXT] Extra song info tag +MPTX [EXT] EXTRA INFO tag +MSF. [EXT] Mod(Specific)Flags +n[.. name[32]; +NNA. nNNA; +NM[. NoteMap[128]; +P... nPan; +PE.. PanEnv.nNodes; +PE[. PanEnv.Values[MAX_ENVPOINTS]; +PiE. PitchEnv.nNodes; +PiE[ PitchEnv.Values[MAX_ENVPOINTS]; +PiLE PitchEnv.nLoopEnd; +PiLS PitchEnv.nLoopStart; +PiP[ PitchEnv.Ticks[MAX_ENVPOINTS]; +PiSB PitchEnv.nSustainStart; +PiSE PitchEnv.nSustainEnd; +PLE. PanEnv.nLoopEnd; +PLS. PanEnv.nLoopStart; +PMM. [EXT] nPlugMixMode; +PP[. PanEnv.Ticks[MAX_ENVPOINTS]; +PPC. nPPC; +PPS. nPPS; +PS.. nPanSwing; +PSB. PanEnv.nSustainStart; +PSE. PanEnv.nSustainEnd; +PTTL wPitchToTempoLock; +PVEH nPluginVelocityHandling; +PVOH nPluginVolumeHandling; +R... nResampling; +RP.. [EXT] nRestartPos; +RPB. [EXT] nRowsPerBeat; +RPM. [EXT] nRowsPerMeasure; +RS.. nResSwing; +SEP@ [EXT] chunk SEPARATOR tag +SPA. [EXT] m_nSamplePreAmp; +TM.. [EXT] nTempoMode; +VE.. VolEnv.nNodes; +VE[. VolEnv.Values[MAX_ENVPOINTS]; +VLE. VolEnv.nLoopEnd; +VLS. VolEnv.nLoopStart; +VP[. VolEnv.Ticks[MAX_ENVPOINTS]; +VR.. nVolRampUp; +VS.. nVolSwing; +VSB. VolEnv.nSustainStart; +VSE. VolEnv.nSustainEnd; +VSTV [EXT] nVSTiVolume; +PERN PitchEnv.nReleaseNode +AERN PanEnv.nReleaseNode +VERN VolEnv.nReleaseNode +PFLG PitchEnv.dwFlag +AFLG PanEnv.dwFlags +VFLG VolEnv.dwFlags +MPWD MIDI Pitch Wheel Depth +----------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------*/ + +#ifndef MODPLUG_NO_FILESAVE + +template<typename T, bool is_signed> struct IsNegativeFunctor { bool operator()(T val) const { return val < 0; } }; +template<typename T> struct IsNegativeFunctor<T, true> { bool operator()(T val) const { return val < 0; } }; +template<typename T> struct IsNegativeFunctor<T, false> { bool operator()(T /*val*/) const { return false; } }; + +template<typename T> +bool IsNegative(const T &val) +{ + return IsNegativeFunctor<T, std::numeric_limits<T>::is_signed>()(val); +} + +// ------------------------------------------------------------------------------------------ +// Convenient macro to help WRITE_HEADER declaration for single type members ONLY (non-array) +// ------------------------------------------------------------------------------------------ +#define WRITE_MPTHEADER_sized_member(name,type,code) \ + static_assert(sizeof(input->name) == sizeof(type), "Instrument property does match specified type!");\ + fcode = code;\ + fsize = sizeof( type );\ + if(writeAll) \ + { \ + mpt::IO::WriteIntLE<uint32>(file, fcode); \ + mpt::IO::WriteIntLE<int16>(file, fsize); \ + } else if(only_this_code == fcode)\ + { \ + MPT_ASSERT(fixedsize == fsize); \ + } \ + if(only_this_code == fcode || only_this_code == Util::MaxValueOfType(only_this_code)) \ + { \ + type tmp = input-> name; \ + tmp = SwapBytesReturnLE(tmp); \ + fwrite(&tmp , 1 , fsize , file); \ + } \ +/**/ + +// ----------------------------------------------------------------------------------------------------- +// Convenient macro to help WRITE_HEADER declaration for single type members which are written truncated +// ----------------------------------------------------------------------------------------------------- +#define WRITE_MPTHEADER_trunc_member(name,type,code) \ + static_assert(sizeof(input->name) > sizeof(type), "Instrument property would not be truncated, use WRITE_MPTHEADER_sized_member instead!");\ + fcode = code;\ + fsize = sizeof( type );\ + if(writeAll) \ + { \ + mpt::IO::WriteIntLE<uint32>(file, fcode); \ + mpt::IO::WriteIntLE<int16>(file, fsize); \ + type tmp = (type)(input-> name ); \ + tmp = SwapBytesReturnLE(tmp); \ + fwrite(&tmp , 1 , fsize , file); \ + } else if(only_this_code == fcode)\ + { \ + /* hackish workaround to resolve mismatched size values: */ \ + /* nResampling was a long time declared as uint32 but these macro tables used uint16 and UINT. */ \ + /* This worked fine on little-endian, on big-endian not so much. Thus support writing size-mismatched fields. */ \ + MPT_ASSERT(fixedsize >= fsize); \ + type tmp = (type)(input-> name ); \ + tmp = SwapBytesReturnLE(tmp); \ + fwrite(&tmp , 1 , fsize , file); \ + if(fixedsize > fsize) \ + { \ + for(int16 i = 0; i < fixedsize - fsize; ++i) \ + { \ + uint8 fillbyte = !IsNegative(tmp) ? 0 : 0xff; /* sign extend */ \ + fwrite(&fillbyte, 1, 1, file); \ + } \ + } \ + } \ +/**/ + +// ------------------------------------------------------------------------ +// Convenient macro to help WRITE_HEADER declaration for array members ONLY +// ------------------------------------------------------------------------ +#define WRITE_MPTHEADER_array_member(name,type,code,arraysize) \ + STATIC_ASSERT(sizeof(type) == sizeof(input-> name [0])); \ + MPT_ASSERT(sizeof(input->name) >= sizeof(type) * arraysize);\ + fcode = code;\ + fsize = sizeof( type ) * arraysize;\ + if(writeAll) \ + { \ + mpt::IO::WriteIntLE<uint32>(file, fcode); \ + mpt::IO::WriteIntLE<int16>(file, fsize); \ + } else if(only_this_code == fcode)\ + { \ + /* MPT_ASSERT(fixedsize <= fsize); */ \ + fsize = fixedsize; /* just trust the size we got passed */ \ + } \ + if(only_this_code == fcode || only_this_code == Util::MaxValueOfType(only_this_code)) \ + { \ + for(std::size_t i = 0; i < fsize/sizeof(type); ++i) \ + { \ + type tmp; \ + tmp = input-> name [i]; \ + tmp = SwapBytesReturnLE(tmp); \ + fwrite(&tmp, 1, sizeof(type), file); \ + } \ + } \ +/**/ + + +// Write (in 'file') 'input' ModInstrument with 'code' & 'size' extra field infos for each member +void WriteInstrumentHeaderStructOrField(ModInstrument * input, FILE * file, uint32 only_this_code, int16 fixedsize) +{ +uint32 fcode; +int16 fsize; +// If true, all extension are written to the file; otherwise only the specified extension is written. +// writeAll is true iff we are saving an instrument (or, hypothetically, the legacy ITP format) +const bool writeAll = only_this_code == Util::MaxValueOfType(only_this_code); + +if(!writeAll) +{ + MPT_ASSERT(fixedsize > 0); +} + + WRITE_MPTHEADER_sized_member( nFadeOut , uint32 , MAGIC4BE('F','O','.','.') ) + WRITE_MPTHEADER_sized_member( nPan , uint32 , MAGIC4BE('P','.','.','.') ) + WRITE_MPTHEADER_sized_member( VolEnv.nNodes , uint32 , MAGIC4BE('V','E','.','.') ) + WRITE_MPTHEADER_sized_member( PanEnv.nNodes , uint32 , MAGIC4BE('P','E','.','.') ) + WRITE_MPTHEADER_sized_member( PitchEnv.nNodes , uint32 , MAGIC4BE('P','i','E','.') ) + WRITE_MPTHEADER_sized_member( wMidiBank , uint16 , MAGIC4BE('M','B','.','.') ) + WRITE_MPTHEADER_sized_member( nMidiProgram , uint8 , MAGIC4BE('M','P','.','.') ) + WRITE_MPTHEADER_sized_member( nMidiChannel , uint8 , MAGIC4BE('M','C','.','.') ) + WRITE_MPTHEADER_array_member( VolEnv.Ticks , uint16 , MAGIC4BE('V','P','[','.') , (int16) input->VolEnv.nNodes) + WRITE_MPTHEADER_array_member( PanEnv.Ticks , uint16 , MAGIC4BE('P','P','[','.') , (int16) input->PanEnv.nNodes) + WRITE_MPTHEADER_array_member( PitchEnv.Ticks , uint16 , MAGIC4BE('P','i','P','[') , (int16) input->PitchEnv.nNodes) + WRITE_MPTHEADER_array_member( VolEnv.Values , uint8 , MAGIC4BE('V','E','[','.') , (int16) input->VolEnv.nNodes) + WRITE_MPTHEADER_array_member( PanEnv.Values , uint8 , MAGIC4BE('P','E','[','.') , (int16) input->PanEnv.nNodes) + WRITE_MPTHEADER_array_member( PitchEnv.Values , uint8 , MAGIC4BE('P','i','E','[') , (int16) input->PitchEnv.nNodes) + WRITE_MPTHEADER_sized_member( nMixPlug , uint8 , MAGIC4BE('M','i','P','.') ) + WRITE_MPTHEADER_sized_member( nVolRampUp , uint16 , MAGIC4BE('V','R','.','.') ) + WRITE_MPTHEADER_trunc_member( nResampling , uint16 , MAGIC4BE('R','.','.','.') ) + WRITE_MPTHEADER_sized_member( nCutSwing , uint8 , MAGIC4BE('C','S','.','.') ) + WRITE_MPTHEADER_sized_member( nResSwing , uint8 , MAGIC4BE('R','S','.','.') ) + WRITE_MPTHEADER_sized_member( nFilterMode , uint8 , MAGIC4BE('F','M','.','.') ) + WRITE_MPTHEADER_sized_member( nPluginVelocityHandling , uint8 , MAGIC4BE('P','V','E','H') ) + WRITE_MPTHEADER_sized_member( nPluginVolumeHandling , uint8 , MAGIC4BE('P','V','O','H') ) + WRITE_MPTHEADER_sized_member( wPitchToTempoLock , uint16 , MAGIC4BE('P','T','T','L') ) + WRITE_MPTHEADER_sized_member( PitchEnv.nReleaseNode , uint8 , MAGIC4BE('P','E','R','N') ) + WRITE_MPTHEADER_sized_member( PanEnv.nReleaseNode , uint8 , MAGIC4BE('A','E','R','N') ) + WRITE_MPTHEADER_sized_member( VolEnv.nReleaseNode , uint8 , MAGIC4BE('V','E','R','N') ) + WRITE_MPTHEADER_sized_member( PitchEnv.dwFlags , uint32 , MAGIC4BE('P','F','L','G') ) + WRITE_MPTHEADER_sized_member( PanEnv.dwFlags , uint32 , MAGIC4BE('A','F','L','G') ) + WRITE_MPTHEADER_sized_member( VolEnv.dwFlags , uint32 , MAGIC4BE('V','F','L','G') ) + WRITE_MPTHEADER_sized_member( midiPWD , int8 , MAGIC4BE('M','P','W','D') ) +} + + +// Used only when saving IT, XM and MPTM. +// ITI, ITP saves using Ericus' macros etc... +// The reason is that ITs and XMs save [code][size][ins1.Value][ins2.Value]... +// whereas ITP saves [code][size][ins1.Value][code][size][ins2.Value]... +// too late to turn back.... +void CSoundFile::SaveExtendedInstrumentProperties(INSTRUMENTINDEX nInstruments, FILE *f) const +//-------------------------------------------------------------------------------------------- +{ + uint32 code = MAGIC4BE('M','P','T','X'); // write extension header code + mpt::IO::WriteIntLE<uint32>(f, code); + + if (nInstruments == 0) + return; + + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','R','.','.'), sizeof(ModInstrument().nVolRampUp), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','i','P','.'), sizeof(ModInstrument().nMixPlug), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','C','.','.'), sizeof(ModInstrument().nMidiChannel),f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','P','.','.'), sizeof(ModInstrument().nMidiProgram),f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','B','.','.'), sizeof(ModInstrument().wMidiBank), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','.','.','.'), sizeof(ModInstrument().nPan), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('F','O','.','.'), sizeof(ModInstrument().nFadeOut), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('R','.','.','.'), sizeof(ModInstrument().nResampling), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('C','S','.','.'), sizeof(ModInstrument().nCutSwing), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('R','S','.','.'), sizeof(ModInstrument().nResSwing), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('F','M','.','.'), sizeof(ModInstrument().nFilterMode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','R','N'), sizeof(ModInstrument().PitchEnv.nReleaseNode ), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('A','E','R','N'), sizeof(ModInstrument().PanEnv.nReleaseNode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','R','N'), sizeof(ModInstrument().VolEnv.nReleaseNode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','T','T','L'), sizeof(ModInstrument().wPitchToTempoLock), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','V','E','H'), sizeof(ModInstrument().nPluginVelocityHandling), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','V','O','H'), sizeof(ModInstrument().nPluginVolumeHandling), f, nInstruments); + + if(!(GetType() & MOD_TYPE_XM)) + { + // XM instrument headers already have support for this + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','P','W','D'), sizeof(ModInstrument().midiPWD), f, nInstruments); + } + + if(GetType() & MOD_TYPE_MPT) + { + uint32 maxNodes[3] = { 0 }; + for(INSTRUMENTINDEX i = 1; i <= m_nInstruments; i++) if(Instruments[i] != nullptr) + { + maxNodes[0] = std::max(maxNodes[0], Instruments[i]->VolEnv.nNodes); + maxNodes[1] = std::max(maxNodes[1], Instruments[i]->PanEnv.nNodes); + maxNodes[2] = std::max(maxNodes[2], Instruments[i]->PitchEnv.nNodes); + } + // write full envelope information for MPTM files (more env points) + if(maxNodes[0] > 25) + { + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','.','.'), sizeof(ModInstrument().VolEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','P','[','.'), sizeof(ModInstrument().VolEnv.Ticks), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','[','.'), sizeof(ModInstrument().VolEnv.Values), f, nInstruments); + } + if(maxNodes[1] > 25) + { + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','.','.'), sizeof(ModInstrument().PanEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','P','[','.'), sizeof(ModInstrument().PanEnv.Ticks), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','[','.'), sizeof(ModInstrument().PanEnv.Values), f, nInstruments); + } + if(maxNodes[2] > 25) + { + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','.'), sizeof(ModInstrument().PitchEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','P','['), sizeof(ModInstrument().PitchEnv.Ticks), f, nInstruments); + WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','['), sizeof(ModInstrument().PitchEnv.Values), f, nInstruments); + } + } +} + +void CSoundFile::WriteInstrumentPropertyForAllInstruments(uint32 code, int16 size, FILE *f, INSTRUMENTINDEX nInstruments) const +//----------------------------------------------------------------------------------------------------------------------------- +{ + mpt::IO::WriteIntLE<uint32>(f, code); //write code + mpt::IO::WriteIntLE<int16>(f, size); //write size + for(INSTRUMENTINDEX i = 1; i <= nInstruments; i++) //for all instruments... + { + if (Instruments[i]) + { + WriteInstrumentHeaderStructOrField(Instruments[i], f, code, size); + } else + { + ModInstrument emptyInstrument; + WriteInstrumentHeaderStructOrField(&emptyInstrument, f, code, size); + } + } +} + + +#endif // !MODPLUG_NO_FILESAVE + + +// -------------------------------------------------------------------------------------------- +// Convenient macro to help GET_HEADER declaration for single type members ONLY (non-array) +// -------------------------------------------------------------------------------------------- +#define GET_MPTHEADER_sized_member(name,type,code) \ + case code: \ + {\ + if( fsize <= sizeof( type ) ) \ + { \ + /* hackish workaround to resolve mismatched size values: */ \ + /* nResampling was a long time declared as uint32 but these macro tables used uint16 and UINT. */ \ + /* This worked fine on little-endian, on big-endian not so much. Thus support reading size-mismatched fields. */ \ + type tmp; \ + if(!file.CanRead(fsize)) return false; \ + tmp = file.ReadTruncatedIntLE<type>(fsize); \ + STATIC_ASSERT(sizeof(tmp) == sizeof(input-> name )); \ + memcpy(&(input-> name ), &tmp, sizeof(type)); \ + return true; \ + } \ + } + +// -------------------------------------------------------------------------------------------- +// Convenient macro to help GET_HEADER declaration for array members ONLY +// -------------------------------------------------------------------------------------------- +#define GET_MPTHEADER_array_member(name,type,code) \ + case code: \ + {\ + if( fsize <= sizeof( type ) * CountOf(input-> name) ) \ + { \ + FileReader arrayChunk = file.ReadChunk(fsize); \ + for(std::size_t i = 0; i < CountOf(input-> name); ++i) \ + { \ + input-> name [i] = arrayChunk.ReadIntLE<type>(); \ + } \ + return true; \ + } \ + } + + +// Return a pointer on the wanted field in 'input' ModInstrument given field code & size +bool ReadInstrumentHeaderField(ModInstrument *input, uint32 fcode, uint16 fsize, FileReader &file) +{ + if(input == nullptr) return false; + + // Members which can be found in this table but not in the write table are only required in the legacy ITP format. + switch(fcode) + { + GET_MPTHEADER_sized_member( nFadeOut , uint32 , MAGIC4BE('F','O','.','.') ) + GET_MPTHEADER_sized_member( dwFlags , uint32 , MAGIC4BE('d','F','.','.') ) + GET_MPTHEADER_sized_member( nGlobalVol , uint32 , MAGIC4BE('G','V','.','.') ) + GET_MPTHEADER_sized_member( nPan , uint32 , MAGIC4BE('P','.','.','.') ) + GET_MPTHEADER_sized_member( VolEnv.nNodes , uint32 , MAGIC4BE('V','E','.','.') ) + GET_MPTHEADER_sized_member( PanEnv.nNodes , uint32 , MAGIC4BE('P','E','.','.') ) + GET_MPTHEADER_sized_member( PitchEnv.nNodes , uint32 , MAGIC4BE('P','i','E','.') ) + GET_MPTHEADER_sized_member( VolEnv.nLoopStart , uint8 , MAGIC4BE('V','L','S','.') ) + GET_MPTHEADER_sized_member( VolEnv.nLoopEnd , uint8 , MAGIC4BE('V','L','E','.') ) + GET_MPTHEADER_sized_member( VolEnv.nSustainStart , uint8 , MAGIC4BE('V','S','B','.') ) + GET_MPTHEADER_sized_member( VolEnv.nSustainEnd , uint8 , MAGIC4BE('V','S','E','.') ) + GET_MPTHEADER_sized_member( PanEnv.nLoopStart , uint8 , MAGIC4BE('P','L','S','.') ) + GET_MPTHEADER_sized_member( PanEnv.nLoopEnd , uint8 , MAGIC4BE('P','L','E','.') ) + GET_MPTHEADER_sized_member( PanEnv.nSustainStart , uint8 , MAGIC4BE('P','S','B','.') ) + GET_MPTHEADER_sized_member( PanEnv.nSustainEnd , uint8 , MAGIC4BE('P','S','E','.') ) + GET_MPTHEADER_sized_member( PitchEnv.nLoopStart , uint8 , MAGIC4BE('P','i','L','S') ) + GET_MPTHEADER_sized_member( PitchEnv.nLoopEnd , uint8 , MAGIC4BE('P','i','L','E') ) + GET_MPTHEADER_sized_member( PitchEnv.nSustainStart , uint8 , MAGIC4BE('P','i','S','B') ) + GET_MPTHEADER_sized_member( PitchEnv.nSustainEnd , uint8 , MAGIC4BE('P','i','S','E') ) + GET_MPTHEADER_sized_member( nNNA , uint8 , MAGIC4BE('N','N','A','.') ) + GET_MPTHEADER_sized_member( nDCT , uint8 , MAGIC4BE('D','C','T','.') ) + GET_MPTHEADER_sized_member( nDNA , uint8 , MAGIC4BE('D','N','A','.') ) + GET_MPTHEADER_sized_member( nPanSwing , uint8 , MAGIC4BE('P','S','.','.') ) + GET_MPTHEADER_sized_member( nVolSwing , uint8 , MAGIC4BE('V','S','.','.') ) + GET_MPTHEADER_sized_member( nIFC , uint8 , MAGIC4BE('I','F','C','.') ) + GET_MPTHEADER_sized_member( nIFR , uint8 , MAGIC4BE('I','F','R','.') ) + GET_MPTHEADER_sized_member( wMidiBank , uint16 , MAGIC4BE('M','B','.','.') ) + GET_MPTHEADER_sized_member( nMidiProgram , uint8 , MAGIC4BE('M','P','.','.') ) + GET_MPTHEADER_sized_member( nMidiChannel , uint8 , MAGIC4BE('M','C','.','.') ) + GET_MPTHEADER_sized_member( nMidiDrumKey , uint8 , MAGIC4BE('M','D','K','.') ) + GET_MPTHEADER_sized_member( nPPS , int8 , MAGIC4BE('P','P','S','.') ) + GET_MPTHEADER_sized_member( nPPC , uint8 , MAGIC4BE('P','P','C','.') ) + GET_MPTHEADER_array_member( VolEnv.Ticks , uint16 , MAGIC4BE('V','P','[','.') ) + GET_MPTHEADER_array_member( PanEnv.Ticks , uint16 , MAGIC4BE('P','P','[','.') ) + GET_MPTHEADER_array_member( PitchEnv.Ticks , uint16 , MAGIC4BE('P','i','P','[') ) + GET_MPTHEADER_array_member( VolEnv.Values , uint8 , MAGIC4BE('V','E','[','.') ) + GET_MPTHEADER_array_member( PanEnv.Values , uint8 , MAGIC4BE('P','E','[','.') ) + GET_MPTHEADER_array_member( PitchEnv.Values , uint8 , MAGIC4BE('P','i','E','[') ) + GET_MPTHEADER_array_member( NoteMap , uint8 , MAGIC4BE('N','M','[','.') ) + GET_MPTHEADER_array_member( Keyboard , uint16 , MAGIC4BE('K','[','.','.') ) + GET_MPTHEADER_array_member( name , char , MAGIC4BE('n','[','.','.') ) + GET_MPTHEADER_array_member( filename , char , MAGIC4BE('f','n','[','.') ) + GET_MPTHEADER_sized_member( nMixPlug , uint8 , MAGIC4BE('M','i','P','.') ) + GET_MPTHEADER_sized_member( nVolRampUp , uint16 , MAGIC4BE('V','R','.','.') ) + GET_MPTHEADER_sized_member( nResampling , uint32 , MAGIC4BE('R','.','.','.') ) + GET_MPTHEADER_sized_member( nCutSwing , uint8 , MAGIC4BE('C','S','.','.') ) + GET_MPTHEADER_sized_member( nResSwing , uint8 , MAGIC4BE('R','S','.','.') ) + GET_MPTHEADER_sized_member( nFilterMode , uint8 , MAGIC4BE('F','M','.','.') ) + GET_MPTHEADER_sized_member( wPitchToTempoLock , uint16 , MAGIC4BE('P','T','T','L') ) + GET_MPTHEADER_sized_member( nPluginVelocityHandling , uint8 , MAGIC4BE('P','V','E','H') ) + GET_MPTHEADER_sized_member( nPluginVolumeHandling , uint8 , MAGIC4BE('P','V','O','H') ) + GET_MPTHEADER_sized_member( PitchEnv.nReleaseNode , uint8 , MAGIC4BE('P','E','R','N') ) + GET_MPTHEADER_sized_member( PanEnv.nReleaseNode , uint8 , MAGIC4BE('A','E','R','N') ) + GET_MPTHEADER_sized_member( VolEnv.nReleaseNode , uint8 , MAGIC4BE('V','E','R','N') ) + GET_MPTHEADER_sized_member( PitchEnv.dwFlags , uint32 , MAGIC4BE('P','F','L','G') ) + GET_MPTHEADER_sized_member( PanEnv.dwFlags , uint32 , MAGIC4BE('A','F','L','G') ) + GET_MPTHEADER_sized_member( VolEnv.dwFlags , uint32 , MAGIC4BE('V','F','L','G') ) + GET_MPTHEADER_sized_member( midiPWD , int8 , MAGIC4BE('M','P','W','D') ) + } + + return false; +} + + +// Convert instrument flags which were read from 'dF..' extension to proper internal representation. +static void ConvertReadExtendedFlags(ModInstrument *pIns) +//------------------------------------------------------- +{ + // Flags of 'dF..' datafield in extended instrument properties. + enum + { + dFdd_VOLUME = 0x0001, + dFdd_VOLSUSTAIN = 0x0002, + dFdd_VOLLOOP = 0x0004, + dFdd_PANNING = 0x0008, + dFdd_PANSUSTAIN = 0x0010, + dFdd_PANLOOP = 0x0020, + dFdd_PITCH = 0x0040, + dFdd_PITCHSUSTAIN = 0x0080, + dFdd_PITCHLOOP = 0x0100, + dFdd_SETPANNING = 0x0200, + dFdd_FILTER = 0x0400, + dFdd_VOLCARRY = 0x0800, + dFdd_PANCARRY = 0x1000, + dFdd_PITCHCARRY = 0x2000, + dFdd_MUTE = 0x4000, + }; + + const uint32 dwOldFlags = pIns->dwFlags.GetRaw(); + + pIns->VolEnv.dwFlags.set(ENV_ENABLED, (dwOldFlags & dFdd_VOLUME) != 0); + pIns->VolEnv.dwFlags.set(ENV_SUSTAIN, (dwOldFlags & dFdd_VOLSUSTAIN) != 0); + pIns->VolEnv.dwFlags.set(ENV_LOOP, (dwOldFlags & dFdd_VOLLOOP) != 0); + pIns->VolEnv.dwFlags.set(ENV_CARRY, (dwOldFlags & dFdd_VOLCARRY) != 0); + + pIns->PanEnv.dwFlags.set(ENV_ENABLED, (dwOldFlags & dFdd_PANNING) != 0); + pIns->PanEnv.dwFlags.set(ENV_SUSTAIN, (dwOldFlags & dFdd_PANSUSTAIN) != 0); + pIns->PanEnv.dwFlags.set(ENV_LOOP, (dwOldFlags & dFdd_PANLOOP) != 0); + pIns->PanEnv.dwFlags.set(ENV_CARRY, (dwOldFlags & dFdd_PANCARRY) != 0); + + pIns->PitchEnv.dwFlags.set(ENV_ENABLED, (dwOldFlags & dFdd_PITCH) != 0); + pIns->PitchEnv.dwFlags.set(ENV_SUSTAIN, (dwOldFlags & dFdd_PITCHSUSTAIN) != 0); + pIns->PitchEnv.dwFlags.set(ENV_LOOP, (dwOldFlags & dFdd_PITCHLOOP) != 0); + pIns->PitchEnv.dwFlags.set(ENV_CARRY, (dwOldFlags & dFdd_PITCHCARRY) != 0); + pIns->PitchEnv.dwFlags.set(ENV_FILTER, (dwOldFlags & dFdd_FILTER) != 0); + + pIns->dwFlags.reset(); + pIns->dwFlags.set(INS_SETPANNING, (dwOldFlags & dFdd_SETPANNING) != 0); + pIns->dwFlags.set(INS_MUTE, (dwOldFlags & dFdd_MUTE) != 0); +} + + +void ReadInstrumentExtensionField(ModInstrument* pIns, const uint32 code, const uint16 size, FileReader &file) +//------------------------------------------------------------------------------------------------------------ +{ + if(code == MAGIC4BE('K','[','.','.')) + { + // skip keyboard mapping + file.Skip(size); + return; + } + + bool success = ReadInstrumentHeaderField(pIns, code, size, file); + + if(!success) + { + file.Skip(size); + return; + } + + if(code == MAGIC4BE('n','[','.','.')) + mpt::String::SetNullTerminator(pIns->name); + if(code == MAGIC4BE('f','n','[','.')) + mpt::String::SetNullTerminator(pIns->filename); + + if(code == MAGIC4BE('d','F','.','.')) // 'dF..' field requires additional processing. + ConvertReadExtendedFlags(pIns); +} + + +void ReadExtendedInstrumentProperty(ModInstrument* pIns, const uint32 code, FileReader &file) +//------------------------------------------------------------------------------------------- +{ + uint16 size = file.ReadUint16LE(); + if(!file.CanRead(size)) + { + return; + } + ReadInstrumentExtensionField(pIns, code, size, file); +} + + +void ReadExtendedInstrumentProperties(ModInstrument* pIns, FileReader &file) +//-------------------------------------------------------------------------- +{ + if(!file.ReadMagic("XTPM")) // 'MPTX' + { + return; + } + + while(file.CanRead(7)) + { + ReadExtendedInstrumentProperty(pIns, file.ReadUint32LE(), file); + } +} + + +void CSoundFile::LoadExtendedInstrumentProperties(FileReader &file, bool *pInterpretMptMade) +//------------------------------------------------------------------------------------------ +{ + if(!file.Re... [truncated message content] |
From: <man...@us...> - 2015-05-30 12:29:46
|
Revision: 5212 http://sourceforge.net/p/modplug/code/5212 Author: manxorist Date: 2015-05-30 12:29:40 +0000 (Sat, 30 May 2015) Log Message: ----------- [Ref] There are only 5 remaining places which still use type LONG in libopenmpt. Convert them to int32 and remove the typedef. Modified Paths: -------------- trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2015-05-30 12:19:49 UTC (rev 5211) +++ trunk/OpenMPT/common/typedefs.h 2015-05-30 12:29:40 UTC (rev 5212) @@ -540,7 +540,6 @@ typedef uint8 BYTE; typedef uint16 WORD; typedef uint32 DWORD; -typedef int32 LONG; typedef uint32 UINT; } } // namespace mpt::Legacy using namespace mpt::Legacy; Modified: trunk/OpenMPT/soundlib/Load_med.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp 2015-05-30 12:19:49 UTC (rev 5211) +++ trunk/OpenMPT/soundlib/Load_med.cpp 2015-05-30 12:29:40 UTC (rev 5212) @@ -163,7 +163,7 @@ WORD numtracks; // # of tracks (max 64) WORD numpseqs; // # of play sequences DWORD trackpans; // filepos of tracks pan values (BYTE array) - LONG flags3; // 0x1:stereo_mix, 0x2:free_panning, 0x4:GM/XG compatibility + int32 flags3; // 0x1:stereo_mix, 0x2:free_panning, 0x4:GM/XG compatibility WORD voladj; // vol_adjust (set to 100 if 0) WORD channels; // # of channels (4 if =0) BYTE mix_echotype; // 1:normal,2:xecho Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-30 12:19:49 UTC (rev 5211) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-30 12:29:40 UTC (rev 5212) @@ -3931,7 +3931,7 @@ void CSoundFile::ChannelVolSlide(ModChannel *pChn, ModCommand::PARAM param) const //------------------------------------------------------------------------------- { - LONG nChnSlide = 0; + int32 nChnSlide = 0; if (param) pChn->nOldChnVolSlide = param; else param = pChn->nOldChnVolSlide; if (((param & 0x0F) == 0x0F) && (param & 0xF0)) @@ -4863,8 +4863,8 @@ } -void CSoundFile::DoFreqSlide(ModChannel *pChn, LONG nFreqSlide) const -//------------------------------------------------------------------- +void CSoundFile::DoFreqSlide(ModChannel *pChn, int32 nFreqSlide) const +//-------------------------------------------------------------------- { if(!pChn->nPeriod) return; if(m_SongFlags[SONG_LINEARSLIDES] && GetType() != MOD_TYPE_XM) Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2015-05-30 12:19:49 UTC (rev 5211) +++ trunk/OpenMPT/soundlib/Sndfile.h 2015-05-30 12:29:40 UTC (rev 5212) @@ -870,7 +870,7 @@ void SetupChannelFilter(ModChannel *pChn, bool bReset, int flt_modifier = 256) const; // Low-Level effect processing - void DoFreqSlide(ModChannel *pChn, LONG nFreqSlide) const; + void DoFreqSlide(ModChannel *pChn, int32 nFreqSlide) const; void UpdateTimeSignature(); uint32 GetNumTicksOnCurrentRow() const Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-30 12:19:49 UTC (rev 5211) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-30 12:29:40 UTC (rev 5212) @@ -2063,7 +2063,7 @@ int32 pan = pChn->nRealPan; Limit(pan, 0, 256); - LONG realvol; + int32 realvol; if (m_PlayConfig.getUseGlobalPreAmp()) { realvol = (pChn->nRealVolume * kChnMasterVol) >> 7; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |