From: <re...@us...> - 2006-08-20 21:40:58
|
Revision: 167 Author: rewbs Date: 2006-08-20 14:39:55 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=167&view=rev Log Message: ----------- <rewbs> First attempt at providing initial MPTm and tuning mode code in new branch. Modified Paths: -------------- branches/OpenMPT_MPTm_Tuning/mptrack/AutoSaver.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Globals.cpp branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.h branches/OpenMPT_MPTm_Tuning/mptrack/View_gen.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_smp.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_tre.cpp branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.vcproj branches/OpenMPT_MPTm_Tuning/mptrack/resource.h branches/OpenMPT_MPTm_Tuning/soundlib/Dlsbank.cpp branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_DBM.CPP branches/OpenMPT_MPTm_Tuning/soundlib/Load_ams.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_it.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_mdl.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_mid.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_mod.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_mt2.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_s3m.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_xm.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Sampleio.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Snd_fx.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.h branches/OpenMPT_MPTm_Tuning/soundlib/Sndmix.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Tables.cpp Added Paths: ----------- branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/ branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/local_tunings.tc branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/standard/ branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/standard/std_tunings.tc branches/OpenMPT_MPTm_Tuning/mptrack/serialization_utils.cpp branches/OpenMPT_MPTm_Tuning/mptrack/serialization_utils.h branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.h branches/OpenMPT_MPTm_Tuning/soundlib/MPT_module.cpp branches/OpenMPT_MPTm_Tuning/soundlib/MPT_module.h branches/OpenMPT_MPTm_Tuning/soundlib/tuning.cpp branches/OpenMPT_MPTm_Tuning/soundlib/tuning.h branches/OpenMPT_MPTm_Tuning/soundlib/tuningCollection.cpp branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h branches/OpenMPT_MPTm_Tuning/soundlib/tuningcollection.h Modified: branches/OpenMPT_MPTm_Tuning/mptrack/AutoSaver.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/AutoSaver.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/AutoSaver.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -206,6 +206,9 @@ name.Append(".it"); } break; + case MOD_TYPE_MPT: + name.Append(".mptm"); + break; case MOD_TYPE_XM: name.Append(".xm"); break; @@ -241,6 +244,9 @@ pSndFile->SaveITProject(fileName) : pSndFile->SaveIT(fileName, 0); break; + case MOD_TYPE_MPT: + success = pSndFile->SaveMPT(fileName, 0); + break; //default: //Do nothing } Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -215,6 +215,8 @@ // -> DESC="IT project files (.itp)" // case MOD_TYPE_IT: pszModType = "IT (Impulse Tracker)"; break; case MOD_TYPE_IT: pszModType = m_pSndFile->m_dwSongFlags & SONG_ITPROJECT ? "ITP (IT Project)" : "IT (Impulse Tracker)"; break; + case MOD_TYPE_MPT: pszModType = "MPTM (OpenMPT)"; break; + // -! NEW_FEATURE#0023 } wsprintf(s, "%s, %d channels", pszModType, m_pSndFile->m_nChannels); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -7,6 +7,7 @@ #include "ctrl_ins.h" #include "view_ins.h" #include "dlg_misc.h" +#include "tuningDialog.h" #include "misc_util.h" #include <vector> #include <string> @@ -439,7 +440,7 @@ INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; if ((penv) && (m_nNote < 120)) { - if (!m_bIns && (pSndFile->m_nType & MOD_TYPE_IT)) + if (!m_bIns && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) { UINT n = penv->NoteMap[m_nNote]; BOOL bOk = FALSE; @@ -496,7 +497,7 @@ return true; } - else if ((!m_bIns) && (pSndFile->m_nType & MOD_TYPE_IT)) { //in note column + else if ((!m_bIns) && (pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) { //in note column UINT n = penv->NoteMap[m_nNote]; @@ -649,6 +650,7 @@ ON_CBN_SELCHANGE(IDC_FILTERMODE, OnFilterModeChanged) ON_COMMAND(ID_INSTRUMENT_SAMPLEMAP, OnEditSampleMap) //}}AFX_MSG_MAP + ON_CBN_SELCHANGE(IDC_COMBOTUNING, OnCbnSelchangeCombotuning) ON_EN_CHANGE(IDC_EDIT_PITCHTEMPOLOCK, OnEnChangeEditPitchtempolock) ON_BN_CLICKED(IDC_CHECK_PITCHTEMPOLOCK, OnBnClickedCheckPitchtempolock) ON_EN_KILLFOCUS(IDC_EDIT_PITCHTEMPOLOCK, OnEnKillfocusEditPitchtempolock) @@ -696,6 +698,7 @@ DDX_Control(pDX, IDC_SLIDER5, m_SliderAttack); DDX_Control(pDX, IDC_SPIN1, m_SpinAttack); // -! NEW_FEATURE#0027 + DDX_Control(pDX, IDC_COMBOTUNING, m_ComboTuning); DDX_Control(pDX, IDC_CHECK_PITCHTEMPOLOCK, m_CheckPitchTempoLock); DDX_Control(pDX, IDC_EDIT_PITCHTEMPOLOCK, m_EditPitchTempoLock); //}}AFX_DATA_MAP @@ -815,6 +818,24 @@ m_SpinInstrument.SetFocus(); + //-->Setting tunings to Combobox + for(size_t i = 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).GetName().c_str()); + } + for(size_t i = 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).GetName().c_str()); + } + for(size_t i = 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); i++) + { + m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).GetName().c_str()); + } + m_ComboTuning.AddString("Control tunings..."); + m_ComboTuning.SetCurSel(0); + + //<--Setting tunings to Combobox + CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); //OnBnClickedCheckPitchtempolock(); m_EditPitchTempoLock.SetLimitText(4); @@ -1010,9 +1031,10 @@ if (!m_bInitialized) dwHintMask |= HINT_MODTYPE; if (dwHintMask & HINT_MODTYPE) { - BOOL bITonly = ((m_pSndFile->m_nType == MOD_TYPE_IT) && (m_pSndFile->m_nInstruments)) ? TRUE : FALSE; + BOOL bITonly = ((m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (m_pSndFile->m_nInstruments)) ? TRUE : FALSE; //rewbs.instroVSTi - BOOL bITandXM = (((m_pSndFile->m_nType == MOD_TYPE_IT) || (m_pSndFile->m_nType == MOD_TYPE_XM)) && (m_pSndFile->m_nInstruments)) ? TRUE : FALSE; + BOOL bITandXM = (((m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) || (m_pSndFile->m_nType == MOD_TYPE_XM)) && (m_pSndFile->m_nInstruments)) ? TRUE : FALSE; + bool bMPTOnly = ((m_pSndFile->m_nType == MOD_TYPE_MPT) && (m_pSndFile->m_nInstruments)) ? TRUE : FALSE; ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT10), bITandXM); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT11), bITandXM); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT7), bITandXM); @@ -1052,6 +1074,7 @@ m_SliderResonance.EnableWindow(bITonly); m_SpinInstrument.SetRange(1, m_pSndFile->m_nInstruments); m_SpinInstrument.EnableWindow((m_pSndFile->m_nInstruments) ? TRUE : FALSE); + m_ComboTuning.EnableWindow(bMPTOnly); m_EditPitchTempoLock.EnableWindow(bITonly); m_CheckPitchTempoLock.EnableWindow(bITonly); } @@ -1124,7 +1147,7 @@ m_ComboPPC.SetCurSel(penv->nPPC); SetDlgItemInt(IDC_EDIT15, penv->nPPS); // Filter - if (m_pSndFile->m_nType & MOD_TYPE_IT) + if (m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) { m_CheckCutOff.SetCheck((penv->nIFC & 0x80) ? TRUE : FALSE); m_CheckResonance.SetCheck((penv->nIFR & 0x80) ? TRUE : FALSE); @@ -1145,6 +1168,8 @@ if(n == 0) SetDlgItemText(IDC_EDIT2,"default"); else SetDlgItemInt(IDC_EDIT2,n); // -! NEW_FEATURE#0027 + + UpdateTuningComboBox(); if(penv->wPitchToTempoLock > 0) //Current instrument uses pitchTempoLock. CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_CHECKED); else @@ -1411,7 +1436,7 @@ if (m_pModDoc) { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - if ((pSndFile->m_nType & MOD_TYPE_IT) + if ((pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (pSndFile->m_nInstruments > 0) && (CMainFrame::GetInputHandler()->ShiftPressed())) //rewbs.customKeys { @@ -1438,7 +1463,7 @@ if (m_pModDoc) { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - if ((pSndFile->m_nType & MOD_TYPE_IT) && (pSndFile->m_nInstruments > 0)) + if ((pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (pSndFile->m_nInstruments > 0)) { BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; LONG smp = m_pModDoc->InsertInstrument(0, m_nInstrument); @@ -1503,10 +1528,10 @@ // "FastTracker II Instruments (*.xi)|*.xi|" // "Impulse Tracker Instruments (*.iti)|*.iti||", // this); - CFileDialog dlg(FALSE, (m_pSndFile->m_nType & MOD_TYPE_IT) ? "iti" : "xi", + CFileDialog dlg(FALSE, (m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) ? "iti" : "xi", szFileName, OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - ( m_pSndFile->m_nType & MOD_TYPE_IT ? "Impulse Tracker Instruments (*.iti)|*.iti|" + ( m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT) ? "Impulse Tracker Instruments (*.iti)|*.iti|" "FastTracker II Instruments (*.xi)|*.xi||" : "FastTracker II Instruments (*.xi)|*.xi|" "Impulse Tracker Instruments (*.iti)|*.iti||" ), @@ -1649,7 +1674,7 @@ if (nVol != (int)penv->nGlobalVol) { penv->nGlobalVol = nVol; - if (m_pSndFile->m_nType == MOD_TYPE_IT) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) m_pModDoc->SetModified(); // -> CODE#0023 // -> DESC="IT project files (.itp)" m_pSndFile->instrumentModified[m_nInstrument-1] = TRUE; @@ -1691,7 +1716,7 @@ if (nPan != (int)penv->nPan) { penv->nPan = nPan; - if (m_pSndFile->m_nType == MOD_TYPE_IT) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) m_pModDoc->SetModified(); // -> CODE#0023 // -> DESC="IT project files (.itp)" m_pSndFile->instrumentModified[m_nInstrument-1] = TRUE; @@ -2363,6 +2388,121 @@ return 0; } //end rewbs.customKeys + +void CCtrlInstruments::OnCbnSelchangeCombotuning() +//------------------------------------------------ +{ + if (IsLocked() || m_pModDoc == NULL || m_pSndFile == NULL) return; + + INSTRUMENTHEADER* pInstH = m_pSndFile->Headers[m_nInstrument]; + if(pInstH == 0) + return; + + CTuningCollection* tc = 0; + size_t sel = m_ComboTuning.GetCurSel(); + if(sel < CSoundFile::s_TuningsSharedStandard.GetNumTunings()) + tc = &CSoundFile::s_TuningsSharedStandard; + else + { + sel -= CSoundFile::s_TuningsSharedStandard.GetNumTunings(); + if(sel < CSoundFile::s_TuningsSharedLocal.GetNumTunings()) + tc = &CSoundFile::s_TuningsSharedLocal; + else + { + sel -= CSoundFile::s_TuningsSharedLocal.GetNumTunings(); + if(sel < m_pSndFile->m_TuningsTuneSpecific.GetNumTunings()) + tc = &m_pSndFile->m_TuningsTuneSpecific; + } + } + + if(tc) + { + BEGIN_CRITICAL(); + pInstH->pTuning = &tc->GetTuning(sel); + END_CRITICAL(); + m_pModDoc->SetModified(); + return; + } + + + //Creating vector for the CTuningDialog. + vector<CTuningCollection*> v; + v.push_back(&m_pSndFile->s_TuningsSharedStandard); + v.push_back(&m_pSndFile->s_TuningsSharedLocal); + v.push_back(&m_pSndFile->m_TuningsTuneSpecific); + CTuningDialog td(this, v, pInstH->pTuning); + td.DoModal(); + + //Recreating tuning combobox so that possible + //new tuning(s) come visible. + while(m_ComboTuning.GetCount() > 0) + m_ComboTuning.DeleteString(0); + for(size_t i = 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).GetName().c_str()); + } + for(size_t i = 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).GetName().c_str()); + } + for(size_t i = 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); i++) + { + m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).GetName().c_str()); + } + m_ComboTuning.AddString("Control tunings..."); + m_ComboTuning.SetCurSel(0); + + UpdateTuningComboBox(); + + + //TODO: Update notemap window with correct notenames. +} + + +void CCtrlInstruments::UpdateTuningComboBox() +//------------------------------------------- +{ + if (m_pModDoc == 0 || m_pSndFile == 0 + || m_nInstrument > m_pSndFile->GetNumInstruments() + || m_pSndFile->Headers[m_nInstrument]->pTuning == 0) return; + + for(size_t i = 0; i < CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++) + { + if(m_pSndFile->Headers[m_nInstrument]->pTuning == &CSoundFile::s_TuningsSharedStandard.GetTuning(i)) + { + m_ComboTuning.SetCurSel(i); + return; + } + } + + for(size_t i = 0; i < CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i++) + { + if(m_pSndFile->Headers[m_nInstrument]->pTuning == &CSoundFile::s_TuningsSharedLocal.GetTuning(i)) + { + m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunings()); + return; + } + } + + for(size_t i = 0; i < m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); i++) + { + if(m_pSndFile->Headers[m_nInstrument]->pTuning == &m_pSndFile->m_TuningsTuneSpecific.GetTuning(i)) + { + m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunings() + CSoundFile::s_TuningsSharedLocal.GetNumTunings()); + return; + } + } + + + string str = string("Tuning ") + m_pSndFile->Headers[m_nInstrument]->pTuning->GetName() + + string(" was not found. Setting to default tuning."); + MessageBox(str.c_str()); + BEGIN_CRITICAL(); + m_pSndFile->Headers[m_nInstrument]->pTuning = m_pSndFile->Headers[m_nInstrument]->s_DefaultTuning; + END_CRITICAL(); + m_ComboTuning.SetCurSel(0); +} + void CCtrlInstruments::OnEnChangeEditPitchtempolock() //---------------------------------------------------- { Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h 2006-08-20 21:39:55 UTC (rev 167) @@ -78,6 +78,10 @@ CSpinButtonCtrl m_SpinAttack; // -! NEW_FEATURE#0027 + //Tuning + CComboBox m_ComboTuning; + void UpdateTuningComboBox(); + //Pitch/Tempo lock CEdit m_EditPitchTempoLock; CButton m_CheckPitchTempoLock; @@ -148,6 +152,7 @@ afx_msg void OnEditSampleMap(); afx_msg void TogglePluginEditor(); //rewbs.instroVSTi afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM); //rewbs.customKeys + afx_msg void OnCbnSelchangeCombotuning(); afx_msg void OnEnChangeEditPitchtempolock(); afx_msg void OnBnClickedCheckPitchtempolock(); afx_msg void OnEnKillfocusEditPitchtempolock(); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -338,7 +338,7 @@ } m_pSndFile->GetPatternName(nPat, s, sizeof(s)); m_EditPatName.SetWindowText(s); - BOOL bXMIT = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) ? TRUE : FALSE; + BOOL bXMIT = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_ToolBar.EnableButton(ID_PATTERN_MIDIMACRO, bXMIT); m_ToolBar.EnableButton(ID_PATTERN_PROPERTIES, bXMIT); m_ToolBar.EnableButton(ID_PATTERN_EXPAND, bXMIT); @@ -822,7 +822,7 @@ UINT nCurOrd = m_OrderList.GetCurSel(); UINT pat = pSndFile->Order[nCurOrd]; UINT rows = 64; - if ((pat < MAX_PATTERNS) && (pSndFile->Patterns[pat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT))) + if ((pat < MAX_PATTERNS) && (pSndFile->Patterns[pat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) { rows = pSndFile->PatternSize[pat]; if (rows < 32) rows = 32; @@ -852,7 +852,7 @@ UINT rows = 64; if (nCurPat < MAX_PATTERNS) { - if ((pSndFile->Patterns[nCurPat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT))) + if ((pSndFile->Patterns[nCurPat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) { rows = pSndFile->PatternSize[nCurPat]; if (rows < 16) rows = 16; @@ -1074,7 +1074,7 @@ if (strcmp(s, sold)) { m_pSndFile->SetPatternName(nPat, s); - if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, (nPat << 24) | HINT_PATNAMES, this); } } @@ -1204,4 +1204,5 @@ return false; } + //end rewbs.instroVST \ No newline at end of file Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -651,7 +651,7 @@ AppendMenu(hMenu, MF_STRING|greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern"); AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERNCOPY, "&Copy Pattern"); AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERNPASTE, "P&aste Pattern"); - if ((m_pModDoc) && (m_pModDoc->GetSoundFile()->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT))) + if ((m_pModDoc) && (m_pModDoc->GetSoundFile()->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERN_PROPERTIES, "&Properties..."); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -527,7 +527,7 @@ m_ComboSustainType.AddString("Off"); m_ComboSustainType.AddString("On"); // Bidirectional Loops - if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) + if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) { m_ComboLoopType.AddString("Bidi"); m_ComboSustainType.AddString("Bidi"); @@ -545,19 +545,19 @@ m_SpinSustainEnd.SetRange(-1, 1); m_SpinSustainEnd.SetPos(0); // Sustain Loops only available in IT - b = (m_pSndFile->m_nType == MOD_TYPE_IT) ? TRUE : FALSE; + b = (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_ComboSustainType.EnableWindow(b); m_SpinSustainStart.EnableWindow(b); m_SpinSustainEnd.EnableWindow(b); m_EditSustainStart.EnableWindow(b); m_EditSustainEnd.EnableWindow(b); // Finetune / C-4 Speed / BaseNote - b = (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) ? TRUE : FALSE; + b = (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; SetDlgItemText(IDC_TEXT7, (b) ? "Freq. (Hz)" : "Finetune"); m_SpinFineTune.SetRange(-1, 1); m_EditFileName.EnableWindow(b); // AutoVibrato - b = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) ? TRUE : FALSE; + b = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_ComboAutoVib.EnableWindow(b); m_SpinVibSweep.EnableWindow(b); m_SpinVibDepth.EnableWindow(b); @@ -566,11 +566,11 @@ m_EditVibDepth.EnableWindow(b); m_EditVibRate.EnableWindow(b); // Global Volume - b = (m_pSndFile->m_nType == MOD_TYPE_IT) ? TRUE : FALSE; + b = (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_EditGlobalVol.EnableWindow(b); m_SpinGlobalVol.EnableWindow(b); // Panning - b = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) ? TRUE : FALSE; + b = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_CheckPanning.EnableWindow(b); m_EditPanning.EnableWindow(b); m_SpinPanning.EnableWindow(b); @@ -609,7 +609,7 @@ //end rewbs.fix36944 // FineTune / C-4 Speed / BaseNote int transp = 0; - if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) + if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) { wsprintf(s, "%lu", pins->nC4Speed); m_EditFineTune.SetWindowText(s); @@ -926,7 +926,7 @@ SwitchToView(); return; } - if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) + if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) { memcpy(szFileName, m_pSndFile->Ins[m_nSample].name, 22); szFileName[22] = 0; @@ -2166,7 +2166,7 @@ memcpy(m_pSndFile->Ins[m_nSample].name, s, 22); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEINFO, this); - if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } @@ -2207,7 +2207,7 @@ { if (IsLocked()) return; BOOL b = FALSE; - if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) + if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) { b = IsDlgButtonChecked(IDC_CHECK1); } @@ -2216,14 +2216,14 @@ if (!(m_pSndFile->Ins[m_nSample].uFlags & CHN_PANNING)) { m_pSndFile->Ins[m_nSample].uFlags |= CHN_PANNING; - if (m_pSndFile->m_nType == MOD_TYPE_IT) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } else { if (m_pSndFile->Ins[m_nSample].uFlags & CHN_PANNING) { m_pSndFile->Ins[m_nSample].uFlags &= ~CHN_PANNING; - if (m_pSndFile->m_nType == MOD_TYPE_IT) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType == (MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } } @@ -2246,7 +2246,7 @@ if (nPan != m_pSndFile->Ins[m_nSample].nPan) { m_pSndFile->Ins[m_nSample].nPan = nPan; - if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) m_pModDoc->SetModified(); + if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } @@ -2256,7 +2256,7 @@ { if (IsLocked()) return; int n = GetDlgItemInt(IDC_EDIT5); - if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M)) + if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M|MOD_TYPE_MPT)) { if ((n >= 2000) && (n <= 256000) && (n != (int)m_pSndFile->Ins[m_nSample].nC4Speed)) { @@ -2290,7 +2290,7 @@ { if (IsLocked()) return; int n = 60 - (m_CbnBaseNote.GetCurSel() + BASENOTE_MIN); - if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M)) + if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M|MOD_TYPE_MPT)) { LONG ft = CSoundFile::FrequencyToTranspose(m_pSndFile->Ins[m_nSample].nC4Speed) & 0x7f; n = CSoundFile::TransposeToFrequency(n, ft); @@ -2724,7 +2724,7 @@ // FineTune / C-5 Speed if ((pos = (short int)m_SpinFineTune.GetPos()) != 0) { - if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) + if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) { LONG d = pins->nC4Speed; if (d < 1) d = 8363; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -407,7 +407,7 @@ const char *pszfmt = pSndFile->m_bChannelMuteTogglePending[ncolhdr]? "[Channel %d]" : "Channel %d"; // const char *pszfmt = pModDoc->IsChannelRecord(ncolhdr) ? "Channel %d " : "Channel %d"; // -! NEW_FEATURE#0012 - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) && ((BYTE)pSndFile->ChnSettings[ncolhdr].szName[0] > 0x20)) + if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && ((BYTE)pSndFile->ChnSettings[ncolhdr].szName[0] > 0x20)) pszfmt = pSndFile->m_bChannelMuteTogglePending[ncolhdr]?"%d: [%s]":"%d: %s"; else if (m_nDetailLevel < 2) pszfmt = pSndFile->m_bChannelMuteTogglePending[ncolhdr]?"[Ch%d]":"Ch%d"; else if (m_nDetailLevel < 3) pszfmt = pSndFile->m_bChannelMuteTogglePending[ncolhdr]?"[Chn %d]":"Chn %d"; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Globals.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Globals.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Globals.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -395,7 +395,7 @@ UINT nType = pSndFile->GetType(); UINT mask = 1 | 2 | 4 | 16; - if (nType & (MOD_TYPE_XM|MOD_TYPE_IT)) + if (nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) { mask |= 8; //mask |= 32; //rewbs.graph Modified: branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -352,6 +352,8 @@ m_InputHandler = new CInputHandler(this); //rewbs.customKeys m_pPerfCounter= new CPerformanceCounter(); + //Loading static tunings here - probably not the best place to do that but anyway. + CSoundFile::LoadStaticTunings(); } void CMainFrame::LoadIniSettings() @@ -1976,7 +1978,7 @@ m_WaveFile.m_nDefaultTempo = 125; m_WaveFile.m_nDefaultSpeed = 4; m_WaveFile.m_nRepeatCount = 0; - m_WaveFile.m_nType = MOD_TYPE_IT; + m_WaveFile.m_nType = MOD_TYPE_IT; //MOD_TYPE_MPT? m_WaveFile.m_nChannels = 4; m_WaveFile.m_nInstruments = 1; m_WaveFile.m_nSamples = 1; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -140,9 +140,9 @@ if(CTrackApp::IsProject()) m_SndFile.m_dwSongFlags |= SONG_ITPROJECT; // -! NEW_FEATURE#0023 - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; + if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; //rewbs.MacroGUI: enable embedded macros by default. - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) m_SndFile.m_dwSongFlags |= SONG_EMBEDMIDICFG; + if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) m_SndFile.m_dwSongFlags |= SONG_EMBEDMIDICFG; theApp.GetDefaultMidiMacro(&m_SndFile.m_MidiCfg); // -> CODE#0015 @@ -313,6 +313,7 @@ case MOD_TYPE_S3M: case MOD_TYPE_XM: case MOD_TYPE_IT: + case MOD_TYPE_MPT: bModified = FALSE; break; case MOD_TYPE_AMF0: @@ -381,6 +382,7 @@ // -> DESC="IT project files (.itp)" // if (!lstrcmpi(fext, ".it")) nType = MOD_TYPE_IT; else if (!lstrcmpi(fext, ".it") || !lstrcmpi(fext, ".itp")) nType = MOD_TYPE_IT; else + if (!lstrcmpi(fext, ".mptm")) nType = MOD_TYPE_MPT; else // -! NEW_FEATURE#0023 if (!greccount) { @@ -396,6 +398,7 @@ case MOD_TYPE_S3M: bOk = m_SndFile.SaveS3M(lpszPathName, dwPacking); break; case MOD_TYPE_XM: bOk = m_SndFile.SaveXM(lpszPathName, dwPacking); break; case MOD_TYPE_IT: bOk = (m_SndFile.m_dwSongFlags & SONG_ITPROJECT || !lstrcmpi(fext, ".itp")) ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName, dwPacking); break; + case MOD_TYPE_MPT: bOk = m_SndFile.SaveMPT(lpszPathName, dwPacking); break; } EndWaitCursor(); if (bOk) @@ -414,7 +417,7 @@ // -> DESC="IT project files (.itp)" BOOL CModDoc::SaveModified() { - if(m_SndFile.m_nType == MOD_TYPE_IT && m_SndFile.m_dwSongFlags & SONG_ITPROJECT && !(m_SndFile.m_dwSongFlags & SONG_ITPEMBEDIH)){ + if((m_SndFile.m_nType & MOD_TYPE_IT) && m_SndFile.m_dwSongFlags & SONG_ITPROJECT && !(m_SndFile.m_dwSongFlags & SONG_ITPEMBEDIH)){ BOOL unsavedInstrument = FALSE; @@ -430,7 +433,7 @@ BOOL iti = stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; BOOL xi = stricmp(&m_SndFile.m_szInstrumentPath[i][size-2],"xi") == 0; - if(iti || (!iti && !xi && m_SndFile.m_nType == MOD_TYPE_IT)) + if(iti || (!iti && !xi && m_SndFile.m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) m_SndFile.SaveITIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); if(xi || (!xi && !iti && m_SndFile.m_nType == MOD_TYPE_XM)) m_SndFile.SaveXIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); @@ -509,6 +512,11 @@ } // -! NEW_FEATURE#0023 break; + case MOD_TYPE_MPT: + lpszDefExt = "mptm"; + lpszFilter = "OpenMPT Modules (*.mptm)|*.mptm||"; + strcpy(fext, ".mptm"); + break; default: ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); return FALSE; @@ -609,7 +617,7 @@ { m_SndFile.ChnSettings[init].dwFlags = 0; m_SndFile.ChnSettings[init].nVolume = 64; - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) + if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) m_SndFile.ChnSettings[init].nPan = 128; else m_SndFile.ChnSettings[init].nPan = (init & 0x01) ? 64 : 192; @@ -630,7 +638,7 @@ m_SndFile.Headers[1] = new INSTRUMENTHEADER; InitializeInstrument(m_SndFile.Headers[1], 1); } - if (m_SndFile.m_nType & (MOD_TYPE_IT|MOD_TYPE_XM)) + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT|MOD_TYPE_XM)) { m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; } @@ -998,7 +1006,7 @@ } //Mark IT as modified - if (m_SndFile.m_nType == MOD_TYPE_IT) { + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) { CMainFrame::GetMainFrame()->ThreadSafeSetModified(this); } @@ -1016,7 +1024,7 @@ BOOL CModDoc::SoloChannel(UINT nChn, BOOL bSolo) { if (nChn >= m_SndFile.m_nChannels) return FALSE; - if (m_SndFile.m_nType == MOD_TYPE_IT) SetModified(); + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); if (bSolo) m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SOLO; else m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SOLO; return TRUE; @@ -1035,7 +1043,7 @@ BOOL CModDoc::NoFxChannel(UINT nChn, BOOL bNoFx, BOOL updateMix) { if (nChn >= m_SndFile.m_nChannels) return FALSE; - if (m_SndFile.m_nType == MOD_TYPE_IT) SetModified(); + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); if (bNoFx){ m_SndFile.ChnSettings[nChn].dwFlags |= CHN_NOFX; if(updateMix) m_SndFile.Chn[nChn].dwFlags |= CHN_NOFX; @@ -1127,10 +1135,10 @@ DWORD d = (bSurround) ? CHN_SURROUND : 0; if (nChn >= m_SndFile.m_nChannels) return FALSE; - if (m_SndFile.m_nType != MOD_TYPE_IT) d = 0; + if (!(m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) d = 0; if (d != (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SURROUND)) { - if (m_SndFile.m_nType == MOD_TYPE_IT) SetModified(); + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); if (d) m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SURROUND; else m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; @@ -1149,7 +1157,7 @@ if (m_SndFile.ChnSettings[nChn].nVolume != nVolume) { m_SndFile.ChnSettings[nChn].nVolume = nVolume; - if (m_SndFile.m_nType & MOD_TYPE_IT) SetModified(); + if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = TRUE; } m_SndFile.Chn[nChn].nGlobalVol = nVolume; @@ -1165,7 +1173,7 @@ if (m_SndFile.ChnSettings[nChn].nPan != nPan) { m_SndFile.ChnSettings[nChn].nPan = nPan; - if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) SetModified(); + if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = TRUE; } m_SndFile.Chn[nChn].nPan = nPan; @@ -1754,14 +1762,14 @@ void CModDoc::OnEditComments() //---------------------------- { - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_COMMENTS); + if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_COMMENTS); } //rewbs.graph void CModDoc::OnEditGraph() //---------------------------- { - if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_GRAPH); + if (m_SndFile.m_nType & (MOD_TYPE_XM|MOD_TYPE_IT | MOD_TYPE_MPT)) SendMessageToActiveViews(WM_MOD_ACTIVATEVIEW, IDD_CONTROL_GRAPH); } //end rewbs.graph @@ -1840,7 +1848,7 @@ //--------------------------------------- { if (p) p->Enable(((m_SndFile.m_nType == MOD_TYPE_XM) - || (m_SndFile.m_nType == MOD_TYPE_IT)) ? TRUE : FALSE); + || (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) ? TRUE : FALSE); } @@ -1975,8 +1983,11 @@ #define MOD_TYPE_MODXM (MOD_TYPE_MOD|MOD_TYPE_XM) #define MOD_TYPE_S3MIT (MOD_TYPE_S3M|MOD_TYPE_IT) -#define MOD_TYPE_NOMOD (MOD_TYPE_S3M|MOD_TYPE_XM|MOD_TYPE_IT) +#define MOD_TYPE_S3MITMPT (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT) +#define MOD_TYPE_NOMOD (MOD_TYPE_S3M|MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT) #define MOD_TYPE_XMIT (MOD_TYPE_XM|MOD_TYPE_IT) +#define MOD_TYPE_XMITMPT (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT) +#define MOD_TYPE_ITMPT (MOD_TYPE_IT|MOD_TYPE_MPT) #define MAX_FXINFO 66 //rewbs.smoothVST, increased from 64... I wonder what this will break? const MPTEFFECTINFO gFXInfo[MAX_FXINFO] = @@ -1999,12 +2010,12 @@ {CMD_SPEED, 0,0, 0, 0xFFFFFFFF, "Set Speed"}, {CMD_TEMPO, 0,0, 0, 0xFFFFFFFF, "Set Tempo"}, {CMD_TREMOR, 0,0, 0, MOD_TYPE_NOMOD, "Tremor"}, - {CMD_CHANNELVOLUME, 0,0, 0, MOD_TYPE_S3MIT, "Set channel volume"}, - {CMD_CHANNELVOLSLIDE,0,0, 0, MOD_TYPE_S3MIT, "Channel volslide"}, + {CMD_CHANNELVOLUME, 0,0, 0, MOD_TYPE_S3MITMPT, "Set channel volume"}, + {CMD_CHANNELVOLSLIDE,0,0, 0, MOD_TYPE_S3MITMPT, "Channel volslide"}, {CMD_GLOBALVOLUME, 0,0, 0, MOD_TYPE_NOMOD, "Set global volume"}, {CMD_GLOBALVOLSLIDE,0,0, 0, MOD_TYPE_NOMOD, "Global volume slide"}, {CMD_KEYOFF, 0,0, 0, MOD_TYPE_XM, "Key off"}, - {CMD_FINEVIBRATO, 0,0, 0, MOD_TYPE_S3MIT, "Fine vibrato"}, + {CMD_FINEVIBRATO, 0,0, 0, MOD_TYPE_S3MITMPT, "Fine vibrato"}, {CMD_PANBRELLO, 0,0, 0, MOD_TYPE_NOMOD, "Panbrello"}, {CMD_PANNINGSLIDE, 0,0, 0, MOD_TYPE_NOMOD, "Panning slide"}, {CMD_SETENVPOSITION,0,0, 0, MOD_TYPE_XM, "Envelope position"}, @@ -2027,19 +2038,19 @@ {CMD_MODCMDEX, 0xF0,0xE0, 0, MOD_TYPE_MODXM, "Pattern delay"}, {CMD_MODCMDEX, 0xF0,0xF0, 0, MOD_TYPE_XM, "Set active macro"}, // Extended S3M/IT effects - {CMD_S3MCMDEX, 0xF0,0x10, 0, MOD_TYPE_S3MIT, "Glissando control"}, + {CMD_S3MCMDEX, 0xF0,0x10, 0, MOD_TYPE_S3MITMPT, "Glissando control"}, {CMD_S3MCMDEX, 0xF0,0x20, 0, MOD_TYPE_S3M, "Set finetune"}, - {CMD_S3MCMDEX, 0xF0,0x30, 0, MOD_TYPE_S3MIT, "Vibrato waveform"}, - {CMD_S3MCMDEX, 0xF0,0x40, 0, MOD_TYPE_S3MIT, "Tremolo waveform"}, - {CMD_S3MCMDEX, 0xF0,0x50, 0, MOD_TYPE_S3MIT, "Panbrello waveform"}, - {CMD_S3MCMDEX, 0xF0,0x60, 0, MOD_TYPE_S3MIT, "Fine pattern delay"}, - {CMD_S3MCMDEX, 0xF0,0x80, 0, MOD_TYPE_S3MIT, "Set panning"}, - {CMD_S3MCMDEX, 0xF0,0xA0, 0, MOD_TYPE_S3MIT, "Set high offset"}, - {CMD_S3MCMDEX, 0xF0,0xB0, 0, MOD_TYPE_S3MIT, "Pattern loop"}, - {CMD_S3MCMDEX, 0xF0,0xC0, 0, MOD_TYPE_S3MIT, "Note cut"}, - {CMD_S3MCMDEX, 0xF0,0xD0, 0, MOD_TYPE_S3MIT, "Note delay"}, - {CMD_S3MCMDEX, 0xF0,0xE0, 0, MOD_TYPE_S3MIT, "Pattern delay"}, - {CMD_S3MCMDEX, 0xF0,0xF0, 0, MOD_TYPE_IT, "Set active macro"}, + {CMD_S3MCMDEX, 0xF0,0x30, 0, MOD_TYPE_S3MITMPT, "Vibrato waveform"}, + {CMD_S3MCMDEX, 0xF0,0x40, 0, MOD_TYPE_S3MITMPT, "Tremolo waveform"}, + {CMD_S3MCMDEX, 0xF0,0x50, 0, MOD_TYPE_S3MITMPT, "Panbrello waveform"}, + {CMD_S3MCMDEX, 0xF0,0x60, 0, MOD_TYPE_S3MITMPT, "Fine pattern delay"}, + {CMD_S3MCMDEX, 0xF0,0x80, 0, MOD_TYPE_S3MITMPT, "Set panning"}, + {CMD_S3MCMDEX, 0xF0,0xA0, 0, MOD_TYPE_S3MITMPT, "Set high offset"}, + {CMD_S3MCMDEX, 0xF0,0xB0, 0, MOD_TYPE_S3MITMPT, "Pattern loop"}, + {CMD_S3MCMDEX, 0xF0,0xC0, 0, MOD_TYPE_S3MITMPT, "Note cut"}, + {CMD_S3MCMDEX, 0xF0,0xD0, 0, MOD_TYPE_S3MITMPT, "Note delay"}, + {CMD_S3MCMDEX, 0xF0,0xE0, 0, MOD_TYPE_S3MITMPT, "Pattern delay"}, + {CMD_S3MCMDEX, 0xF0,0xF0, 0, MOD_TYPE_ITMPT, "Set active macro"}, // MPT XM extensions and special effects {CMD_XFINEPORTAUPDOWN,0xF0,0x10,0, MOD_TYPE_XM, "Extra fine porta up"}, {CMD_XFINEPORTAUPDOWN,0xF0,0x20,0, MOD_TYPE_XM, "Extra fine porta down"}, @@ -2048,11 +2059,11 @@ {CMD_XFINEPORTAUPDOWN,0xF0,0x90,0, MOD_TYPE_XM, "Sound control"}, {CMD_XFINEPORTAUPDOWN,0xF0,0xA0,0, MOD_TYPE_XM, "Set high offset"}, // MPT IT extensions and special effects - {CMD_S3MCMDEX, 0xF0,0x90, 0, MOD_TYPE_S3MIT, "Sound control"}, - {CMD_S3MCMDEX, 0xF0,0x70, 0, MOD_TYPE_IT, "Instr. control"}, + {CMD_S3MCMDEX, 0xF0,0x90, 0, MOD_TYPE_S3MITMPT, "Sound control"}, + {CMD_S3MCMDEX, 0xF0,0x70, 0, MOD_TYPE_ITMPT, "Instr. control"}, // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" - {CMD_XPARAM, 0x00,0x00, 0, MOD_TYPE_XMIT, "X param"} + {CMD_XPARAM, 0x00,0x00, 0, MOD_TYPE_XMITMPT, "X param"} // -! NEW_FEATURE#0010 }; @@ -2258,7 +2269,7 @@ // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" // if (nType & MOD_TYPE_S3MIT) nmin = 1; - if (nType & MOD_TYPE_S3MIT) nmin = 0; + if (nType & MOD_TYPE_S3MITMPT) nmin = 0; // -! NEW_FEATURE#0010 break; case CMD_VOLUMESLIDE: @@ -2266,13 +2277,13 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: - nmax = (nType & MOD_TYPE_S3MIT) ? 58 : 30; + nmax = (nType & MOD_TYPE_S3MITMPT) ? 58 : 30; break; case CMD_PANNING8: if (nType & (MOD_TYPE_MOD|MOD_TYPE_S3M)) nmax = 0x80; break; case CMD_GLOBALVOLUME: - nmax = (nType & MOD_TYPE_IT) ? 128 : 64; + nmax = (nType & MOD_TYPE_IT | MOD_TYPE_MPT) ? 128 : 64; break; } *prangeMin = nmin; @@ -2301,7 +2312,7 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: - if (m_SndFile.m_nType & MOD_TYPE_S3MIT) + if (m_SndFile.m_nType & MOD_TYPE_S3MITMPT) { if (!param) pos = 29; else if (((param & 0x0F) == 0x0F) && (param & 0xF0)) @@ -2338,7 +2349,7 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: - if (m_SndFile.m_nType & MOD_TYPE_S3MIT) + if (m_SndFile.m_nType & MOD_TYPE_S3MITMPT) { if (pos < 15) param = 15-pos; else if (pos < 29) param = (29-pos) | 0xF0; else @@ -2426,11 +2437,11 @@ { wsprintf(s, "continue"); } else - if ((m_SndFile.m_nType & MOD_TYPE_S3MIT) && ((param & 0x0F) == 0x0F) && (param & 0xF0)) + if ((m_SndFile.m_nType & MOD_TYPE_S3MITMPT) && ((param & 0x0F) == 0x0F) && (param & 0xF0)) { wsprintf(s, "fine +%d", param >> 4); } else - if ((m_SndFile.m_nType & MOD_TYPE_S3MIT) && ((param & 0xF0) == 0xF0) && (param & 0x0F)) + if ((m_SndFile.m_nType & MOD_TYPE_S3MITMPT) && ((param & 0xF0) == 0xF0) && (param & 0x0F)) { wsprintf(s, "fine -%d", param & 0x0F); } else @@ -2569,19 +2580,19 @@ { {VOLCMD_VOLUME, MOD_TYPE_NOMOD, "v: Set Volume"}, {VOLCMD_PANNING, MOD_TYPE_NOMOD, "p: Set Panning"}, - {VOLCMD_VOLSLIDEUP, MOD_TYPE_XMIT, "c: Volume slide up"}, - {VOLCMD_VOLSLIDEDOWN, MOD_TYPE_XMIT, "d: Volume slide down"}, - {VOLCMD_FINEVOLUP, MOD_TYPE_XMIT, "a: Fine volume up"}, - {VOLCMD_FINEVOLDOWN, MOD_TYPE_XMIT, "b: Fine volume down"}, - {VOLCMD_VIBRATOSPEED, MOD_TYPE_XMIT, "u: Vibrato speed"}, + {VOLCMD_VOLSLIDEUP, MOD_TYPE_XMITMPT, "c: Volume slide up"}, + {VOLCMD_VOLSLIDEDOWN, MOD_TYPE_XMITMPT, "d: Volume slide down"}, + {VOLCMD_FINEVOLUP, MOD_TYPE_XMITMPT, "a: Fine volume up"}, + {VOLCMD_FINEVOLDOWN, MOD_TYPE_XMITMPT, "b: Fine volume down"}, + {VOLCMD_VIBRATOSPEED, MOD_TYPE_XMITMPT, "u: Vibrato speed"}, {VOLCMD_VIBRATO, MOD_TYPE_XM, "h: Vibrato depth"}, {VOLCMD_PANSLIDELEFT, MOD_TYPE_XM, "l: Pan slide left"}, {VOLCMD_PANSLIDERIGHT, MOD_TYPE_XM, "r: Pan slide right"}, - {VOLCMD_TONEPORTAMENTO, MOD_TYPE_XMIT, "g: Tone portamento"}, - {VOLCMD_PORTAUP, MOD_TYPE_IT, "f: Portamento up"}, - {VOLCMD_PORTADOWN, MOD_TYPE_IT, "e: Portamento down"}, - {VOLCMD_VELOCITY, MOD_TYPE_IT, ":: velocity"}, //rewbs.velocity - {VOLCMD_OFFSET, MOD_TYPE_IT, "o: offset"}, //rewbs.volOff + {VOLCMD_TONEPORTAMENTO, MOD_TYPE_XMITMPT, "g: Tone portamento"}, + {VOLCMD_PORTAUP, MOD_TYPE_ITMPT, "f: Portamento up"}, + {VOLCMD_PORTADOWN, MOD_TYPE_ITMPT, "e: Portamento down"}, + {VOLCMD_VELOCITY, MOD_TYPE_ITMPT, ":: velocity"}, //rewbs.velocity + {VOLCMD_OFFSET, MOD_TYPE_ITMPT, "o: offset"}, //rewbs.volOff }; @@ -3002,6 +3013,7 @@ { case MOD_TYPE_XM: newPath += ".xm"; break; case MOD_TYPE_IT: m_SndFile.m_dwSongFlags & SONG_ITPROJECT ? newPath+=".itp" : newPath+=".it"; break; + case MOD_TYPE_MPT: newPath += ".mptm"; break; case MOD_TYPE_S3M: newPath += ".s3m"; break; case MOD_TYPE_MOD: newPath += ".mod"; break; default: ASSERT(false); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -34,6 +34,12 @@ return TRUE; } + if(m_SndFile.m_nType == MOD_TYPE_MPT) + { + if(::MessageBox(NULL, "Convertion from MPT to any other modtype makes certain features unavailable and is not assured to work properly; Do the convertion anyway? If yes, backupping the mod might be a good idea", + "Notice", MB_YESNO) != IDYES) + return FALSE; + } // Check if conversion to 64 rows is necessary for (UINT ipat=0; ipat<MAX_PATTERNS; ipat++) @@ -105,10 +111,10 @@ m_SndFile.m_nInstruments = 0; END_CRITICAL(); EndWaitCursor(); - } + } //End if (((m_SndFile.m_nInstruments) || (b64)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_S3M))) BeginWaitCursor(); // Adjust pattern data - if ((m_SndFile.m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) && (nNewType & (MOD_TYPE_S3M|MOD_TYPE_IT))) + if ((m_SndFile.m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) && (nNewType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))) { for (UINT nPat=0; nPat<MAX_PATTERNS; nPat++) if (m_SndFile.Patterns[nPat]) { @@ -164,7 +170,7 @@ } } } else - if ((m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_XM))) + if ((m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_XM))) { for (UINT nPat=0; nPat<MAX_PATTERNS; nPat++) if (m_SndFile.Patterns[nPat]) { @@ -243,7 +249,7 @@ if ((m_SndFile.m_nType == MOD_TYPE_MOD) && (nNewType == MOD_TYPE_XM)) { } else - // Convert XM to S3M/IT + // Convert XM to S3M/IT/MPT if ((m_SndFile.m_nType == MOD_TYPE_XM) && (nNewType != MOD_TYPE_XM)) { for (UINT i=1; i<=m_SndFile.m_nSamples; i++) @@ -252,9 +258,9 @@ m_SndFile.Ins[i].RelativeTone = 0; m_SndFile.Ins[i].nFineTune = 0; } - if (nNewType & MOD_TYPE_IT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; + if (nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT)) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; } else - // Convert S3M/IT to XM + // Convert S3M/IT/MPT to XM if ((m_SndFile.m_nType != MOD_TYPE_XM) && (nNewType == MOD_TYPE_XM)) { for (UINT i=1; i<=m_SndFile.m_nSamples; i++) @@ -290,12 +296,12 @@ } BEGIN_CRITICAL(); m_SndFile.m_nType = nNewType; - if ((!(nNewType & (MOD_TYPE_IT|MOD_TYPE_XM))) && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) + if ((!(nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_XM))) && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) { AddToLog("WARNING: Linear Frequency Slides not supported by the new format.\n"); m_SndFile.m_dwSongFlags &= ~SONG_LINEARSLIDES; } - if (nNewType != MOD_TYPE_IT) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATMODE); + if (!(nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT))) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATMODE); if (nNewType != MOD_TYPE_S3M) m_SndFile.m_dwSongFlags &= ~SONG_FASTVOLSLIDES; END_CRITICAL(); ChangeFileExtension(nNewType); @@ -326,7 +332,7 @@ //------------------------------------------------ { int maxChans; - if (m_SndFile.m_nType&MOD_TYPE_IT) { + if (m_SndFile.m_nType&(MOD_TYPE_IT|MOD_TYPE_MPT)) { maxChans=max_chans_IT; } else if (m_SndFile.m_nType&MOD_TYPE_XM) { maxChans=max_chans_XM; @@ -799,7 +805,7 @@ } } EndWaitCursor(); - if (nExt && !((m_SndFile.m_nType==MOD_TYPE_IT) && (m_SndFile.m_dwSongFlags&SONG_ITPROJECT))) + if (nExt && !(m_SndFile.m_nType & MOD_TYPE_IT) && (m_SndFile.m_dwSongFlags&SONG_ITPROJECT)) { //We don't remove an instrument's unused samples in an ITP. wsprintf(s, "OpenMPT detected %d sample(s) referenced by an instrument,\n" "but not used in the song. Do you want to remove them ?", nExt); @@ -952,7 +958,7 @@ if (!m_SndFile.m_nInstruments) return FALSE; char removeSamples = -1; - if ( !((m_SndFile.m_nType==MOD_TYPE_IT) && (m_SndFile.m_dwSongFlags&SONG_ITPROJECT))) { //never remove an instrument's samples in ITP. + if ( !((m_SndFile.m_nType & MOD_TYPE_IT) && (m_SndFile.m_dwSongFlags&SONG_ITPROJECT))) { //never remove an instrument's samples in ITP. if(::MessageBox(NULL, "Remove samples associated with an instrument if they are unused?", "Removing instrument", MB_YESNO | MB_ICONQUESTION) == IDYES) { removeSamples = 1; } @@ -1215,7 +1221,7 @@ //----------------------------------------------------------- { INSTRUMENTHEADER *pDup = NULL; - if ((m_SndFile.m_nType != MOD_TYPE_XM) && (m_SndFile.m_nType != MOD_TYPE_IT)) return -1; + if ((m_SndFile.m_nType != MOD_TYPE_XM) && !(m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) return -1; if ((lDuplicate > 0) && (lDuplicate <= (LONG)m_SndFile.m_nInstruments)) { pDup = m_SndFile.Headers[lDuplicate]; @@ -1329,6 +1335,7 @@ penv->Keyboard[n] = nsample; penv->NoteMap[n] = n+1; } + penv->pTuning = penv->s_DefaultTuning; } @@ -1582,6 +1589,7 @@ case MOD_TYPE_S3M: pszFormatName = "S3M"; break; case MOD_TYPE_XM: pszFormatName = "XM"; break; case MOD_TYPE_IT: pszFormatName = "IT"; break; + case MOD_TYPE_MPT: pszFormatName = "MPT"; break; default: pszFormatName = "MOD"; break; } LPSTR p = (LPSTR)GlobalLock(hCpy); @@ -1654,7 +1662,7 @@ { if (m->command) { - if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) + if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) p[9] = gszS3mCommands[m->command]; else p[9] = gszModCommands[m->command]; @@ -1722,7 +1730,8 @@ if (!c) goto PasteDone; if ((c == 0x0D) && (len > 3)) { - if ((p[len-3] == 'I') || (p[len-4] == 'S')) bS3M = TRUE; + //if ((p[len-3] == 'I') || (p[len-4] == 'S')) bS3M = TRUE; + if ((p[len-3] == 'I') || (p[len-4] == 'S') || (p[len-4] == 'M')) bS3M = TRUE; break; } } Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -527,6 +527,7 @@ // -> DESC="IT project files (.itp)" ON_COMMAND(ID_NEW_ITPROJECT,OnFileNewITProject) // -! NEW_FEATURE#0023 + ON_COMMAND(ID_NEW_MPT, OnFileNewMPT) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_HELP_INDEX, CWinApp::OnHelpIndex) @@ -953,10 +954,20 @@ if (m_pModTemplate) m_pModTemplate->OpenDocumentFile(NULL); } +void CTrackApp::OnFileNewMPT() +//--------------------------- +{ + SetAsProject(FALSE); + SetDefaultDocType(MOD_TYPE_MPT); + if (m_pModTemplate) m_pModTemplate->OpenDocumentFile(NULL); +} + + // -> CODE#0023 // -> DESC="IT project files (.itp)" void CTrackApp::OnFileNewITProject() +//---------------------------------- { SetAsProject(TRUE); SetDefaultDocType(MOD_TYPE_IT); @@ -986,6 +997,7 @@ // -> DESC="IT project files (.itp)" "Impulse Tracker Projects (*.itp)|*.itp;*.itpz|" // -! NEW_FEATURE#0023 + "Open MPT Modules (*.mptm)|*.mptm;*.mptmz|" "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.dsm;*.umx;*.amf;*.psm;*.mt2|" "Wave Files (*.wav)|*.wav|" "Midi Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.h =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.h 2006-08-20 20:53:27 UTC (rev 166) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.h 2006-08-20 21:39:55 UTC (rev 167) @@ -218,6 +218,7 @@ afx_msg void OnFileNewS3M(); afx_msg void OnFileNewXM(); afx_msg void OnFileNewIT(); + afx_msg void OnFileNewMPT(); // -> CODE#0023 // -> DESC="IT project files (.itp)" afx_msg void OnFileNewITProject(); Added: branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp (rev 0) +++ branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp 2006-08-20 21:39:55 UTC (rev 167) @@ -0,0 +1,675 @@ +// TuningDialog.cpp : implementation file +// + +#include "stdafx.h" +#include "mptrack.h" +#include "TuningDialog.h" +#include ".\tuningdialog.h" + +const string CTuningDialog::s_stringTypeGEN = "General"; +const string CTuningDialog::s_stringTypeRP = "Ratio periodic"; +const string CTuningDialog::s_stringTypeTET = "TET"; + +/* +TODOS: +-Clear tuning(when copying existing tuning, it might have + e.g. unwanted note names which should able to be removed. +-Show note name and ratio value also in the set-editboxes + (->clear note names) +*/ + + +// CTuningDialog dialog + +IMPLEMENT_DYNAMIC(CTuningDialog, CDialog) +CTuningDialog::CTuningDialog(CWnd* pParent, const TUNINGVECTOR& rVec, CTuning* pTun) + : CDialog(CTuningDialog::IDD, pParent), + m_TuningCollections(rVec), + m_pTempTuning(0), + m_pTempTuningCol(0), + m_NoteEditApply(true), + m_RatioEditApply(true) +//---------------------------------------- +{ + m_RatioMapWnd.m_pTuning = pTun; //pTun is the tuning to show when dialog opens. + + //Requiring that there is always at least one tuning collection. + if(m_TuningCollections.size() == 0) + { + m_pTempTuningCol = new CTuningCollection("Tuning dialog temp"); + m_TuningCollections.push_back(m_pTempTuningCol); + } + +} + +CTuningDialog::~CTuningDialog() +//---------------------------- +{ + delete m_pTempTuning; + delete m_pTempTuningCol; +} + +BOOL CTuningDialog::OnInitDialog() +//-------------------------------- +{ + CDialog::OnInitDialog(); + + //CWnd::EnableToolTips(true); + //Todo: Tooltips. + + m_RatioMapWnd.Init(this, 0); + + //Adding tuning collection names to the combobox. + for(size_t i = 0; i<m_TuningCollections.size(); i++) + { + m_CombobTuningCollection.AddString(m_TuningCollections[i]->GetName().c_str()); + } + + //Adding tuning type names to corresponding combobox + m_CombobTuningType.AddString(s_stringTypeGEN.c_str()); + m_CombobTuningType.AddString(s_stringTypeRP.c_str()); + m_CombobTuningType.AddString(s_stringTypeTET.c_str()); + + m_ButtonSet.EnableWindow(FALSE); + + SetView(m_RatioMapWnd.m_pTuning); + + return TRUE; +} + +void CTuningDialog::SetView(const CTuning* pTun) +//-------------------------------------------- +{ + if(!m_TuningCollections[0]) {ASSERT(false); return;} + if(m_TuningCollections[0]->GetNumTunings() == 0) + { + ASSERT(false); + return; + } + + if(!pTun) pTun = &m_TuningCollections[0]->GetTuning(0); + + //Finding out where given tuning belongs to. + size_t curTCol = 0, curT = 0; //cur <-> Current, T <-> Tuning, Col <-> Collection. + for(size_t i = 0; i<m_TuningCollections.size(); i++) + { + CTuningCollection& rCurTCol = *m_TuningCollections.at(i); + for(size_t j = 0; j<rCurTCol.GetNumTunings(); j++) + { + if(pTun == &rCurTCol.GetTuning(static_cast<unsigned short>(j))) + { + curTCol = i; + curT = j; + break; + } + } + } + + m_CombobTuningCollection.SetCurSel(curTCol); + OnCbnSelchangeComboTcol(); + m_CombobTuningName.SetCurSel(curT); + OnCbnSelchangeComboT(); +} + + +void CTuningDialog::DoDataExchange(CDataExchange* pDX) +//----------------------------------------------------- +{ + CDialog::DoDataExchange(pDX); + DDX_Control(pDX, IDC_STATICRATIOMAP, m_RatioMapWnd); + DDX_Control(pDX, IDC_COMBO_TCOL, m_CombobTuningCollection); + DDX_Control(pDX, IDC_COMBO_T, m_CombobTuningName); + DDX_Control(pDX, IDC_COMBO_TTYPE, m_CombobTuningType); + DDX_Control(pDX, IDC_EDIT_TABLESIZE, m_EditTableSize); + DDX_Control(pDX, IDC_EDIT_BEGINNOTE, m_EditBeginNote); + DDX_Control(pDX, IDC_EDIT_STEPS, m_EditSteps); + DDX_Control(pDX, IDC_EDIT_RATIOPERIOD, m_EditRatioPeriod); + DDX_Control(pDX, IDC_CHECK_NEWTUNING, m_CheckNewTuning); + DDX_Control(pDX, IDC_ADD_TUNING, m_ButtonAddTuning); + DDX_Control(pDX, IDC_REMOVE_TUNING, m_ButtonRemoveTuning); + DDX_Control(pDX, IDC_EDIT_RATIOVALUE, m_EditRatio); + DDX_Control(pDX, IDC_EDIT_NOTENAME, m_EditNotename); + DDX_Control(pDX, IDC_BUTTON_SETVALUES, m_ButtonSet); +} + + +BEGIN_MESSAGE_MAP(CTuningDialog, CDialog) + ON_CBN_SELCHANGE(IDC_COMBO_TCOL, OnCbnSelchangeComboTcol) + ON_CBN_SELCHANGE(IDC_COMBO_T, OnCbnSelchangeComboT) + ON_BN_CLICKED(IDC_CHECK_NEWTUNING, OnBnClickedCheckNewtuning) + ON_CBN_SELCHANGE(IDC_COMBO_TTYPE, OnCbnSelchangeComboTtype) + ON_EN_CHANGE(IDC_EDIT_STEPS, OnEnChangeEditSteps) + ON_EN_CHANGE(IDC_EDIT_RATIOPERIOD, OnEnChangeEditRatioperiod) + ON_BN_CLICKED(IDC_ADD_TUNING, OnBnClickedAddTuning) + ON_BN_CLICKED(IDC_REMOVE_TUNING, OnBnClickedRemoveTuning) + ON_CBN_EDITCHANGE(IDC_COMBO_T, OnCbnEditchangeComboT) + ON_EN_CHANGE(IDC_EDIT_NOTENAME, OnEnChangeEditNotename) + ON_BN_CLICKED(IDC_BUTTON_SETVALUES, OnBnClickedButtonSetvalues) + ON_EN_CHANGE(IDC_EDIT_RATIOVALUE, OnEnChangeEditRatiovalue) +END_MESSAGE_MAP() + + +// CTuningDialog message handlers + +void CTuningDialog::OnCbnSelchangeComboTcol() +//------------------------------------------- +{ + const int curTCol = m_CombobTuningCollection.GetCurSel(); + const int curT = m_CombobTuningName.GetCurSel(); + if(curTCol < 0 || curTCol >= static_cast<int>(m_TuningCollections.size())) return; + + //Checking whether collection allows removing + if(m_TuningCollections[curTCol]->CanEdit(CTuningCollection::EM_REMOVE)) + m_ButtonRemoveTuning.EnableWindow(true); + else + m_ButtonRemoveTuning.EnableWindow(false); + + if(IsDlgButtonChecked(IDC_CHECK_NEWTUNING)) + { + //Checking whether tuning collection allows adding + //tunings... + if(m_TuningCollections.at(curTCol)->CanEdit(CTuningCollection::EM_ADD)) + m_ButtonAddTuning.EnableWindow(); + else + m_ButtonAddTuning.EnableWindow(false); + + return; + } + + //Clearing existing items from name-combobox... + while(m_CombobTuningName.GetCount() > 0) + m_CombobTuningName.DeleteString(0); + + //...checking does the tuning collection have any + //tunings in it... + if(m_TuningCollections[curTCol]->GetNumTunings() == 0) + { + m_CombobTuningName.AddString("No tunings"); + m_CombobTuningName.SetCurSel(0); + m_RatioMapWnd.m_pTuning = 0; + //Hiding ratiomap window in this case. + m_RatioMapWnd.ShowWindow(SW_HIDE); + UpdateTuningType(0); + return; + } + + //...adding names of tunings in the current tuning collection... + CTuningCollection& rTCol = *m_TuningCollections.at(curTCol); + for(size_t i = 0; i<rTCol.GetNumTunings(); i++) + { + m_CombobTuningName.AddString(rTCol.GetTuning(static_cast<unsigned short>(i)).GetName().c_str()); + } + + //...checking can previous tuning item be used... + if(curT < 0 || curT >= m_CombobTuningName.GetCount()) + m_CombobTuningName.SetCurSel(0); + else + m_CombobTuningName.SetCurSel(curT); + + OnCbnSelchangeComboT(); +} + +void CTuningDialog::OnCbnSelchangeComboT() +//---------------------------------------- +{ + //Checking that there is valid Tuning collection index... + const int TCol = m_CombobTuningCollection.GetCurSel(); + if(TCol < 0 || TCol >= static_cast<int>(m_TuningCollections.size())) return; + + CTuningCollection& rTCol = *m_TuningCollections.at(TCol); + + //...checking that tuning index is valid... + const unsigned short T = static_cast<unsigned short>(m_CombobTuningName.GetCurSel()); + if(T < 0 || T >= rTCol.GetNumTunings()) + return; + + //...updating tuning type-combob... + UpdateTuningType(&rTCol.GetTuning(T)); + + //...and making sure that ratiomap window is showing and + //updating its content. + m_RatioMapWnd.ShowWindow(SW_SHOW); + m_RatioMapWnd.m_pTuning = &rTCol.GetTuning(T); + m_RatioMapWnd.Invalidate(); + UpdateRatioMapEdits(m_RatioMapWnd.GetShownCentre()); +} + +void CTuningDialog::UpdateTuningType(const CTuning* pT) +//----------------------------------------------------- +{ + if(pT) + { + ASSERT(m_CombobTuningType.GetCount() > 0); + if(pT->GetTuningType() == CTuning::TT_TET) + m_CombobTuningType.SetCurSel(2); + else + //if(pT->GetPeriod()) + if(pT->GetTuningType() == CTuning::TT_RATIOPERIODIC) + m_CombobTuningType.SetCurSel(1); + else + m_CombobTuningType.SetCurSel(0); + + + //Updating ratioperiod and steps in ratio fields... + CTuning::RATIOTYPE rp = pT->GetPeriodRatio(); + CTuning::STEPTYPE period = pT->GetPeriod(); + if(period) + { + m_EditSteps.EnableWindow(); + m_EditSteps.SetWindowText(Stringify(period).c_str()); + + m_EditRatioPeriod.EnableWindow(); + m_EditRatioPeriod.SetWindowText(Stringify(rp).c_str()); + } + else + { + if(!IsDlgButtonChecked(IDC_CHECK_NEWTUNING)) + { + m_EditSteps.EnableWindow(false); + m_EditRatioPeriod.EnableWindow(false); + } + } + } + m_CombobTuningType.Invalidate(); + m_EditSteps.Invalidate(); + m_EditRatioPeriod.Invalidate(); + +} + +void CTuningDialog::OnBnClickedCheckNewtuning() +//--------------------------------------------- +{ + + if(IsDlgButtonChecked(IDC_CHECK_NEWTUNING)) + { + //Bug? + if(m_pTempTuning != NULL) + { + MessageBox("Bug: m_pTempTuning != NULL in CTuningDialog::OnBnClickedCheckNewtuning()", 0); + delete m_pTempTuning; m_pTempTuning = NULL; + m_RatioMapWnd.m_pTuning = NULL; + return; + } + + m_ButtonSet.EnableWindow(); + m_ButtonRemoveTuning.ShowWindow(SW_HIDE); + m_RatioMapWnd.ShowWindow(SW_SHOW); + m_ButtonAddTuning.ShowWindow(SW_SHOW); + + const size_t TCol = static_cast<size_t>(m_CombobTuningCollection.GetCurSel()); + if(TCol >= 0 && TCol < m_TuningCollections.size()) + if(m_TuningCollections[TCol]->CanEdit(CTuningCollection::EM_ADD)) + m_ButtonAddTuning.EnableWindow(); + else + m_ButtonAddTuning.EnableWindow(FALSE); + + //Deleting tuning names from combob. + while(m_CombobTuningName.GetCount() > 0) + m_CombobTuningName.DeleteString(0); + //Invalidating later. + + + //Creating temporary tuning object and using + //previously shown tuning as 'template'. + m_pTempTuning = new CTuningRTI(m_RatioMapWnd.m_pTuning); + m_RatioMapWnd.m_pTuning = m_pTempTuning; + m_RatioMapWnd.Invalidate(); + UpdateRatioMapEdits(m_Rati... [truncated message content] |
From: <Rel...@us...> - 2007-01-29 21:50:48
|
Revision: 171 http://svn.sourceforge.net/modplug/?rev=171&view=rev Author: Relabsoluness Date: 2007-01-29 13:50:16 -0800 (Mon, 29 Jan 2007) Log Message: ----------- <Relabs> Added missing misc_util.cpp and misc_util.h files. Added Paths: ----------- branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.cpp branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.h Added: branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.cpp =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.cpp (rev 0) +++ branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.cpp 2007-01-29 21:50:16 UTC (rev 171) @@ -0,0 +1,44 @@ +#include "stdafx.h" +#include "misc_util.h" + + +bool StringToBinaryStream(ostream& outStream, const string& str) +//---------------------------------------------------- +{ + if(!outStream.good()) return true; + size_t size = str.size(); + outStream.write(reinterpret_cast<char*>(&size), sizeof(size)); + outStream << str; + if(outStream.good()) + return false; + else + return true; + +} + +bool StringFromBinaryStream(istream& inStrm, string& str, const size_t maxSize) +//--------------------------------------------------------- +{ + if(!inStrm.good()) return true; + size_t strSize; + inStrm.read(reinterpret_cast<char*>(&strSize), sizeof(strSize)); + + if(strSize > maxSize) + return true; + + str.resize(strSize); + + //Inefficiently reading to temporary buffer first and + //then setting that to the string. + char* buffer = new char[strSize+1]; + inStrm.read(buffer, strSize); + buffer[strSize] = '\0'; + str = buffer; + delete[] buffer; buffer = 0; + + + if(inStrm.good()) + return false; + else + return true; +} Added: branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.h =================================================================== --- branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.h (rev 0) +++ branches/OpenMPT_MPTm_Tuning/mptrack/misc_util.h 2007-01-29 21:50:16 UTC (rev 171) @@ -0,0 +1,70 @@ +#ifndef MISC_UTIL_H +#define MISC_UTIL_H + +#include <vector> +#include <sstream> +#include <string> + +using namespace std; + +const UINT STRINGMAXSIZE = 1000; +const UINT VECTORMAXSIZE = 1000; +//Default sizelimits to string/vector load methods. +//Size limits are there to prevent corrupted streams from +//causing e.g. program to try to load of vector of size 2 000 000 000. + +template<class T> +bool VectorToBinaryStream(ostream& outStrm, const vector<T>& v) +//------------------------------------------------------------ +{ + if(!outStrm.good()) return true; + size_t s = v.size(); + outStrm.write(reinterpret_cast<const char*>(&s), sizeof(s)); + vector<T>::const_iterator iter = v.begin(); + for(iter; iter != v.end(); iter++) + outStrm.write(reinterpret_cast<const char*>(&(*iter)), sizeof(T)); + + if(outStrm.good()) + return false; + else + return true; +} + +template<class T> +bool VectorFromBinaryStream(istream& inStrm, vector<T>& v, const size_t maxSize = VECTORMAXSIZE) +//--------------------------------------------------------- +{ + if(!inStrm.good()) return true; + size_t size; + inStrm.read(reinterpret_cast<char*>(&size), sizeof(size)); + + if(size > maxSize) + return true; + + v.resize(size); + ASSERT(v.size() == size); + for(size_t i = 0; i<size; i++) + { + inStrm.read(reinterpret_cast<char*>(&v[i]), sizeof(T)); + } + if(inStrm.good()) + return false; + else + return true; +} + +bool StringToBinaryStream(ostream& outStream, const string& str); +bool StringFromBinaryStream(istream& inStrm, string& str, const size_t maxSize = STRINGMAXSIZE); + + +template<class T> +inline string Stringify(const T& x) +//-------------------------- +{ + std::ostringstream o; + if(!(o << x)) return "STRINGIFY() FAILURE"; + else return o.str(); +} + + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |