From: <sag...@us...> - 2015-06-13 14:34:51
|
Revision: 5306 http://sourceforge.net/p/modplug/code/5306 Author: saga-games Date: 2015-06-13 14:34:46 +0000 (Sat, 13 Jun 2015) Log Message: ----------- [Imp] Export: Allow the user to choose a sample slot to render into. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2015-06-13 14:18:04 UTC (rev 5305) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2015-06-13 14:34:46 UTC (rev 5306) @@ -79,6 +79,7 @@ ON_CBN_SELCHANGE(IDC_COMBO4, OnChannelsChanged) ON_CBN_SELCHANGE(IDC_COMBO6, OnDitherChanged) ON_CBN_SELCHANGE(IDC_COMBO2, OnFormatChanged) + ON_CBN_SELCHANGE(IDC_COMBO9, OnSampleSlotChanged) END_MESSAGE_MAP() @@ -117,6 +118,7 @@ DDX_Control(pDX, IDC_SPIN3, m_SpinMinOrder); DDX_Control(pDX, IDC_SPIN4, m_SpinMaxOrder); DDX_Control(pDX, IDC_SPIN5, m_SpinLoopCount); + DDX_Control(pDX, IDC_COMBO9, m_CbnSampleSlot); DDX_Control(pDX, IDC_COMBO3, m_CbnGenre); DDX_Control(pDX, IDC_EDIT10, m_EditGenre); @@ -184,6 +186,17 @@ } } + // Fill list of sample slots to render into + m_CbnSampleSlot.AddString(_T("<empty slot>")); + CString s; + for(SAMPLEINDEX smp = 1; smp <= m_SndFile.GetNumSamples(); smp++) + { + s.Format(_T("%02u: %s%s"), smp, m_SndFile.GetSample(smp).HasSampleData() ? _T("*") : _T(""), m_SndFile.GetSampleName(smp)); + m_CbnSampleSlot.AddString(s); + } + if(m_Settings.sampleSlot > m_SndFile.GetNumChannels()) m_Settings.sampleSlot = 0; + m_CbnSampleSlot.SetCurSel(m_Settings.sampleSlot); + CheckRadioButton(IDC_RADIO3, IDC_RADIO4, m_Settings.outputToSample ? IDC_RADIO4 : IDC_RADIO3); UpdateDialog(); @@ -576,6 +589,7 @@ bSel = (IsDlgButtonChecked(IDC_RADIO4) != BST_UNCHECKED) ? FALSE : TRUE; m_CbnFileType.EnableWindow(bSel); + m_CbnSampleSlot.EnableWindow(!bSel); if(!bSel) { // Render to sample: Always use WAV @@ -588,6 +602,20 @@ } +void CWaveConvert::OnSampleSlotChanged() +//-------------------------------------- +{ + CheckRadioButton(IDC_RADIO3, IDC_RADIO4, IDC_RADIO4); + // When choosing a specific sample slot, we cannot use per-channel or per-instrument export + if(m_CbnSampleSlot.GetCurSel() > 0) + { + CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); + CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); + } + UpdateDialog(); +} + + void CWaveConvert::OnCheck1() //--------------------------- { @@ -638,7 +666,15 @@ void CWaveConvert::OnCheckChannelMode() //------------------------------------- { - CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); + if(IsDlgButtonChecked(IDC_CHECK4) != BST_UNCHECKED) + { + CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); + m_CbnSampleSlot.SetCurSel(0); + m_CbnSampleSlot.EnableWindow(FALSE); + } else + { + m_CbnSampleSlot.EnableWindow(IsDlgButtonChecked(IDC_RADIO4)); + } } @@ -646,7 +682,15 @@ void CWaveConvert::OnCheckInstrMode() //----------------------------------- { - CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); + if(IsDlgButtonChecked(IDC_CHECK6) != BST_UNCHECKED) + { + CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); + m_CbnSampleSlot.SetCurSel(0); + m_CbnSampleSlot.EnableWindow(FALSE); + } else + { + m_CbnSampleSlot.EnableWindow(IsDlgButtonChecked(IDC_RADIO4)); + } } @@ -688,6 +732,8 @@ m_bChannelMode = IsDlgButtonChecked(IDC_CHECK4) != BST_UNCHECKED; m_bInstrumentMode= IsDlgButtonChecked(IDC_CHECK6) != BST_UNCHECKED; + m_Settings.sampleSlot = static_cast<SAMPLEINDEX>(m_CbnSampleSlot.GetCurSel()); + SaveEncoderSettings(); Encoder::Settings &encSettings = m_Settings.GetEncoderSettings(); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-13 14:18:04 UTC (rev 5305) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-13 14:34:46 UTC (rev 5306) @@ -1831,21 +1831,29 @@ if(f.IsValid()) { FileReader file = GetFileReader(f); - SAMPLEINDEX smp = m_SndFile.GetNextFreeSample(); + SAMPLEINDEX smp = wsdlg.m_Settings.sampleSlot; + if(smp == 0 || smp > GetNumSamples()) smp = m_SndFile.GetNextFreeSample(); if(smp == SAMPLEINDEX_INVALID) { Reporting::Error(_T("Too many samples!")); cancel = true; } - if(!cancel && m_SndFile.ReadSampleFromFile(smp, file, false)) + if(!cancel) { - UpdateAllViews(nullptr, SampleHint().Info().Data().Names()); - if(m_SndFile.GetNumInstruments()) + GetSampleUndo().PrepareUndo(smp, sundo_replace, "Render To Sample"); + if(m_SndFile.ReadSampleFromFile(smp, file, false)) { - InsertInstrument(smp); - UpdateAllViews(nullptr, InstrumentHint().Info().Names()); + UpdateAllViews(nullptr, SampleHint().Info().Data().Names()); + if(m_SndFile.GetNumInstruments()) + { + InsertInstrument(smp); + UpdateAllViews(nullptr, InstrumentHint().Info().Names()); + } + SetModified(); + } else + { + GetSampleUndo().RemoveLastUndoStep(smp); } - SetModified(); } } } Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2015-06-13 14:18:04 UTC (rev 5305) +++ trunk/OpenMPT/mptrack/mod2wave.h 2015-06-13 14:34:46 UTC (rev 5306) @@ -51,6 +51,7 @@ int repeatCount; ORDERINDEX minOrder, maxOrder; + SAMPLEINDEX sampleSlot; bool normalize : 1; bool silencePlugBuffers : 1; @@ -76,7 +77,7 @@ uint64 m_dwFileLimit, m_dwSongLimit; ORDERINDEX m_nNumOrders; - CComboBox m_CbnFileType, m_CbnSampleRate, m_CbnChannels, m_CbnDither, m_CbnSampleFormat; + CComboBox m_CbnFileType, m_CbnSampleRate, m_CbnChannels, m_CbnDither, m_CbnSampleFormat, m_CbnSampleSlot; CSpinButtonCtrl m_SpinLoopCount, m_SpinMinOrder, m_SpinMaxOrder; bool m_bGivePlugsIdleTime; @@ -118,7 +119,8 @@ afx_msg void OnChannelsChanged(); afx_msg void OnDitherChanged(); afx_msg void OnFormatChanged(); - afx_msg void OnPlayerOptions(); //rewbs.resamplerConf + afx_msg void OnPlayerOptions(); + afx_msg void OnSampleSlotChanged(); DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-13 14:18:04 UTC (rev 5305) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-13 14:34:46 UTC (rev 5306) @@ -705,8 +705,9 @@ RTEXT "Year:",IDC_STATIC,324,194,18,8 EDITTEXT IDC_EDIT9,348,192,30,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Export To:",IDC_STATIC,6,219,48,8 - CONTROL "&File",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_GROUP,54,219,30,8 - CONTROL "S&le Slot",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,96,219,90,8 + CONTROL "&File",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_GROUP,54,219,38,8 + CONTROL "S&le Slot",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,96,219,56,8 + COMBOBOX IDC_COMBO9,156,217,96,119,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PROGRESS DIALOG 0, 0, 186, 55 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |