From: <sag...@us...> - 2013-07-20 15:42:48
|
Revision: 2540 http://sourceforge.net/p/modplug/code/2540 Author: saga-games Date: 2013-07-20 15:42:35 +0000 (Sat, 20 Jul 2013) Log Message: ----------- [New] Added option to ignore certain MIDI CCs in CC to pattern functionality [Fix] Revision 2494 (pattern editor crash) was missing some lines of code to actually fix the issue. [Mod] OpenMPT: Version is now 1.22.03.11 Revision Links: -------------- http://sourceforge.net/p/modplug/code/2494 Modified Paths: -------------- trunk/OpenMPT/common/misc_util.h trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/common/misc_util.h =================================================================== --- trunk/OpenMPT/common/misc_util.h 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/common/misc_util.h 2013-07-20 15:42:35 UTC (rev 2540) @@ -35,6 +35,9 @@ else return o.str(); } +template<> inline std::string Stringify(const signed char& x) { return Stringify((signed int)x); } +template<> inline std::string Stringify(const unsigned char& x) { return Stringify((unsigned int)x); } + //Convert string to number. template<class T> inline T ConvertStrTo(const char *str) @@ -95,7 +98,7 @@ // Saturate the value of src to the domain of Tdst template <typename Tdst, typename Tsrc> inline Tdst saturate_cast(Tsrc src) -//------------------------------------- +//--------------------------------- { // This code tries not only to obviously avoid overflows but also to avoid signed/unsigned comparison warnings and type truncation warnings (which in fact would be safe here) by explicit casting. STATIC_ASSERT(std::numeric_limits<Tdst>::is_integer); Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/common/versionNumber.h 2013-07-20 15:42:35 UTC (rev 2540) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 03 -#define VER_MINORMINOR 10 +#define VER_MINORMINOR 11 //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/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-07-20 15:42:35 UTC (rev 2540) @@ -1153,6 +1153,7 @@ ON_COMMAND(IDC_MIDIPLAYCONTROL, OnSettingsChanged) ON_COMMAND(IDC_MIDIPLAYPATTERNONMIDIIN, OnSettingsChanged) ON_EN_CHANGE(IDC_EDIT3, OnSettingsChanged) + ON_EN_CHANGE(IDC_EDIT4, OnSettingsChanged) END_MESSAGE_MAP() @@ -1226,6 +1227,8 @@ SetDlgItemInt(IDC_EDIT3, TrackerSettings::Instance().midiVelocityAmp); m_SpinAmp.SetRange(1, 10000); + SetDlgItemText(IDC_EDIT4, TrackerSettings::Instance().IgnoredCCsToString().c_str()); + // Midi Import settings SetDlgItemInt(IDC_EDIT1, TrackerSettings::Instance().midiImportSpeed); SetDlgItemInt(IDC_EDIT2, TrackerSettings::Instance().midiImportPatternLen); @@ -1262,6 +1265,11 @@ TrackerSettings::Instance().midiImportSpeed = GetDlgItemInt(IDC_EDIT1); TrackerSettings::Instance().midiImportPatternLen = GetDlgItemInt(IDC_EDIT2); TrackerSettings::Instance().midiVelocityAmp = static_cast<uint16>(Clamp(GetDlgItemInt(IDC_EDIT3), 1u, 10000u)); + + CString cc; + GetDlgItemText(IDC_EDIT4, cc); + TrackerSettings::Instance().ParseIgnoredCCs(cc); + if (pMainFrm) pMainFrm->SetupMidi(m_dwMidiSetup, m_nMidiDevice); CPropertyPage::OnOK(); } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-07-20 15:42:35 UTC (rev 2540) @@ -425,6 +425,7 @@ m_MixerSettings.glVolumeRampUpSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampUpSamples", m_MixerSettings.glVolumeRampUpSamples, iniFile); m_MixerSettings.glVolumeRampDownSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampDownSamples", m_MixerSettings.glVolumeRampDownSamples, iniFile); + // MIDI Setup m_dwMidiSetup = CMainFrame::GetPrivateProfileDWord("MIDI Settings", "MidiSetup", m_dwMidiSetup, iniFile); m_nMidiDevice = CMainFrame::GetPrivateProfileDWord("MIDI Settings", "MidiDevice", m_nMidiDevice, iniFile); aftertouchBehaviour = static_cast<RecordAftertouchOptions>(CMainFrame::GetPrivateProfileDWord("MIDI Settings", "AftertouchBehaviour", aftertouchBehaviour, iniFile)); @@ -437,6 +438,7 @@ midiVelocityAmp = 200; m_dwMidiSetup &= ~0x40; } + ParseIgnoredCCs(CMainFrame::GetPrivateProfileCString("MIDI Settings", "IgnoredCCs", "", iniFile)); m_dwPatternSetup = CMainFrame::GetPrivateProfileDWord("Pattern Editor", "PatternSetup", m_dwPatternSetup, iniFile); if(vIniVersion < MAKE_VERSION_NUMERIC(1, 17, 02, 50)) @@ -852,12 +854,14 @@ CMainFrame::WritePrivateProfileLong("Sound Settings", "VolumeRampUpSamples", m_MixerSettings.glVolumeRampUpSamples, iniFile); CMainFrame::WritePrivateProfileLong("Sound Settings", "VolumeRampDownSamples", m_MixerSettings.glVolumeRampDownSamples, iniFile); + // MIDI Settings CMainFrame::WritePrivateProfileDWord("MIDI Settings", "MidiSetup", m_dwMidiSetup, iniFile); CMainFrame::WritePrivateProfileDWord("MIDI Settings", "MidiDevice", m_nMidiDevice, iniFile); CMainFrame::WritePrivateProfileDWord("MIDI Settings", "AftertouchBehaviour", aftertouchBehaviour, iniFile); CMainFrame::WritePrivateProfileLong("MIDI Settings", "MidiVelocityAmp", midiVelocityAmp, iniFile); CMainFrame::WritePrivateProfileLong("MIDI Settings", "MidiImportSpeed", midiImportSpeed, iniFile); CMainFrame::WritePrivateProfileLong("MIDI Settings", "MidiImportPatLen", midiImportPatternLen, iniFile); + WritePrivateProfileString("MIDI Settings", "IgnoredCCs", IgnoredCCsToString().c_str(), iniFile); CMainFrame::WritePrivateProfileDWord("Pattern Editor", "PatternSetup", m_dwPatternSetup, iniFile); CMainFrame::WritePrivateProfileDWord("Pattern Editor", "RowSpacing", m_nRowHighlightMeasures, iniFile); @@ -989,6 +993,43 @@ } +std::string TrackerSettings::IgnoredCCsToString() const +//----------------------------------------------------- +{ + std::string cc; + bool first = true; + for(int i = 0; i < 128; i++) + { + if(midiIgnoreCCs[i]) + { + if(!first) + { + cc += ","; + } + cc += Stringify(i); + first = false; + } + } + return cc; +} + + +void TrackerSettings::ParseIgnoredCCs(CString cc) +//----------------------------------------------- +{ + midiIgnoreCCs.reset(); + int curPos = 0; + CString ccToken= cc.Tokenize(_T(", "), curPos); + while(ccToken != _T("")) + { + int ccNumber = ConvertStrTo<int>(ccToken); + if(ccNumber >= 0 && ccNumber <= 127) + midiIgnoreCCs.set(ccNumber); + ccToken = cc.Tokenize(_T(", "), curPos); + }; +} + + // retrieve / set default directory from given string and store it our setup variables void TrackerSettings::SetDirectory(const LPCTSTR szFilenameFrom, Directory dir, TCHAR (&directories)[NUM_DIRS][_MAX_PATH], bool bStripFilename) //--------------------------------------------------------------------------------------------------------------------------------------------- Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2013-07-20 15:42:35 UTC (rev 2540) @@ -16,6 +16,7 @@ #include "../sounddsp/EQ.h" #include "../sounddsp/DSP.h" #include "../sounddsp/Reverb.h" +#include <bitset> ///////////////////////////////////////////////////////////////////////// // Default directories @@ -198,6 +199,7 @@ DWORD m_dwMidiSetup; RecordAftertouchOptions aftertouchBehaviour; uint16 midiVelocityAmp; + std::bitset<128> midiIgnoreCCs; // Pattern Setup UINT gnPatternSpacing; @@ -270,6 +272,9 @@ // Get settings object singleton static TrackerSettings &Instance() { return settings; } + std::string IgnoredCCsToString() const; + void ParseIgnoredCCs(CString cc); + protected: void LoadINISettings(const CString &iniFile); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2013-07-20 15:42:35 UTC (rev 2540) @@ -1361,6 +1361,7 @@ { UpdateScrollSize(); InvalidatePattern(true); + SanitizeCursor(); } } } @@ -3288,6 +3289,7 @@ { InvalidatePattern(true); } + SanitizeCursor(); } } } @@ -3855,7 +3857,10 @@ // Checking whether to record MIDI controller change as MIDI macro change. // Don't write this if command was already written by MIDI mapping. - if((paramValue == uint8_max || sndFile.GetType() != MOD_TYPE_MPT) && IsEditingEnabled() && (TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDIMACROCONTROL)) + if((paramValue == uint8_max || sndFile.GetType() != MOD_TYPE_MPT) + && IsEditingEnabled() + && (TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDIMACROCONTROL) + && !TrackerSettings::Instance().midiIgnoreCCs[nByte1 & 0x7F]) { const bool liveRecord = IsLiveRecord(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-07-13 17:33:15 UTC (rev 2539) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-07-20 15:42:35 UTC (rev 2540) @@ -568,7 +568,7 @@ GROUPBOX "Colour Presets",IDC_STATIC,6,234,264,42 END -IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 281 +IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 269 STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "MIDI" FONT 8, "MS Shell Dlg", 0, 0, 0x0 @@ -585,7 +585,7 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,84,237,12 CONTROL "Pass MIDI to active instrument plugin",IDC_MIDI_TO_PLUGIN, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,96,237,12 - GROUPBOX "MIDI Recording - Volume and Controllers",IDC_STATIC,6,120,258,78 + GROUPBOX "MIDI Recording - Volume and Controllers",IDC_STATIC,6,120,258,90 CONTROL "Record MIDI Note Velocity, amplify by",IDC_CHECK1, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,138,144,10 EDITTEXT IDC_EDIT3,162,137,42,12,ES_AUTOHSCROLL | ES_NUMBER @@ -595,15 +595,17 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,150,237,12 CONTROL "Record MIDI Controller changes as MIDI Macro changes in pattern",IDC_MIDI_MACRO_CONTROL, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,162,237,12 - LTEXT "Record Aftertouch Messages",IDC_STATIC,30,174,108,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO2,138,174,120,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "MIDI File Import",IDC_STATIC,6,204,260,36 - LTEXT "Speed:",IDC_STATIC,18,222,24,8 - EDITTEXT IDC_EDIT1,48,220,39,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,78,222,11,14 - LTEXT "Pattern Size:",IDC_STATIC,102,222,56,8 - EDITTEXT IDC_EDIT2,156,220,39,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,180,222,11,14 + LTEXT "Ignore CCs (e.g. 1,123,127)",IDC_STATIC,30,176,108,8 + EDITTEXT IDC_EDIT4,138,174,120,12,ES_AUTOHSCROLL + LTEXT "Record Aftertouch Messages",IDC_STATIC,30,192,108,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO2,138,192,120,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "MIDI File Import",IDC_STATIC,6,216,260,36 + LTEXT "Speed:",IDC_STATIC,18,234,24,8 + EDITTEXT IDC_EDIT1,48,232,39,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,78,234,11,14 + LTEXT "Pattern Size:",IDC_STATIC,102,234,56,8 + EDITTEXT IDC_EDIT2,156,232,39,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,180,234,11,14 END IDD_LOADRAWSAMPLE DIALOGEX 0, 0, 178, 95 @@ -1634,7 +1636,7 @@ IDD_OPTIONS_MIDI, DIALOG BEGIN RIGHTMARGIN, 240 - BOTTOMMARGIN, 278 + BOTTOMMARGIN, 266 END IDD_LOADRAWSAMPLE, DIALOG This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |