From: <re...@us...> - 2006-08-20 20:53:41
|
Revision: 166 Author: rewbs Date: 2006-08-20 13:53:27 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=166&view=rev Log Message: ----------- <rewbs> Creating branch for MPT module format and tuning modes. Added Paths: ----------- branches/OpenMPT_MPTm_Tuning/ Copied: branches/OpenMPT_MPTm_Tuning (from rev 165, trunk/OpenMPT) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <qua...@lu...> - 2006-12-28 22:16:21
|
This svn-commit never ended up to the list, so sending it manually. ------------------------------------------------------- Revision: 168 http://svn.sourceforge.net/modplug/?rev=3D168&view=3Drev Author: Relabsoluness Date: 2006-10-02 14:41:06 -0700 (Mon, 02 Oct 2006) Log Message: ----------- + <Relabs> Tuning advancements(GUI improvements, better modeffect handling = when using new tuning things, finesteps, export/import tunings/tuning colle= ctions...) / <Relabs> Pattern&order code rewriting. Increased limit of patterns and or= ders to 65000(only for MPTm) ? <Relabs> Various smaller modifications including memoryleak fix in patter= n expand. Modified Paths: -------------- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.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_pat.h branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.h branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Moptions.cpp branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp branches/OpenMPT_MPTm_Tuning/mptrack/PatternGotoDialog.cpp branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.h branches/OpenMPT_MPTm_Tuning/mptrack/View_tre.cpp branches/OpenMPT_MPTm_Tuning/mptrack/View_tre.h branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/local_tunings.tc branches/OpenMPT_MPTm_Tuning/mptrack/bin/tunings/standard/std_tunings.tc branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp branches/OpenMPT_MPTm_Tuning/mptrack/mod2midi.cpp branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc branches/OpenMPT_MPTm_Tuning/mptrack/resource.h branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.h branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_AMF.CPP branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_DBM.CPP branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_DMF.CPP branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_DSM.CPP branches/OpenMPT_MPTm_Tuning/soundlib/Load_669.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_ams.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_far.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_it.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_mdl.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_med.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_mtm.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_okt.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_psm.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_ptm.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_s3m.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_stm.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_ult.cpp branches/OpenMPT_MPTm_Tuning/soundlib/Load_wav.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/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 Added Paths: ----------- branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.cpp branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.h branches/OpenMPT_MPTm_Tuning/mptrack/pattern.cpp branches/OpenMPT_MPTm_Tuning/mptrack/pattern.h branches/OpenMPT_MPTm_Tuning/mptrack/patternContainer.cpp branches/OpenMPT_MPTm_Tuning/mptrack/patternContainer.h branches/OpenMPT_MPTm_Tuning/soundlib/mod_specifications.h Property Changed: ---------------- branches/OpenMPT_MPTm_Tuning/ Property changes on: branches/OpenMPT_MPTm_Tuning ___________________________________________________________________ Name: svn:ignore + *.vcproj *.sln Modified: branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-08-20 2= 1:39:55 UTC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-10-02 2= 1:41:06 UTC (rev 168) @@ -200,7 +200,7 @@ BEGIN_CRITICAL(); // Rearrange patterns content - for(i =3D 0 ; i < MAX_PATTERNS ; i++){ + for(i =3D 0; i < m_pSndFile->Patterns.Size(); i++){ // Allocate a new empty pattern to replace current pattern at i'th position= in pattern array p =3D m_pSndFile->Patterns[i]; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp 2006-08-20 21:39:55 U= TC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_gen.cpp 2006-10-02 21:41:06 U= TC (rev 168) @@ -157,7 +157,7 @@ { // Detecting max valid restart position UINT i =3D 0; - for (i=3D0; i<MAX_ORDERS; i++) if (m_pSndFile->Order[i] =3D=3D 0xFF) brea= k; + for (i=3D0; i<m_pSndFile->Order.size(); i++) if (m_pSndFile->Order[i] =3D= =3D m_pSndFile->Patterns.GetInvalidIndex()) break; m_SpinRestartPos.SetRange(0, i); } if (dwHint & HINT_MODGENERAL) @@ -446,9 +446,9 @@ if (s[0]) { UINT n =3D atoi(s); - if (n < MAX_ORDERS) + if(n < m_pSndFile->Order.size()) { - for (UINT i=3D0; i<=3Dn; i++) if (m_pSndFile->Order[i] =3D=3D 0xFF) retur= n; + for (UINT i=3D0; i<=3Dn; i++) if (m_pSndFile->Order[i] =3D=3D m_pSndFile-= >Patterns.GetInvalidIndex()) return; if (n !=3D m_pSndFile->m_nRestartPos) { m_EditRestartPos.SetModify(FALSE); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-08-20 21:39:55 U= TC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-10-02 21:41:06 U= TC (rev 168) @@ -16,6 +16,8 @@ #pragma warning(disable:4244) +const pair<string, WORD> CCtrlInstruments::s_TuningNotFound("Tuning was no= t found. Setting to default tuning", 7); + ///////////////////////////////////////////////////////////////////////// // CNoteMapWnd @@ -161,7 +163,9 @@ // Note s[0] =3D 0; - if ((nPos >=3D 0) && (nPos < 120)) wsprintf(s, "%s%d", szNoteNames[nPos %= 12], nPos/12); + + + if ((nPos >=3D 0) && (nPos < 120)) wsprintf(s, "%s", pSndFile->GetNoteNam= e(nPos+1, m_nInstrument).c_str()); rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont); DrawButtonRect(hdc, &rect, s, FALSE, FALSE); // Mapped Note @@ -174,7 +178,7 @@ UINT n =3D penv->NoteMap[nPos]; if (n =3D=3D 0xFF) strcpy(s, "=3D=3D=3D"); else if (n =3D=3D 0xFE) strcpy(s, "^^^"); else - if (n <=3D 120) wsprintf(s, "%s%d", szNoteNames[(n-1)%12], (n-1)/12); + if (n <=3D 120) wsprintf(s, "%s", pSndFile->GetNoteName(n, m_nInstrument)= .c_str()); } FillRect(hdc, &rect, (bHighLight) ? CMainFrame::brushHighLight : CMainFrame= ::brushWindow); if ((nPos =3D=3D (int)m_nNote) && (!m_bIns)) @@ -818,30 +822,12 @@ m_SpinInstrument.SetFocus(); - //-->Setting tunings to Combobox - for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings()= ; i++) - { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).= GetName().c_str()); - } - for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i= ++) - { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).Get= Name().c_str()); - } - for(size_t i =3D 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); = i++) - { - m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).Ge= tName().c_str()); - } - m_ComboTuning.AddString("Control tunings..."); - m_ComboTuning.SetCurSel(0); - - //<--Setting tunings to Combobox - + BuildTuningComboBox(); +=20 CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); - //OnBnClickedCheckPitchtempolock(); + OnBnClickedCheckPitchtempolock(); m_EditPitchTempoLock.SetLimitText(4); - - return FALSE; } @@ -1075,8 +1061,8 @@ 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); + m_EditPitchTempoLock.EnableWindow(bMPTOnly); + m_CheckPitchTempoLock.EnableWindow(bMPTOnly); } if (dwHintMask & (HINT_INSTRUMENT|HINT_MODTYPE)) { @@ -2387,6 +2373,7 @@ return 0; } + //end rewbs.customKeys void CCtrlInstruments::OnCbnSelchangeCombotuning() @@ -2398,8 +2385,20 @@ if(pInstH =3D=3D 0) return; + size_t sel =3D m_ComboTuning.GetCurSel(); + if(sel =3D=3D 0) //Setting IT behavior. + { + BEGIN_CRITICAL(); + pInstH->SetTuning(NULL); + END_CRITICAL(); + m_pModDoc->SetModified(); + UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + return; + } + + sel -=3D 1; CTuningCollection* tc =3D 0; - size_t sel =3D m_ComboTuning.GetCurSel(); +=20 if(sel < CSoundFile::s_TuningsSharedStandard.GetNumTunings()) tc =3D &CSoundFile::s_TuningsSharedStandard; else @@ -2418,13 +2417,14 @@ if(tc) { BEGIN_CRITICAL(); - pInstH->pTuning =3D &tc->GetTuning(sel); + pInstH->SetTuning(&tc->GetTuning(sel)); END_CRITICAL(); m_pModDoc->SetModified(); + UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); return; } -=20 + //Case: Chosen tuning editor to be displayed. //Creating vector for the CTuningDialog. vector<CTuningCollection*> v; v.push_back(&m_pSndFile->s_TuningsSharedStandard); @@ -2435,27 +2435,9 @@ //Recreating tuning combobox so that possible //new tuning(s) come visible. - while(m_ComboTuning.GetCount() > 0) - m_ComboTuning.DeleteString(0); - for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings()= ; i++) - { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).= GetName().c_str()); - } - for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i= ++) - { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).Get= Name().c_str()); - } - for(size_t i =3D 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); = i++) - { - m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).Ge= tName().c_str()); - } - m_ComboTuning.AddString("Control tunings..."); - m_ComboTuning.SetCurSel(0); - - UpdateTuningComboBox(); - - - //TODO: Update notemap window with correct notenames. + BuildTuningComboBox(); +=20 + UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); } @@ -2464,43 +2446,50 @@ { if (m_pModDoc =3D=3D 0 || m_pSndFile =3D=3D 0=20 || m_nInstrument > m_pSndFile->GetNumInstruments() - || m_pSndFile->Headers[m_nInstrument]->pTuning =3D=3D 0) return; + || m_pSndFile->Headers[m_nInstrument] =3D=3D NULL) return; + INSTRUMENTHEADER* const penv =3D m_pSndFile->Headers[m_nInstrument]; + if(penv->pTuning =3D=3D NULL) + { + m_ComboTuning.SetCurSel(0); + return; + } + for(size_t i =3D 0; i < CSoundFile::s_TuningsSharedStandard.GetNumTunings()= ; i++) { - if(m_pSndFile->Headers[m_nInstrument]->pTuning =3D=3D &CSoundFile::s_Tuni= ngsSharedStandard.GetTuning(i)) + if(penv->pTuning =3D=3D &CSoundFile::s_TuningsSharedStandard.GetTuning(i)= ) { - m_ComboTuning.SetCurSel(i); + m_ComboTuning.SetCurSel(i+1); return; } } for(size_t i =3D 0; i < CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i= ++) { - if(m_pSndFile->Headers[m_nInstrument]->pTuning =3D=3D &CSoundFile::s_Tuni= ngsSharedLocal.GetTuning(i)) + if(penv->pTuning =3D=3D &CSoundFile::s_TuningsSharedLocal.GetTuning(i)) { - m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunin= gs()); + m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunin= gs()+1); return; } } for(size_t i =3D 0; i < m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); = i++) { - if(m_pSndFile->Headers[m_nInstrument]->pTuning =3D=3D &m_pSndFile->m_Tuni= ngsTuneSpecific.GetTuning(i)) + if(penv->pTuning =3D=3D &m_pSndFile->m_TuningsTuneSpecific.GetTuning(i)) { - m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunin= gs() + CSoundFile::s_TuningsSharedLocal.GetNumTunings()); + m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunin= gs() + CSoundFile::s_TuningsSharedLocal.GetNumTunings()+1); return; } } - - string str =3D string("Tuning ") + m_pSndFile->Headers[m_nInstrument]->pT= uning->GetName() - + string(" was not found. Setting to default tuning."); + string str =3D s_TuningNotFound.first; + str.insert(s_TuningNotFound.second, m_pSndFile->Headers[m_nInstrument]->p= Tuning->GetName()); MessageBox(str.c_str()); BEGIN_CRITICAL(); - m_pSndFile->Headers[m_nInstrument]->pTuning =3D m_pSndFile->Headers[m_nIn= strument]->s_DefaultTuning; + penv->SetTuning(penv->s_DefaultTuning); END_CRITICAL(); - m_ComboTuning.SetCurSel(0); + m_pModDoc->SetModified(); + UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); } void CCtrlInstruments::OnEnChangeEditPitchtempolock() @@ -2537,7 +2526,7 @@ if(!penv) return; - //Checking to what value to put for the wPitchToTempoLock. + //Checking what value to put for the wPitchToTempoLock. m_EditPitchTempoLock.EnableWindow(); WORD ptl =3D penv->wPitchToTempoLock; if(ptl =3D=3D 0) @@ -2552,7 +2541,7 @@ ptl =3D m_pSndFile->m_nDefaultTempo; } m_EditPitchTempoLock.SetWindowText(Stringify(ptl).c_str()); - //SetModified() comes with this. + //SetModified() comes with SetWindowText(.). } else { @@ -2568,9 +2557,12 @@ } } + void CCtrlInstruments::OnEnKillfocusEditPitchtempolock() //------------------------------------------------------ { + //Checking that tempo value is in correct range. + if(!m_pSndFile || IsLocked()) return; char buffer[6]; @@ -2578,7 +2570,6 @@ int ptlTempo =3D atoi(buffer); bool changed =3D false; -=20 if(ptlTempo < m_pSndFile->GetTempoMin()) { ptlTempo =3D m_pSndFile->GetTempoMin(); @@ -2590,6 +2581,29 @@ changed =3D true; } - if(changed) m_EditPitchTempoLock.SetWindowText(Stringify(ptlTempo).c_str())= ; } + + +void CCtrlInstruments::BuildTuningComboBox() +//------------------------------------------ +{ + while(m_ComboTuning.GetCount() > 0) + m_ComboTuning.DeleteString(0); + + m_ComboTuning.AddString("IT behavior"); //<-> Instrument pTuning pointer = =3D=3D NULL + for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings()= ; i++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).= GetName().c_str()); + } + for(size_t i =3D 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i= ++) + { + m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).Get= Name().c_str()); + } + for(size_t i =3D 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); = i++) + { + m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).Ge= tName().c_str()); + } + m_ComboTuning.AddString("Control tunings..."); + m_ComboTuning.SetCurSel(0); +} Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h 2006-08-20 21:39:55 UTC= (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.h 2006-10-02 21:41:06 UTC= (rev 168) @@ -81,11 +81,15 @@ //Tuning CComboBox m_ComboTuning; void UpdateTuningComboBox(); + void BuildTuningComboBox(); + static const pair<string, WORD> s_TuningNotFound; + //first <-> string, second <-> place where to put tuning name. //Pitch/Tempo lock CEdit m_EditPitchTempoLock; CButton m_CheckPitchTempoLock; +=20 public: CCtrlInstruments(); virtual ~CCtrlInstruments(); @@ -98,6 +102,8 @@ VOID UpdateFilterText(); LONG* GetSplitPosRef() {return &CMainFrame::glInstrumentWindowHeight;} //re= wbs.varWindowSize +=20 + public: //{{AFX_VIRTUAL(CCtrlInstruments) virtual BOOL OnInitDialog(); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp 2006-08-20 21:39:55 U= TC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.cpp 2006-10-02 21:41:06 U= TC (rev 168) @@ -166,10 +166,13 @@ // Spin controls m_SpinSpacing.SetRange(0, 16); m_SpinSpacing.SetPos(CMainFrame::gnPatternSpacing); + m_SpinInstrument.SetRange(-1, 1); m_SpinInstrument.SetPos(0); + m_SpinOrderListMargins.SetRange(0, m_OrderList.GetShownOrdersMax()); m_SpinOrderListMargins.SetPos(m_OrderList.GetOrderlistMargins()); + SetDlgItemInt(IDC_EDIT_SPACING, CMainFrame::gnPatternSpacing); SetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS, m_OrderList.GetOrderlistMargins()= ); CheckDlgButton(IDC_PATTERN_FOLLOWSONG, !(CMainFrame::m_dwPatternSetup & PAT= TERN_FOLLOWSONGOFF)); //rewbs.noFollow - set to unchecked @@ -178,6 +181,8 @@ UpdateView(HINT_MODTYPE|HINT_PATNAMES, NULL); RecalcLayout(); +=20 + // -> CODE#0012 // -> DESC=3D"midi keyboard split" //rewbs.merge: fix buffer overrun: @@ -222,6 +227,7 @@ m_bInitialized =3D TRUE; UnlockControls(); + return FALSE; } @@ -550,6 +556,7 @@ //----------------------------------------------- { CModDoc *pModDoc =3D GetDocument(); + CSoundFile* pSndFile =3D pModDoc ? pModDoc->GetSoundFile() : NULL; if ((pModDoc) && (m_pParent)) { @@ -560,28 +567,26 @@ } m_pParent->InstrumentChanged(-1); } - if ((lParam >=3D 0) && (lParam < MAX_PATTERNS)) + if ((lParam >=3D 0) && (lParam < m_pSndFile->Patterns.Size())) { - if (pModDoc) + if (pSndFile) { - CSoundFile *pSndFile =3D pModDoc->GetSoundFile(); - for (UINT i=3D0; i<MAX_ORDERS; i++) + for (UINT i=3D0; i<pSndFile->Order.size(); i++) { if (pSndFile->Order[i] =3D=3D (UINT)lParam) { m_OrderList.SetCurSel(i, TRUE); break; } - if (pSndFile->Order[i] =3D=3D 0xFF) break; + if (pSndFile->Order[i] =3D=3D pSndFile->Patterns.GetInvalidIndex()) break= ; } } SetCurrentPattern(lParam); }=20 - else if ((lParam >=3D 0x8000) && (lParam < MAX_ORDERS + 0x8000))=20 + else if ((lParam >=3D 0x8000) && (lParam < pSndFile->Order.size() + 0x800= 0))=20 { - if (pModDoc) + if (pSndFile) { - CSoundFile *pSndFile =3D pModDoc->GetSoundFile(); lParam &=3D 0x7FFF; m_OrderList.SetCurSel(lParam); SetCurrentPattern(pSndFile->Order[lParam]); @@ -693,6 +698,8 @@ SetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS, i); } + + void CCtrlPatterns::OnSpacingChanged() //------------------------------------ { @@ -822,13 +829,13 @@ UINT nCurOrd =3D m_OrderList.GetCurSel(); UINT pat =3D pSndFile->Order[nCurOrd]; UINT rows =3D 64; - if ((pat < MAX_PATTERNS) && (pSndFile->Patterns[pat]) && (pSndFile->m_nTy= pe & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) + if ((pat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[pat]) && (pS= ndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) { rows =3D pSndFile->PatternSize[pat]; if (rows < 32) rows =3D 32; } LONG nNewPat =3D m_pModDoc->InsertPattern(nCurOrd+1, rows); - if ((nNewPat >=3D 0) && (nNewPat < MAX_PATTERNS)) + if ((nNewPat >=3D 0) && (nNewPat < pSndFile->Patterns.Size())) { m_OrderList.SetCurSel(nCurOrd+1); m_OrderList.InvalidateRect(NULL, FALSE); @@ -850,7 +857,7 @@ UINT nCurOrd =3D m_OrderList.GetCurSel(); UINT nCurPat =3D pSndFile->Order[nCurOrd]; UINT rows =3D 64; - if (nCurPat < MAX_PATTERNS) + if (nCurPat < pSndFile->Patterns.Size()) { if ((pSndFile->Patterns[nCurPat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_= TYPE_IT|MOD_TYPE_MPT))) { @@ -858,7 +865,7 @@ if (rows < 16) rows =3D 16; } LONG nNewPat =3D m_pModDoc->InsertPattern(nCurOrd+1, rows); - if ((nNewPat >=3D 0) && (nNewPat < MAX_PATTERNS)) + if ((nNewPat >=3D 0) && (nNewPat < pSndFile->Patterns.Size())) { MODCOMMAND *pSrc =3D pSndFile->Patterns[nCurPat]; MODCOMMAND *pDest =3D pSndFile->Patterns[nNewPat]; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.h 2006-08-20 21:39:55 UTC= (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_pat.h 2006-10-02 21:41:06 UTC= (rev 168) @@ -12,11 +12,13 @@ HFONT m_hFont; COLORREF colorText, colorTextSel; int m_cxFont, m_cyFont, m_nXScroll, m_nScrollPos, m_nDropPos; + //m_nXScroll : The order at the beginning of shown orderlist? //m_nScrollPos: The same as order? BYTE m_nOrderlistMargins; //To tell how many orders('orderboxes') to show at least //on both sides of current order(when updating orderslist position). + UINT m_nDragOrder; BOOL m_bScrolling, m_bDragging, m_bShift; CModDoc *m_pModDoc; @@ -37,10 +39,15 @@ BOOL UpdateScrollInfo(); void UpdateInfoText(); int GetFontWidth(); - BYTE SetOrderlistMargins(int); //Returns the number that was set. + + BYTE SetOrderlistMargins(int); + //Returns the number that was set. + BYTE GetOrderlistMargins() const {return m_nOrderlistMargins;} - BYTE GetShownOrdersMax(); //Should return the maximum number of shown ord= ers. + BYTE GetShownOrdersMax(); + //Should return the maximum number of shown orders. + public: //{{AFX_VIRTUAL(COrderList) virtual BOOL PreTranslateMessage(MSG *pMsg); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2006-08-20 21:39:55 U= TC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2006-10-02 21:41:06 U= TC (rev 168) @@ -105,7 +105,7 @@ UINT nPage; int nMax=3D0; - while ((nMax < MAX_ORDERS) && (pSndFile->Order[nMax] !=3D 0xFF)) nMax++; + while ((nMax < pSndFile->Order.size()) && (pSndFile->Order[nMax] !=3D pSn= dFile->Patterns.GetInvalidIndex())) nMax++; GetScrollInfo(SB_HORZ, &info, SIF_PAGE|SIF_RANGE); info.fMask =3D SIF_PAGE|SIF_RANGE; info.nMin =3D 0; @@ -166,9 +166,10 @@ //--------------------------------------------- { CMainFrame *pMainFrm =3D CMainFrame::GetMainFrame(); + CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); CRect rcClient; - if ((sel < 0) || (sel >=3D MAX_ORDERS) || (!m_pParent) || (!pMainFrm)) re= turn FALSE; + if ((sel < 0) || (sel >=3D pSndFile->Order.size()) || (!m_pParent) || (!p= MainFrm)) return FALSE; if (sel =3D=3D m_nScrollPos) return TRUE; GetClientRect(&rcClient); InvalidateSelection(); @@ -195,9 +196,8 @@ InvalidateSelection(); if ((m_pParent) && (m_pModDoc) && (bEdit)) { - CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); UINT n =3D pSndFile->Order[m_nScrollPos]; - if ((n < MAX_PATTERNS) && (pSndFile->Patterns[n])) + if ((n < pSndFile->Patterns.Size()) && (pSndFile->Patterns[n])) { BOOL bIsPlaying =3D (pMainFrm->GetModPlaying() =3D=3D m_pModDoc); if ((bIsPlaying) && (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP)) @@ -216,7 +216,11 @@ pSndFile->m_nCurrentPattern =3D m_nScrollPos; pSndFile->SetCurrentOrder(m_nScrollPos); pSndFile->m_dwSongFlags |=3D dwPaused; - if (!(dwPaused & SONG_PATTERNLOOP)) pSndFile->GetLength(TRUE); + //if (!(dwPaused & SONG_PATTERNLOOP)) pSndFile->GetLength(TRUE); + //Relabs.note: Commented above line for it seems to cause + //significant slowdown when changing patterns without + //pattern-loop enabled. What is it's purpose anyway? + if (bIsPlaying) pMainFrm->ResetNotificationBuffer(); END_CRITICAL(); } @@ -231,9 +235,9 @@ UINT COrderList::GetCurrentPattern() const //---------------------------------------- { - if ((m_pModDoc) && (m_nScrollPos < MAX_PATTERNS)) + CSoundFile* pSndFile =3D m_pModDoc ? m_pModDoc->GetSoundFile() : NULL; + if ((pSndFile) && (m_nScrollPos < pSndFile->Patterns.Size())) { - CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); return pSndFile->Order[m_nScrollPos]; } return 0; @@ -255,7 +259,7 @@ { CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); int i =3D 0; - for (i=3D0; i<MAX_ORDERS-1; i++) if (pSndFile->Order[i+1] =3D=3D 0xFF) br= eak; + for (i=3D0; i<pSndFile->Order.size()-1; i++) if (pSndFile->Order[i+1] =3D= =3D pSndFile->Patterns.GetInvalidIndex()) break; SetCurSel(i); } break; @@ -288,10 +292,11 @@ CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); int ord =3D pSndFile->Order[m_nScrollPos]; int maxpat =3D 0; - for (int i=3D0; i<MAX_PATTERNS; i++) if (pSndFile->Patterns[i]) maxpat = =3D i; + for (int i=3D0; i<pSndFile->Patterns.Size(); i++) if (pSndFile->Patterns[= i]) maxpat =3D i; if ((nChar >=3D '0') && (nChar <=3D '9')) { - if (ord >=3D MAX_PATTERNS) ord =3D 0; + if (ord >=3D pSndFile->Patterns.Size()) ord =3D 0; + ord =3D ord * 10 + (nChar - '0'); if ((ord >=3D 100) && (ord > maxpat)) ord %=3D 100; if ((ord >=3D 10) && (ord > maxpat)) ord %=3D 10; @@ -299,18 +304,23 @@ if (nChar =3D=3D '+') { ord++; - if (ord > 0xFF) ord =3D 0; else - if ((ord > maxpat) && (ord < 0xFE)) ord =3D 0xFE; + if(ord > pSndFile->Patterns.GetInvalidIndex()) + ord =3D 0; + else + { + if(ord > maxpat && ord < pSndFile->Patterns.GetIgnoreIndex()) + ord =3D pSndFile->Patterns.GetIgnoreIndex(); + } } else if (nChar =3D=3D '-') { ord--; - if (ord < 0) ord =3D 0xFF; else - if ((ord > maxpat) && (ord < 0xFE)) ord =3D maxpat; + if (ord < 0) ord =3D pSndFile->Patterns.GetInvalidIndex(); else + if ((ord > maxpat) && (ord < pSndFile->Patterns.GetIgnoreIndex())) ord = =3D maxpat; } if (ord !=3D pSndFile->Order[m_nScrollPos]) { - pSndFile->Order[m_nScrollPos] =3D (BYTE)ord; + pSndFile->Order[m_nScrollPos] =3D static_cast<UINT>(ord); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); InvalidateSelection(); @@ -401,10 +411,10 @@ s[0] =3D 0; wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "Position= %02Xh of %02Xh" : "Position %d of %d", m_nScrollPos, pSndFile->GetNumPatterns()); - if (m_nScrollPos < MAX_ORDERS) + if (m_nScrollPos < pSndFile->Order.size()) { UINT nPat =3D pSndFile->Order[m_nScrollPos]; - if ((nPat < MAX_PATTERNS) && (nPat < pSndFile->m_nPatternNames)) + if ((nPat < pSndFile->Patterns.Size()) && (nPat < pSndFile->m_nPatternNam= es)) { CHAR szpat[40] =3D ""; if (pSndFile->GetPatternName(nPat, szpat)) @@ -450,7 +460,7 @@ while (rect.left < rcClient.right) { BOOL bHighLight =3D ((bFocus) && (nIndex =3D=3D m_nScrollPos)) ? TRUE : FAL= SE; - int nOrder =3D ((nIndex >=3D 0) && (nIndex < MAX_ORDERS)) ? pSndFile->Ord= er[nIndex] : -1; + int nOrder =3D ((nIndex >=3D 0) && (nIndex < pSndFile->Order.size())) ? p= SndFile->Order[nIndex] : -1; if ((rect.right =3D rect.left + m_cxFont) > rcClient.right) rect.right =3D = rcClient.right; rect.right--; FillRect(dc.m_hDC, &rect, (bHighLight) ? CMainFrame::brushHighLight : CMain= Frame::brushWindow); @@ -482,9 +492,16 @@ s[0] =3D 0; if ((nOrder >=3D 0) && (rect.left + m_cxFont - 4 <=3D rcClient.right)) { - if (nOrder =3D=3D 0xFF) strcpy(s, "---"); else - if (nOrder < MAX_PATTERNS) wsprintf(s, "%d", nOrder); - else strcpy(s, "+++"); + if (nOrder =3D=3D pSndFile->Patterns.GetInvalidIndex()) strcpy(s, "---");= //Print the 'dots' + else=20 + { + if (nOrder < pSndFile->Patterns.Size()) wsprintf(s, "%d", nOrder); + else + { + if(nOrder =3D=3D pSndFile->Patterns.GetIgnoreIndex()) strcpy(s, "+++"); + else strcpy(s, "BUG"); + } + } } dc.SetTextColor((bHighLight) ? colorTextSel : colorText); dc.DrawText(s, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); @@ -531,7 +548,7 @@ { CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); int nOrder =3D m_nXScroll + (pt.x - rect.left) / m_cxFont; - if ((nOrder >=3D 0) && (nOrder < MAX_ORDERS)) + if ((nOrder >=3D 0) && (nOrder < pSndFile->Order.size())) { if (pSndFile->m_nSeqOverride =3D=3D nOrder+1) { pSndFile->m_nSeqOverride=3D0; @@ -599,7 +616,7 @@ if (rect.PtInRect(pt)) { n =3D m_nXScroll + (pt.x - rect.left) / m_cxFont; - if ((n < 0) || (n >=3D MAX_ORDERS)) n =3D -1; + if ((n < 0) || (n >=3D m_pModDoc->GetSoundFile()->Order.size())) n =3D -1= ; } if (n !=3D (int)m_nDropPos) { @@ -638,7 +655,7 @@ HMENU hMenu =3D ::CreatePopupMenu(); UINT nCurrentPattern =3D GetCurrentPattern(); - bool patternExists =3D (nCurrentPattern<MAX_PATTERNS + bool patternExists =3D (nCurrentPattern < m_pModDoc->GetSoundFile()->Patt= erns.Size() && m_pModDoc->GetSoundFile()->Patterns[nCurrentPattern] !=3D NULL); DWORD greyed =3D patternExists?FALSE:MF_GRAYED; @@ -729,7 +746,14 @@ if (m_pModDoc) { CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); - for (int i=3DMAX_ORDERS-1; i>m_nScrollPos; i--) pSndFile->Order[i] =3D pS= ndFile->Order[i-1]; + //Checking whether there is some pattern at the end of orderlist. + + if(pSndFile->Order[pSndFile->Order.size()-1] < pSndFile->Patterns.Size()) + { + if(pSndFile->Order.size() < pSndFile->Order.GetOrderNumberLimitMax()) + pSndFile->Order.push_back(pSndFile->Patterns.GetInvalidIndex()); + } + for (int i=3DpSndFile->Order.size()-1; i>m_nScrollPos; i--) pSndFile->Ord= er[i] =3D pSndFile->Order[i-1]; InvalidateRect(NULL, FALSE); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); @@ -743,13 +767,13 @@ if (m_pModDoc) { CSoundFile *pSndFile =3D m_pModDoc->GetSoundFile(); - for (int i=3Dm_nScrollPos; i<MAX_ORDERS-1; i++) pSndFile->Order[i] =3D pS= ndFile->Order[i+1]; - pSndFile->Order[MAX_ORDERS-1] =3D 0xFF; + for (int i=3Dm_nScrollPos; i<pSndFile->Order.size()-1; i++) pSndFile->Ord= er[i] =3D pSndFile->Order[i+1]; + pSndFile->Order[pSndFile->Order.size()-1] =3D pSndFile->Patterns.GetInval= idIndex(); InvalidateRect(NULL, FALSE); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); UINT nNewOrd =3D pSndFile->Order[m_nScrollPos]; - if ((nNewOrd < MAX_PATTERNS) && (pSndFile->Patterns[nNewOrd]) && (m_pPare= nt)) + if ((nNewOrd < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nNewOrd]= ) && (m_pParent)) { m_pParent->SetCurrentPattern(nNewOrd); } @@ -837,11 +861,12 @@ CPoint pt; if ((!pDropInfo) || (!m_pModDoc) || (m_pModDoc !=3D pDropInfo->pModDoc) || = (!m_cxFont)) return FALSE; + pSndFile =3D m_pModDoc->GetSoundFile(); bCanDrop =3D FALSE; switch(pDropInfo->dwDropType) { case DRAGONDROP_ORDER: - if (pDropInfo->dwDropItem >=3D MAX_ORDERS) break; + if (pDropInfo->dwDropItem >=3D pSndFile->Order.size()) break; case DRAGONDROP_PATTERN: bCanDrop =3D TRUE; break; @@ -851,12 +876,11 @@ ScreenToClient(&pt); if (pt.x < 0) pt.x =3D 0; posdest =3D m_nXScroll + (pt.x / m_cxFont); - if (posdest >=3D MAX_ORDERS) return FALSE; - pSndFile =3D m_pModDoc->GetSoundFile(); + if (posdest >=3D pSndFile->Order.size()) return FALSE; switch(pDropInfo->dwDropType) { case DRAGONDROP_PATTERN: - pSndFile->Order[posdest] =3D (BYTE)pDropInfo->dwDropItem; + pSndFile->Order[posdest] =3D static_cast<UINT>(pDropInfo->dwDropItem); break; case DRAGONDROP_ORDER: Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2006-08-20 21:39:55 U= TC (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2006-10-02 21:41:06 U= TC (rev 168) @@ -7,7 +7,11 @@ #include "view_pat.h" #include "EffectVis.h" //rewbs.fxvis #include "ChannelManagerDlg.h" +#include "../soundlib/tuning_template.h" +#include <string> +using std::string; + // Headers #define ROWHDR_WIDTH 32 // Row header #define COLHDR_HEIGHT 16 // Column header @@ -269,8 +273,11 @@ srcy =3D pfnt->nAlphaNZ_Y + 13 * COLUMN_HEIGHT; break; case '#': - srcx =3D pfnt->nAlphaAM_X; - srcy =3D pfnt->nAlphaAM_Y + 13 * COLUMN_HEIGHT; + srcx =3D pfnt->nNoteX + pfnt->nNoteWidth/2; + srcy =3D pfnt->nNoteY + 2*COLUMN_HEIGHT; + //TODO: '#' doesn't show properly in effect column. + //srcx =3D pfnt->nAlphaAM_X; + //srcy =3D pfnt->nAlphaAM_Y + 13 * COLUMN_HEIGHT; break; //rewbs.smoothVST case '\\': @@ -284,16 +291,24 @@ srcy =3D pfnt->nAlphaNZ_Y + 15 * COLUMN_HEIGHT; break; //end rewbs.velocity - + case ' ': + srcx =3D pfnt->nClrX; + srcy =3D pfnt->nClrY; + break; + case '-': + srcx =3D pfnt->nNoteX + pfnt->nNoteWidth/2; + srcy =3D pfnt->nNoteY + COLUMN_HEIGHT; + break; } m_Dib.TextBlt(x, y, sizex, COLUMN_HEIGHT, srcx+ofsx, srcy); } -void CViewPattern::DrawNote(int x, int y, UINT note) -//-------------------------------------------------- +void CViewPattern::DrawNote(int x, int y, UINT note, CTuning* pTuning) +//------------------------------------------------------------------------= --- { PCPATTERNFONT pfnt =3D GetCurrentPatternFont(); +=20 UINT xsrc =3D pfnt->nNoteX, ysrc =3D pfnt->nNoteY, dx =3D pfnt->nEltWidths[= 0]; if (!note) { @@ -308,11 +323,22 @@ m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc + 14*COLUMN_HEIGHT); } else { - UINT o =3D (note-1) / 12; - UINT n =3D (note-1) % 12; - m_Dib.TextBlt(x, y, pfnt->nNoteWidth, COLUMN_HEIGHT, xsrc, ysrc+(n+1)*COL= UMN_HEIGHT); - m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, - pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + if(pTuning) + { + string noteStr =3D pTuning->GetNoteName(static_cast<CTuning::STEPTYPE>(no= te-NOTE_MIDDLEC)); + noteStr.resize(3, ' '); + DrawLetter(x, y, noteStr[0]); + DrawLetter(x + pfnt->nNoteWidth/2, y, noteStr[1]); + DrawLetter(x + pfnt->nNoteWidth, y, noteStr[2]); + } + else //Original + { + UINT o =3D (note-1) / 12; //Octave + UINT n =3D (note-1) % 12; //Note + m_Dib.TextBlt(x, y, pfnt->nNoteWidth, COLUMN_HEIGHT, xsrc, ysrc+(n+1)*COL= UMN_HEIGHT); + m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, + pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + } } } @@ -491,13 +517,13 @@ { UINT nCurOrder =3D SendCtrlMessage(CTRLMSG_GETCURRENTORDER); - if ((nCurOrder > 0) && (nCurOrder < MAX_ORDERS) && (pSndFile->Order[nCurO= rder] =3D=3D m_nPattern)) + if ((nCurOrder > 0) && (nCurOrder < pSndFile->Order.size()) && (pSndFile-= >Order[nCurOrder] =3D=3D m_nPattern)) { nPrevPat =3D pSndFile->Order[nCurOrder-1]; bPrevPatFound =3D TRUE; } } - if ((bPrevPatFound) && (nPrevPat < MAX_PATTERNS) && (pSndFile->Patterns[n= PrevPat])) + if ((bPrevPatFound) && (nPrevPat < pSndFile->Patterns.Size()) && (pSndFil= e->Patterns[nPrevPat])) { UINT nPrevRows =3D pSndFile->PatternSize[nPrevPat]; UINT n =3D (nSkip < nPrevRows) ? nSkip : nPrevRows; @@ -535,12 +561,12 @@ BOOL bNextPatFound =3D FALSE; UINT nCurOrder =3D SendCtrlMessage(CTRLMSG_GETCURRENTORDER); - if ((nCurOrder+1 < MAX_ORDERS) && (pSndFile->Order[nCurOrder] =3D=3D m_nP= attern)) + if ((nCurOrder+1 < pSndFile->Order.size()) && (pSndFile->Order[nCurOrder]= =3D=3D m_nPattern)) { nNextPat =3D pSndFile->Order[nCurOrder+1]; bNextPatFound =3D TRUE; } - if ((bNextPatFound) && (nNextPat < MAX_PATTERNS) && (pSndFile->Patterns[n= NextPat])) + if ((bNextPatFound) && (nNextPat < pSndFile->Patterns.Size()) && (pSndFil= e->Patterns[nNextPat])) { UINT nNextRows =3D pSndFile->PatternSize[nNextPat]; UINT n =3D ((UINT)nVisRows < nNextRows) ? nVisRows : nNextRows; @@ -757,7 +783,10 @@ } // Drawing note m_Dib.SetTextColor(tx_col, bk_col); - DrawNote(xbmp+x, 0, m->note); + if(pSndFile->m_nType =3D=3D MOD_TYPE_MPT && m->instr < MAX_INSTRUMENTS &&= pSndFile->Headers[m->instr]) + DrawNote(xbmp+x, 0, m->note, pSndFile->Headers[m->instr]->pTuning); + else //Original + DrawNote(xbmp+x, 0, m->note); } x +=3D pfnt->nEltWidths[0]; // Instrument Modified: branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-08-20 21:39:55 UT= C (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-10-02 21:41:06 UT= C (rev 168) @@ -646,6 +646,9 @@ delete m_InputHandler; //rewbs.customKeys delete m_pAutoSaver; //rewbs.autosaver delete m_pPerfCounter; + + //Saving statictunings here. + CSoundFile::SaveStaticTunings(); } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) @@ -1984,11 +1987,9 @@ m_WaveFile.m_nSamples =3D 1; m_WaveFile.Order[0] =3D 0; m_WaveFile.Order[1] =3D 1; - m_WaveFile.Order[2] =3D 0xFF; - m_WaveFile.PatternSize[0] =3D 64; - m_WaveFile.PatternSize[1] =3D 64; - m_WaveFile.Patterns[0] =3D CSoundFile::AllocatePattern(64, 4); - m_WaveFile.Patterns[1] =3D CSoundFile::AllocatePattern(64, 4); + m_WaveFile.Order[2] =3D m_WaveFile.Patterns.GetInvalidIndex(); + m_WaveFile.Patterns.Insert(0,64); + m_WaveFile.Patterns.Insert(1,64); if (m_WaveFile.Patterns[0]) { if (!nNote) nNote =3D 5*12+1; @@ -2059,11 +2060,9 @@ } m_WaveFile.Order[0] =3D 0; m_WaveFile.Order[1] =3D 1; - m_WaveFile.Order[2] =3D 0xFF; - m_WaveFile.PatternSize[0] =3D 64; - m_WaveFile.PatternSize[1] =3D 64; - m_WaveFile.Patterns[0] =3D CSoundFile::AllocatePattern(64, 4); - m_WaveFile.Patterns[1] =3D CSoundFile::AllocatePattern(64, 4); + m_WaveFile.Order[2] =3D m_WaveFile.Patterns.GetInvalidIndex(); + m_WaveFile.Patterns.Insert(0, 64); + m_WaveFile.Patterns.Insert(1, 64); if (m_WaveFile.Patterns[0]) { if (!nNote) nNote =3D 5*12+1; @@ -2539,7 +2538,7 @@ if (m_pSndFile !=3D &m_WaveFile) { UINT nPat =3D m_pSndFile->m_nPattern; - if (nPat < MAX_PATTERNS) + if(nPat < m_pSndFile->Patterns.Size()) { if (nPat < 10) strcat(s, " "); if (nPat < 100) strcat(s, " "); Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h 2006-08-20 21:39:55 UTC = (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h 2006-10-02 21:41:06 UTC = (rev 168) @@ -11,6 +11,7 @@ #include "sndfile.h" #include "CommandSet.h" #include "inputhandler.h" +#include "mptrack.h" class CInputHandler; class CMainFrame; Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2006-08-20 21:39:55 UTC= (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2006-10-02 21:41:06 UTC= (rev 168) @@ -97,7 +97,8 @@ m_lpszLog =3D NULL; m_hWndFollow =3D NULL; memset(PatternUndo, 0, sizeof(PatternUndo)); - memset(OrderUndo, 0, sizeof(OrderUndo)); //rewbs.orderListUndo + vector<BYTE> temp; temp.resize(MAX_UNDO_LEVEL, 0); + OrderUndo.resize(m_SndFile.Order.size(), temp); #ifdef _DEBUG MODCHANNEL *p =3D m_SndFile.Chn; if (((DWORD)p) & 7) Log("MODCHANNEL is not aligned (0x%08X)\n", p); @@ -133,7 +134,7 @@ if (!CDocument::OnNewDocument()) return FALSE; m_SndFile.Create(NULL, this, 0); - m_SndFile.m_nType =3D CTrackApp::GetDefaultDocType(); + m_SndFile.ChangeModTypeTo(CTrackApp::GetDefaultDocType()); // -> CODE#0023 // -> DESC=3D"IT project files (.itp)" @@ -190,7 +191,7 @@ pEmbeddedBank =3D new CDLSBank(); pEmbeddedBank->Open(lpszPathName); } - m_SndFile.m_nType =3D MOD_TYPE_IT; + m_SndFile.ChangeModTypeTo(MOD_TYPE_IT); BeginWaitCursor(); LPMIDILIBSTRUCT lpMidiLib =3D CTrackApp::GetMidiLibrary(); // Scan Instruments @@ -319,17 +320,17 @@ case MOD_TYPE_AMF0: case MOD_TYPE_MTM: case MOD_TYPE_669: - m_SndFile.m_nType =3D MOD_TYPE_MOD; + m_SndFile.ChangeModTypeTo(MOD_TYPE_MOD); break; case MOD_TYPE_MED: case MOD_TYPE_OKT: case MOD_TYPE_AMS: case MOD_TYPE_MT2: - m_SndFile.m_nType =3D MOD_TYPE_XM; + m_SndFile.ChangeModTypeTo(MOD_TYPE_XM); if ((m_SndFile.m_nDefaultTempo =3D=3D 125) && (m_SndFile.m_nDefaultSpeed = =3D=3D 6) && (!m_SndFile.m_nInstruments)) { m_SndFile.m_nType =3D MOD_TYPE_MOD; - for (UINT i=3D0; i<MAX_PATTERNS; i++) + for (UINT i=3D0; i<m_SndFile.Patterns.Size(); i++) if ((m_SndFile.Patterns[i]) && (m_SndFile.PatternSize[i] !=3D 64)) m_SndFile.m_nType =3D MOD_TYPE_XM; } @@ -603,11 +604,10 @@ // m_SndFile.m_nChannels =3D (m_SndFile.m_nType & MOD_TYPE_MOD) ? 8 : 16; m_SndFile.m_nChannels =3D (m_SndFile.m_nType & MOD_TYPE_MOD) ? 8 : 32; // -! BEHAVIOUR_CHANGE#0006 - if (m_SndFile.Order[0] >=3D MAX_PATTERNS) m_SndFile.Order[0] =3D 0; + if (m_SndFile.Order[0] >=3D m_SndFile.Patterns.Size()) m_SndFile.Order[0]= =3D 0; if (!m_SndFile.Patterns[0]) { - m_SndFile.PatternSize[0] =3D 64; - m_SndFile.Patterns[0] =3D CSoundFile::AllocatePattern(m_SndFile.PatternSi= ze[0], m_SndFile.m_nChannels); + m_SndFile.Patterns.Insert(0, 64); } strcpy(m_SndFile.m_szNames[0], "untitled"); m_SndFile.m_nMusicTempo =3D m_SndFile.m_nDefaultTempo =3D 125; @@ -1208,7 +1208,7 @@ UINT CModDoc::GetPatternSize(UINT nPat) const //------------------------------------------- { - if ((nPat < MAX_PATTERNS) && (m_SndFile.Patterns[nPat])) return m_SndFile= .PatternSize[nPat]; + if ((nPat < m_SndFile.Patterns.Size()) && (m_SndFile.Patterns[nPat])) ret= urn m_SndFile.PatternSize[nPat]; return 0; } @@ -1346,7 +1346,7 @@ // Saving as wave file // -> CODE#0024 // -> DESC=3D"wav export update" - UINT p,n =3D 1; + UINT p =3D 0,n =3D 1; DWORD flags[MAX_BASECHANNELS]; CHAR channel[MAX_CHANNELNAME+2]; @@ -1646,18 +1646,18 @@ UINT nNextRow =3D m_SndFile.m_nNextRow; pMainFrm->PauseMod(); BEGIN_CRITICAL(); - if ((bLoop) && (nPat < MAX_PATTERNS)) + if ((bLoop) && (nPat < m_SndFile.Patterns.Size())) { - if ((m_SndFile.m_nCurrentPattern < MAX_ORDERS) && (m_SndFile.Order[m_SndF= ile.m_nCurrentPattern] =3D=3D nPat)) + if ((m_SndFile.m_nCurrentPattern < m_SndFile.Order.size()) && (m_SndFile.= Order[m_SndFile.m_nCurrentPattern] =3D=3D nPat)) { m_SndFile.m_nNextPattern =3D m_SndFile.m_nCurrentPattern; m_SndFile.m_nNextRow =3D nNextRow; m_SndFile.m_nRow =3D nRow; } else { - for (UINT i=3D0; i<MAX_ORDERS; i++) + for (UINT i=3D0; i<m_SndFile.Order.size(); i++) { - if (m_SndFile.Order[i] =3D=3D 0xFF) break; + if (m_SndFile.Order[i] =3D=3D m_SndFile.Patterns.GetInvalidIndex()) break= ; if (m_SndFile.Order[i] =3D=3D nPat) { m_SndFile.m_nCurrentPattern =3D i; @@ -1695,7 +1695,7 @@ CChildFrame *pChildFrm =3D (CChildFrame *) GetChildFrame(); if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) =3D=3D 0) { - //Relabsoluness.note: User has sent play song command: set loop pattern c= heckbox to false. + //User has sent play song command: set loop pattern checkbox to false. pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 0); } @@ -1866,10 +1866,10 @@ if (pat >=3D 0) { UINT ord =3D 0; - for (UINT i=3D0; i<MAX_ORDERS; i++) + for (UINT i=3D0; i<m_SndFile.Order.size(); i++) { if (m_SndFile.Order[i] =3D=3D pat) ord =3D i; - if (m_SndFile.Order[i] =3D=3D 0xFF) break; + if (m_SndFile.Order[i] =3D=3D m_SndFile.Patterns.GetInvalidIndex()) break= ; } ViewPattern(pat, ord); } @@ -1990,6 +1990,7 @@ #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] =3D { {CMD_ARPEGGIO, 0,0, 0, 0xFFFFFFFF, "Arpeggio"}, @@ -2704,14 +2705,14 @@ ord =3D patternViewState->nOrder; } //rewbs.fix3185: if position is invalid, go to start of song. - if (ord > MAX_ORDERS) { + if (ord >=3D m_SndFile.Order.size()) { ord =3D 0; pat =3D pSndFile->Order[ord]; } - if (pat > MAX_PATTERNS) { + if (pat >=3D m_SndFile.Patterns.Size()) { pat=3D0; } - if (row > pSndFile->PatternSize[pat]) { + if (row >=3D pSndFile->PatternSize[pat]) { row=3D0; } //end rewbs.fix3185 @@ -2797,7 +2798,7 @@ { if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) =3D=3D 0) { - //Relabsoluness.note: User has sent play pattern command: set loop patter= n checkbox to true. + //User has sent play pattern command: set loop pattern checkbox to true. pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 1); } @@ -2817,7 +2818,7 @@ pSndFile->Chn[i].nFadeOutVol =3D 0; pSndFile->Chn[i].dwFlags |=3D CHN_NOTEFADE | CHN_KEYOFF; } - if ((nOrd < MAX_PATTERNS) && (pSndFile->Order[nOrd] =3D=3D nPat)) pSndFil= e->m_nCurrentPattern =3D pSndFile->m_nNextPattern =3D nOrd; + if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] =3D=3D nPat= )) pSndFile->m_nCurrentPattern =3D pSndFile->m_nNextPattern =3D nOrd; pSndFile->m_dwSongFlags &=3D ~(SONG_PAUSED|SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow =3D 0; @@ -2848,7 +2849,7 @@ { if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) =3D=3D 0) { - //Relabsoluness.note: User has sent play pattern command: set loop patter= n checkbox to true. + //User has sent play pattern command: set loop pattern checkbox to true. pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 1); } @@ -2865,8 +2866,7 @@ { pSndFile->Chn[i].dwFlags |=3D CHN_NOTEFADE | CHN_KEYOFF; } - if ((nOrd < MAX_PATTERNS) && (pSndFile->Order[nOrd] =3D=3D nPat)) pSndFil= e->m_nCurrentPattern =3D pSndFile->m_nNextPattern =3D nOrd; - //Relabs.note: Some jumps occured when using pattern play and loop patter= n checkbox - above line hopefully fixes it. + if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] =3D=3D nPat= )) pSndFile->m_nCurrentPattern =3D pSndFile->m_nNextPattern =3D nOrd; pSndFile->m_dwSongFlags &=3D ~(SONG_PAUSED|SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow =3D nRow; @@ -2897,7 +2897,7 @@ { if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) =3D=3D 0) { - //Relabsoluness.note: User has sent play song command: set loop pattern c= heckbox to false. + //User has sent play song command: set loop pattern checkbox to false. pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 0); } @@ -3114,4 +3114,4 @@ if (bShowLog) ShowLog("Conversion Status", CMainFrame::GetMainFrame()); SetModified(); } -} \ No newline at end of file +} Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.h 2006-08-20 21:39:55 UTC (= rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.h 2006-10-02 21:41:06 UTC (= rev 168) @@ -83,11 +83,12 @@ protected: LPSTR m_lpszLog; CSoundFile m_SndFile; + BOOL m_bPaused; HWND m_hWndFollow; DWORD m_dwNotifyType; PATTERNUNDOBUFFER PatternUndo[MAX_UNDO_LEVEL]; - BYTE OrderUndo[MAX_UNDO_LEVEL][MAX_ORDERS]; //rewbs.orderListUndo + vector<vector<BYTE> > OrderUndo; // -> CODE#0015 // -> DESC=3D"channels management dlg" @@ -143,7 +144,6 @@ public: BOOL ChangeModType(UINT nNewType); BOOL ChangeNumChannels(UINT nNewChannels); - BOOL ResizePattern(UINT nPattern, UINT nRows); BOOL ConvertInstrumentsToSamples();; BOOL RemoveUnusedSamples(); BOOL RemoveUnusedInstruments(); @@ -217,7 +217,7 @@ void RecordParamChange(int slot, long param); void LearnMacro(int macro, long param); - BOOL RemoveChannels(BOOL bChnMask[MAX_CHANNELS]); //Relabsoluness 20.12.2= 005 + BOOL RemoveChannels(BOOL bChnMask[MAX_CHANNELS]); bool m_bHasValidPath; //becomes true if document is loaded or saved. Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp 2006-08-20 21:39:55 UT= C (rev 167) +++ branches/OpenMPT_MPTm_Tuning/mptrack/Modedit.cpp 2006-10-02 21:41:06 UT= C (rev 168) @@ -42,7 +42,7 @@ } // Check if conversion to 64 rows is necessary - for (UINT ipat=3D0; ipat<MAX_PATTERNS; ipat++) + for (UINT ipat=3D0; ipat<m_SndFile.Patterns.Size(); ipat++) { if ((m_SndFile.Patterns[ipat]) && (m_SndFile.PatternSize[ipat] !=3D 64)) b6= 4++; } @@ -63,29 +63,9 @@ // Resizing all patterns to 64 rows UINT nPatCvt =3D 0; UINT i =3D 0; - for (i=3D0; i<MAX_PATTERNS; i++) if ((m_SndFile.Patterns[i]) && (m_SndFil= e.PatternSize[i] !=3D 64)) + for (i=3D0; i<m_SndFile.Patterns.Size(); i++) if ((m_SndFile.Patterns[i])= && (m_SndFile.PatternSize[i] !=3D 64)) { - if (m_SndFile.PatternSize[i] < 64) - { - MODCOMMAND *p =3D CSoundFile::AllocatePattern(64, m_SndFile.m_nChannels); - if (p) - { - memcpy(p, m_SndFile.Patterns[i], m_SndFile.m_nChannels*m_SndFile.PatternS= ize[i]*sizeof(MODCOMMAND)); - CSoundFile::FreePattern(m_SndFile.Patterns[i]); - m_SndFile.Patterns[i] =3D p; - m_SndFile.PatternSize[i] =3D 64; - } else AddToLog("ERROR: Not enough memory to resize pattern!\n"); - } else - { - MODCOMMAND *pnew =3D CSoundFile::AllocatePattern(64, m_SndFile.m_nChannel= s); - if (pnew) - { - memcpy(pnew, m_SndFile.Patterns[i], m_SndFile.m_nChannels*64*sizeof(MODCO= MMAND)); - CSoundFile::FreePattern(m_SndFile.Patterns[i]); - m_SndFile.Patterns[i] =3D pnew; - } - m_SndFile.PatternSize[i] =3D 64; - } + m_SndFile.Patterns[i].Resize(64); if (b64 < 5) { wsprintf(s, "WARNING: Pattern %d resized to 64 rows\n", i); @@ -116,7 +96,7 @@ // Adjust pattern data if ((m_SndFile.m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) && (nNewType & (MOD_TY= PE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))) { - for (UINT nPat=3D0; nPat<MAX_PATTERNS; nPat++) if (m_SndFile.Patterns[nPa= t]) + for (UINT nPat=3D0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile= .Patterns[nPat]) { MODCOMMAND *m =3D m_SndFile.Patterns[nPat]; for (UINT len =3D m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len;= m++, len--) @@ -172,7 +152,7 @@ } else if ((m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nNewT= ype & (MOD_TYPE_MOD|MOD_TYPE_XM))) { - for (UINT nPat=3D0; nPat<MAX_PATTERNS; nPat++) if (m_SndFile.Patterns[nPa= t]) + for (UINT nPat=3D0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile= .Patterns[nPat]) { MODCOMMAND *m =3D m_SndFile.Patterns[nPat]; for (UINT len =3D m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len-= -; m++) @@ -295,7 +275,7 @@ AddToLog("WARNING: Samples above 31 will be lost when saving this file as M= OD!\n"); } BEGIN_CRITICAL(); - m_SndFile.m_nType =3D nNewType; + m_SndFile.ChangeModTypeTo(nNewType); 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"); @@ -368,7 +348,7 @@ for (int iRst=3Dm_SndFile.m_nChannels-1; iRst>=3D0; iRst--) //rewbs.removeC= hanWindowCleanup { rem.m_bChnMask[iRst] =3D TRUE; - for (UINT ipat=3D0; ipat<MAX_PATTERNS; ipat++) if (m_SndFile.Patterns[ipa= t]) + for (UINT ipat=3D0; ipat<m_SndFile.Patterns.Size(); ipat++) if (m_SndFile= .Patterns[ipat]) { MODCOMMAND *p =3D m_SndFile.Patterns[ipat] + iRst; UINT len =3D m_SndFile.PatternSize[ipat]; @@ -395,7 +375,7 @@ BeginWaitCursor(); // Increasing number of channels BEGIN_CRITICAL(); - for (UINT i=3D0; i<MAX_PATTERNS; i++) if (m_SndFile.Patterns[i]) + for (UINT i=3D0; i<m_SndFile.Patterns.Size(); i++) if (m_SndFile.Patterns= [i]) { MODCOMMAND *p =3D m_SndFile.Patterns[i]; MODCOMMAND *newp =3D CSoundFile::AllocatePattern(m_SndFile.PatternSize[i], = nNewChannels); @@ -447,7 +427,7 @@ BeginWaitCursor(); BEGIN_CRITICAL(); - for (i=3D0; i<MAX_PATTERNS; i++) if (m_SndFile.Patterns[i]) + for (i=3D0; i<m_SndFile.Patterns.Size(); i++) if (m_SndFile.Patterns[i]) { MODCOMMAND *p =3D m_SndFile.Patterns[i]; MODCOMMAND *newp =3D CSoundFile::AllocatePattern(m_SndFile.PatternSize[i], = nRemainingChannels); @@ -495,102 +475,36 @@ return FALSE; } -BOOL CModDoc::ResizePattern(UINT nPattern, UINT nRows) -//---------------------------------------------------- -{ -// -> CODE#0008 -// -> DESC=3D"#define to set pattern size" -// if ((nPattern >=3D MAX_PATTERNS) || (nRows < 2) || (nRows > 256)) retur= n FALSE; - if ((nPattern >=3D MAX_PATTERNS) || (nRows < 2) || (nRows > MAX_PATTERN_R= OWS)) return FALSE; -// -! BEHAVIOUR_CHANGE#0008 - if (m_SndFile.m_nType & (MOD_TYPE_MOD|MOD_TYPE_S3M)) nRows =3D 64; - if (nRows =3D=3D m_SndFile.PatternSize[nPattern]) return TRUE; - BeginWaitCursor(); - BEGIN_CRITICAL(); - if (!m_SndFile.Patterns[nPattern]) - { - m_SndFile.Patterns[nPattern] =3D CSoundFile::AllocatePattern(nRows, m_Snd= File.m_nChannels); - m_SndFile.PatternSize[nPattern] =3D nRows; - } else - if (nRows > m_SndFile.PatternSize[nPattern]) - { - MODCOMMAND *p =3D CSoundFile::AllocatePattern(nRows, m_SndFile.m_nChannel= s); - if (p) - { - memcpy(p, m_SndFile.Patterns[nPattern], m_SndFile.m_nChannels*m_SndFile.P= atternSize[nPattern]*sizeof(MODCOMMAND)); - CSoundFile::FreePattern(m_SndFile.Patterns[nPattern]); - m_SndFile.Patterns[nPattern] =3D p; - m_SndFile.PatternSize[nPattern] =3D nRows; - } - } else - { - BOOL bOk =3D TRUE; - MODCOMMAND *p =3D m_SndFile.Patterns[nPattern]; - UINT ndif =3D (m_SndFile.PatternSize[nPattern] - nRows) * m_SndFile.m_nCh= annels; - UINT npos =3D nRows * m_SndFile.m_nChannels; - for (UINT i=3D0; i<ndif; i++) - { - if (*((DWORD *)(p+i+npos))) - { - bOk =3D FALSE; - break; - } - } - if (!bOk) - { - END_CRITICAL(); - EndWaitCursor(); - if (CMainFrame::GetMainFrame()->MessageBox("Data at the end of the patter= n will be lost.\nDo you want to continue", - "Shrink Pattern", MB_YESNO|MB_ICONQUESTION) =3D=3D IDYES) bOk =3D TRUE; - BeginWaitCursor(); - BEGIN_CRITICAL(); - } - if (bOk) - { - MODCOMMAND *pnew =3D CSoundFile::AllocatePattern(nRows, m_SndFile.m_nChan= nels); - if (pnew) - { - memcpy(pnew, m_SndFile.Patterns[nPattern], m_SndFile.m_nChannels*nRows*si= zeof(MODCOMMAND)); - CSoundFile::FreePattern(m_SndFile.Patterns[nPattern]); - m_SndFile.Patterns[nPattern] =3D pnew; - m_SndFile.PatternSize[nPattern] =3D nRows; - } - } - } - END_CRITICAL(); - EndWaitCursor(); - SetModified(); - return (nRows =3D=3D m_SndFile.PatternSize[nPattern]) ? TRUE : FALSE; -} - BOOL CModDoc::RemoveUnusedPatterns(BOOL bRemove) //---------------------------------------------- { - UINT nPatMap[MAX_PATTERNS]; - UINT nPatRows[MAX_PATTERNS]; - MODCOMMAND *pPatterns[MAX_PATTERNS]; - BOOL bPatUsed[MAX_PATTERNS]; + const UINT maxPatIndex =3D m_SndFile.Patterns.Size(); + const UINT maxOrdIndex =3D m_SndFile.Order.size(); + vector<UINT> nPatMap(maxPatIndex, 0); + vector<UINT> nPatRows(maxPatIndex, 0); + vector<MODCOMMAND*> pPatterns(maxPatIndex, NULL); + vector<BOOL> bPatUsed(maxPatIndex, false); +=20 CHAR s[512]; BOOL bEnd =3D FALSE, bReordered =3D FALSE; UINT nPatRemoved =3D 0, nMinToRemove, nPats; BeginWaitCursor(); - memset(bPatUsed, 0, sizeof(bPatUsed)); UINT maxpat =3D 0; - for (UINT iord=3D0; iord<MAX_ORDERS; iord++) + for (UINT iord=3D0; iord<maxOrdIndex; iord++) { UINT n =3D m_SndFile.Order[iord]; - if (n < MAX_PATTERNS) + if (n < maxPatIndex) { if (n >=3D maxpat) maxpat =3D n+1; if (!bEnd) bPatUsed[n] =3D TRUE; - } else if (n =3D=3D 0xFF) bEnd =3D TRUE; + } else if (n =3D=3D m_SndFile.Patterns.GetInvalidIndex()) bEnd =3D TRUE; } nMinToRemove =3D 0; if (!bRemove) { - UINT imax=3DMAX_PATTERNS; + UINT imax =3D maxPatIndex; while (imax > 0) { imax--; @@ -598,7 +512,7 @@ } nMinToRemove =3D imax+1; } - for (UINT ipat=3Dmaxpat; ipat<MAX_PATTERNS; ipat++) if ((m_SndFile.Patter= ns[ipat]) && (ipat >=3D nMinToRemove)) + for (UINT ipat=3Dmaxpat; ipat<maxPatIndex; ipat++) if ((m_SndFile.Pattern= s[ipat]) && (ipat >=3D nMinToRemove)) { MODCOMMAND *m =3D m_SndFile.Patterns[ipat]; UINT ncmd =3D m_SndFile.m_nChannels * m_SndFile.PatternSize[ipat]; @@ -606,17 +520,13 @@ { if ((m[i].note) || (m[i].instr) || (m[i].volcmd) || (m[i].command)) goto No= tEmpty; } - BEGIN_CRITICAL(); - m_SndFile.PatternSize[ipat] =3D 0; - m_SndFile.FreePattern(m_SndFile.Patterns[ipat]); - m_SndFile.Patterns[ipat] =3D NULL; + m_SndFile.Patterns.Remove(ipat); nPatRemoved++; - END_CRITICAL(); NotEmpty: ; } UINT bWaste =3D 0; - for (UINT ichk=3D0; ichk<MAX_PATTERNS; ichk++) + for (UINT ichk=3D0; ichk < maxPatIndex; ichk++) { if ((m_SndFile.Patterns[ichk]) && (!bPatUsed[ichk])) bWaste++; } @@ -627,34 +537,32 @@ if (CMainFrame::GetMainFrame()->MessageBox(s, "Pattern Cleanup", MB_YESNO) = !=3D IDYES) return TRUE; BeginWaitCursor(); } - memset(nPatRows, 0, sizeof(nPatRows)); - memset(pPatterns, 0, sizeof(pPatterns)); - for (UINT irst=3D0; irst<MAX_PATTERNS; irst++) nPatMap[irst] =3D 0xFFFF; + for (UINT irst=3D0; irst<maxPatIndex; irst++) nPatMap[irst] =3D 0xFFFF; nPats =3D 0; UINT imap =3D 0; - for (imap=3D0; imap<MAX_ORDERS; imap++) + for (imap=3D0; imap<maxOrdIndex; imap++) { UINT n =3D m_SndFile.Order[imap]; - if (n < MAX_PATTERNS) + if (n < maxPatIndex) { - if (nPatMap[n] > MAX_PATTERNS) nPatMap[n] =3D nPats++; + if (nPatMap[n] > maxPatIndex) nPatMap[n] =3D nPats++; m_SndFile.Order[imap] =3D nPatMap[n]; } else if (n =3D=3D 0xFF) break; } // Add unused patterns at the end if ((!bRemove) || (!bWaste)) { - for (UINT iadd=3D0; iadd<MAX_PATTERNS; iadd++) + for (UINT iadd=3D0; iadd<maxPatIndex; iadd++) { - if ((m_SndFile.Patterns[iadd]) && (nPatMap[iadd] >=3D MAX_PATTERNS)) + if ((m_SndFile.Patterns[iadd]) && (nPatMap[iadd] >=3D maxPatIndex)) { nPatMap[iadd] =3D nPats++; } } } - while (imap < MAX_ORDERS) + while (imap < maxOrdIndex) { - m_SndFile.Order[imap++] =3D 0xFF; + m_SndFile.Order[imap++] =3D m_SndFile.Patterns.GetInvalidIndex(); } BEGIN_CRITICAL(); // Reorder patterns & Delete unused patterns @@ -663,10 +571,10 @@ LPSTR lpszpatnames =3D m_SndFile.m_lpszPatternNames; m_SndFile.m_nPatternNames =3D 0; m_SndFile.m_lpszPatternNames =3D NULL; - for (UINT i=3D0; i<MAX_PATTERNS; i++) + for (UINT i=3D0; i<maxPatIndex; i++) { UINT k =3D nPatMap[i]; - if (k < MAX_PATTERNS) + if (k < maxPatIndex) { if (i !=3D k) bReordered =3D TRUE; // Remap pattern names @@ -686,16 +594,13 @@ } else if (m_SndFile.Patterns[i]) { - m_SndFile.FreePattern(m_SndFile.Patterns[i]); - m_SndFile.Patterns[i] =3D NULL; - m_SndFile.PatternSize[i] =3D 0; + m_SndFile.Patterns.Remove(i); nPatRemoved++; } } - for (UINT j=3D0; j<MAX_PATTERNS;j++) + for (UINT j=3D0; j<maxPatIndex;j++) { - m_SndFile.PatternSize[j] =3D nPatRows[j]; - m_SndFile.Patterns[j] =3D pPatterns[j]; + m_SndFile.Patterns[j].SetData(pPatterns[j], nPatRows[j]); } } END_CRITICAL(); @@ -719,7 +624,7 @@ //----------------------------------------- { if (!m_SndFile.m_nInstruments) return FALSE; - for (UINT i=3D0; i<MAX_PATTERNS; i++) if (m_SndFile.Patterns[i]) + for (UINT i=3D0; i<m_SndFile.Patterns.Size(); i++) if (m_SndFile.Patterns= [i]) { MODCOMMAND *p =3D m_SndFile.Patterns[i]; for (UINT j=3Dm_SndFile.m_nChannels*m_SndFile.PatternSize[i]; j; j--, p++) = if (p->instr) @@ -765,7 +670,7 @@ if (m_SndFile.m_nInstruments) { memset(bIns, 0, sizeof(bIns)); - for (UINT ipat=3D0; ipat<MAX_PATTERNS; ipat++) + for (UINT ipat=3D0; ipat<m_SndFile.Patterns.Size(); ipat++) { MODCOMMAND *p =3D m_SndFile.Patterns[ipat]; if (p) @@ -898,7 +803,7 @@ } //all outputs of used plugins count as used - if (usedmap[nPlug]=3D=3Dtrue) { + if (usedmap[nPlug]!=3D0) { if (m_SndFile.m_MixPlugins[nPlug].Info.dwOutputRouting & 0x80) { int output =3D m_SndFile.m_MixPlugins[nPlug].Info.dwOutputRouting & 0x7f; usedmap[output]=3Dtrue; @@ -1021,7 +926,7 @@ END_CRITICAL(); if (nSwap > 0) { - for (UINT iPat=3D0; iPat<MAX_PATTERNS; iPat++) if (m_SndFile.Patterns[iPa= t]) + for (UINT iPat=3D0; iPat<m_SndFile.Patterns.Size(); iPat++) if (m_SndFile= .Patterns[iPat]) { MODCOMMAND *p =3D m_SndFile.Patterns[iPat]; UINT nLen =3D m_SndFile.m_nChannels * m_SndFile.PatternSize[iPat]; @@ -1139,28 +1044,30 @@ LONG CModDoc::InsertPattern(LONG nOrd, UINT nRows) //------------------------------------------------ { - UINT maxpat =3D (m_SndFile.m_nType & MOD_TYPE_MOD) ? 128 : MAX_PATTERNS; - UINT i =3D 0; - for (i=3D0; i<maxpat; i++) + const int i =3D m_SndFile.Patterns.Insert(nRows); + if(i < 0) + return -1; + + //Increasing orderlist size if given order is beyond current limit, + //or if the last order already has a pattern. + if((nOrd =3D=3D m_SndFile.Order.size() || + m_SndFile.Order.back() < m_SndFile.Patterns.S... [truncated message content] |