From: <sag...@us...> - 2014-04-27 19:05:09
|
Revision: 4022 http://sourceforge.net/p/modplug/code/4022 Author: saga-games Date: 2014-04-27 19:05:00 +0000 (Sun, 27 Apr 2014) Log Message: ----------- [Imp] Song Properties: Instantly populate tempo mode and mix mode boxes with allowed values when switching between formats. Modified Paths: -------------- trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2014-04-27 13:44:35 UTC (rev 4021) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2014-04-27 19:05:00 UTC (rev 4022) @@ -67,6 +67,7 @@ CDialog::OnInitDialog(); m_nType = sndFile.GetType(); m_nChannels = sndFile.GetNumChannels(); + initialized = false; // Mod types @@ -91,47 +92,6 @@ default: m_TypeBox.SetCurSel(0); break; } - // Tempo modes - - // Don't show new tempo modes for XM/IT, unless they are currently used - const bool showNewModes = (sndFile.GetType() == MOD_TYPE_MPT || (sndFile.m_SongFlags[SONG_ITPROJECT] != 0)); - - m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Classic"), tempo_mode_classic); - if(showNewModes || sndFile.m_nTempoMode == tempo_mode_alternative) - m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Alternative"), tempo_mode_alternative); - if(showNewModes || sndFile.m_nTempoMode == tempo_mode_modern) - m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Modern (accurate)"), tempo_mode_modern); - m_TempoModeBox.SetCurSel(0); - for(int i = m_TempoModeBox.GetCount(); i > 0; i--) - { - if(m_TempoModeBox.GetItemData(i) == sndFile.m_nTempoMode) - { - m_TempoModeBox.SetCurSel(i); - break; - } - } - - // Mix levels - - if(showNewModes || sndFile.GetMixLevels() == mixLevels_117RC3) // In XM/IT, this is only shown for backwards compatibility with existing tunes - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC3"), mixLevels_117RC3); - if(sndFile.GetMixLevels() == mixLevels_117RC2) // Only shown for backwards compatibility with existing tunes - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC2"), mixLevels_117RC2); - if(sndFile.GetMixLevels() == mixLevels_117RC1) // Dito - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC1"), mixLevels_117RC1); - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Original (MPT 1.16)"), mixLevels_original); - m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Compatible"), mixLevels_compatible); - - m_PlugMixBox.SetCurSel(0); - for(int i = m_PlugMixBox.GetCount(); i > 0; i--) - { - if(static_cast<mixLevels>(m_PlugMixBox.GetItemData(i)) == sndFile.GetMixLevels()) - { - m_PlugMixBox.SetCurSel(i); - break; - } - } - // Misc flags CheckDlgButton(IDC_CHK_COMPATPLAY, sndFile.GetModFlag(MSF_COMPATIBLE_PLAY)); @@ -157,6 +117,7 @@ SetDlgItemText(IDC_EDIT_SAVEDWITH, sndFile.madeWithTracker.c_str()); UpdateDialog(); + initialized = true; EnableToolTips(TRUE); return TRUE; } @@ -254,6 +215,49 @@ GetDlgItem(IDC_CHK_OLDRANDOM)->EnableWindow((ITorMPT && sndFile.GetModFlag(MSF_OLDVOLSWING)) ? TRUE : FALSE); GetDlgItem(IDC_CHK_OLDPITCH)->EnableWindow(sndFile.GetModFlag(MSF_OLD_MIDI_PITCHBENDS) ? TRUE : FALSE); + // Tempo modes + const tempoMode oldTempoMode = initialized ? static_cast<tempoMode>(m_TempoModeBox.GetItemData(m_TempoModeBox.GetCurSel())) : sndFile.m_nTempoMode; + m_TempoModeBox.ResetContent(); + // Don't show new tempo modes for XM/IT, unless they are currently used + const bool showNewModes = (type == MOD_TYPE_MPT || (sndFile.m_SongFlags[SONG_ITPROJECT] != 0)); + + m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Classic"), tempo_mode_classic); + if(showNewModes || sndFile.m_nTempoMode == tempo_mode_alternative) + m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Alternative"), tempo_mode_alternative); + if(showNewModes || sndFile.m_nTempoMode == tempo_mode_modern) + m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Modern (accurate)"), tempo_mode_modern); + m_TempoModeBox.SetCurSel(0); + for(int i = m_TempoModeBox.GetCount(); i > 0; i--) + { + if(static_cast<tempoMode>(m_TempoModeBox.GetItemData(i)) == oldTempoMode) + { + m_TempoModeBox.SetCurSel(i); + break; + } + } + + // Mix levels + const mixLevels oldMixLevels = initialized ? static_cast<mixLevels>(m_PlugMixBox.GetItemData(m_PlugMixBox.GetCurSel())) : sndFile.GetMixLevels(); + m_PlugMixBox.ResetContent(); + if(showNewModes || sndFile.GetMixLevels() == mixLevels_117RC3) // In XM/IT, this is only shown for backwards compatibility with existing tunes + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC3"), mixLevels_117RC3); + if(sndFile.GetMixLevels() == mixLevels_117RC2) // Only shown for backwards compatibility with existing tunes + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC2"), mixLevels_117RC2); + if(sndFile.GetMixLevels() == mixLevels_117RC1) // Ditto + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("OpenMPT 1.17RC1"), mixLevels_117RC1); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Original (MPT 1.16)"), mixLevels_original); + m_PlugMixBox.SetItemData(m_PlugMixBox.AddString("Compatible"), mixLevels_compatible); + + m_PlugMixBox.SetCurSel(0); + for(int i = m_PlugMixBox.GetCount(); i > 0; i--) + { + if(static_cast<mixLevels>(m_PlugMixBox.GetItemData(i)) == oldMixLevels) + { + m_PlugMixBox.SetCurSel(i); + break; + } + } + // Mixmode Box GetDlgItem(IDC_TEXT_MIXMODE)->ShowWindow(XMorITorMPT); m_PlugMixBox.ShowWindow(XMorITorMPT); @@ -294,9 +298,9 @@ int temp_nRPB = GetDlgItemInt(IDC_ROWSPERBEAT); int temp_nRPM = GetDlgItemInt(IDC_ROWSPERMEASURE); - if ((temp_nRPB > temp_nRPM)) + if(temp_nRPB > temp_nRPM) { - Reporting::Warning("Error: Rows per measure must be greater than or equal rows per beat."); + Reporting::Warning("Error: Rows per measure must be greater than or equal to rows per beat."); GetDlgItem(IDC_ROWSPERMEASURE)->SetFocus(); return false; } @@ -306,7 +310,7 @@ CHANNELINDEX maxChans = CSoundFile::GetModSpecifications(type).channelsMax; - if (sel > maxChans) + if(sel > maxChans) { CString error; error.Format("Error: Maximum number of channels for this module type is %d.", maxChans); @@ -361,7 +365,7 @@ sel = m_TempoModeBox.GetCurSel(); if (sel >= 0) { - sndFile.m_nTempoMode = m_TempoModeBox.GetItemData(sel); + sndFile.m_nTempoMode = static_cast<tempoMode>(m_TempoModeBox.GetItemData(sel)); } sel = m_PlugMixBox.GetCurSel(); @@ -452,8 +456,6 @@ if(pNMHDR->code == TTN_NEEDTEXTA) { - //strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText, - // strTipText.GetLength() + 1); // 80 chars max?! mpt::String::CopyN(pTTTA->szText, strTipText); } else Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2014-04-27 13:44:35 UTC (rev 4021) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2014-04-27 19:05:00 UTC (rev 4022) @@ -24,6 +24,7 @@ CSoundFile &sndFile; CHANNELINDEX m_nChannels; MODTYPE m_nType; + bool initialized; // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2014-04-27 13:44:35 UTC (rev 4021) +++ trunk/OpenMPT/mptrack/mptrack.rc 2014-04-27 19:05:00 UTC (rev 4022) @@ -1011,7 +1011,7 @@ CONTROL "Fast &Volume Slides (S3M)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,84,96,10 CONTROL "Compatible &Gxx (IT)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,84,84,10 CONTROL "Extended &filter range",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,96,81,10 - CONTROL "&ProTracker 1.x Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,96,108,10 + CONTROL "&ProTracker 1/2 Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,96,108,10 GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,84 LTEXT "Mix Levels:",IDC_TEXT_MIXMODE,18,134,42,8 COMBOBOX IDC_COMBO_MIXLEVELS,60,132,84,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -2371,6 +2371,8 @@ BEGIN ID_EDIT_GOTO_MENU "Go to row / channel / pattern / order" ID_CLEANUP_COMPO "Reset attributes to defaults (useful for creating sample packs)\nCompo Cleanup" + ID_SAMPLE_DRAW "Toggle Sample Drawing" + ID_SAMPLE_ADDSILENCE "Add Silence / Create Sample" ID_OVERFLOWPASTE "Toggle overflow paste\nToggle overflow paste" END Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2014-04-27 13:44:35 UTC (rev 4021) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2014-04-27 19:05:00 UTC (rev 4022) @@ -2011,7 +2011,11 @@ } } - WRITEMODULAR('T','M','.','.', m_nTempoMode); + { + WRITEMODULARHEADER('T','M','.','.', 1); + uint8 mode = static_cast<uint8>(m_nTempoMode); + fwrite(&mode, sizeof(mode), 1, f); + } WRITEMODULAR('P','M','M','.', m_nMixLevels); @@ -2158,7 +2162,7 @@ case MAGIC4BE('R','P','B','.'): ReadField(chunk, size, m_nDefaultRowsPerBeat); break; case MAGIC4BE('R','P','M','.'): ReadField(chunk, size, m_nDefaultRowsPerMeasure); break; case MAGIC4BE('C','.','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nChannels); break; - case MAGIC4BE('T','M','.','.'): ReadField(chunk, size, m_nTempoMode); break; + case MAGIC4BE('T','M','.','.'): ReadFieldCast(chunk, size, m_nTempoMode); break; case MAGIC4BE('P','M','M','.'): ReadFieldCast(chunk, size, m_nMixLevels); break; case MAGIC4BE('C','W','V','.'): ReadField(chunk, size, m_dwCreatedWithVersion); break; case MAGIC4BE('L','S','W','V'): ReadField(chunk, size, m_dwLastSavedWithVersion); break; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2014-04-27 13:44:35 UTC (rev 4021) +++ trunk/OpenMPT/soundlib/Sndfile.h 2014-04-27 19:05:00 UTC (rev 4022) @@ -380,7 +380,7 @@ CHANNELINDEX m_nMixStat; public: ROWINDEX m_nDefaultRowsPerBeat, m_nDefaultRowsPerMeasure; // default rows per beat and measure for this module // rewbs.betterBPM - BYTE m_nTempoMode; + tempoMode m_nTempoMode; ORDERINDEX m_nRestartPos; #ifdef MODPLUG_TRACKER This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |