From: <rel...@us...> - 2008-06-07 12:17:55
|
Revision: 212 http://modplug.svn.sourceforge.net/modplug/?rev=212&view=rev Author: relabsoluness Date: 2008-06-07 05:17:24 -0700 (Sat, 07 Jun 2008) Log Message: ----------- ./ Increased pattern index hint size from 8 bits to 12 bits. Should fix pattern name update bug when using more than 255 pattern. (http://lpchip.com/modplug/viewtopic.php?t=2344) . Refactoring and fixes to UpdateView hint parameter handling. Affects at least some treeview related GUI updates. / Show note about pre-amp setting before changing it. / Changed pattern/order limit for MPTm from 65000 to 4000. ./ Minor tweaks and fixes here and there. Internal: / Refactoring: Added defines for maximum note value and note cut/off values. / Refactoring: Moved some CCtrlPatterns code from ChannelManagerDlg.cpp to ctrl_pat.cpp Modified Paths: -------------- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectVis.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpdlgs.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_gen.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/pattern.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sampleio.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -1,14 +1,16 @@ #include "stdafx.h" -#include "mptrack.h" #include "mainfrm.h" -#include "childfrm.h" #include "moddoc.h" -#include "globals.h" -#include "dlg_misc.h" -#include "ctrl_pat.h" -#include "view_pat.h" +#include "view_gen.h" #include "ChannelManagerDlg.h" +//#include "mptrack.h" +//#include "childfrm.h" +//#include "globals.h" +//#include "dlg_misc.h" +//#include "ctrl_pat.h" +//#include "view_pat.h" + /////////////////////////////////////////////////////////// // CChannelManagerDlg @@ -1114,7 +1116,7 @@ pModDoc->MuteChannel(n,!pModDoc->IsChannelMuted(n)); } pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | (n << 24)); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 1: UINT r; @@ -1132,7 +1134,7 @@ if(button == CM_BT_LEFT) pModDoc->NoFxChannel(n,FALSE); else pModDoc->NoFxChannel(n,TRUE); pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | (n << 24)); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 3: if(button == CM_BT_LEFT){ @@ -1174,36 +1176,7 @@ // -! NEW_FEATURE#0015 -BOOL CCtrlPatterns::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) -//-------------------------------------------------------------------- -{ - // TODO: Add your message handler code here and/or call default - if (nFlags==0) { - PostViewMessage(VIEWMSG_DOSCROLL, zDelta); - } - return CModControlDlg::OnMouseWheel(nFlags, zDelta, pt); -} - -BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT* /*pResult*/) -//--------------------------------------------------------------------- -{ - TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; - UINT nID =pNMHDR->idFrom; - if (pTTT->uFlags & TTF_IDISHWND) - { - // idFrom is actually the HWND of the tool - nID = ::GetDlgCtrlID((HWND)nID); - if(nID) - { - pTTT->lpszText = MAKEINTRESOURCE(nID); - pTTT->hinst = AfxGetResourceHandle(); - return(TRUE); - } - } - - return FALSE; -} void CChannelManagerDlg::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -113,7 +113,7 @@ //------------------------------------------ { if (nNote == m_nNote) return TRUE; - if (nNote >= 120) return FALSE; + if (nNote >= NOTE_MAX) return FALSE; m_nNote = nNote; InvalidateRect(NULL, FALSE); return TRUE; @@ -166,7 +166,7 @@ string temp = pSndFile->GetNoteName(nPos+1, m_nInstrument); temp.resize(4); - if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", temp.c_str()); + if ((nPos >= 0) && (nPos < NOTE_MAX)) wsprintf(s, "%s", temp.c_str()); rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont); DrawButtonRect(hdc, &rect, s, FALSE, FALSE); // Mapped Note @@ -174,12 +174,12 @@ rect.left = rect.right; rect.right = m_cxFont*2-1; strcpy(s, "..."); - if ((penv) && (nPos >= 0) && (nPos < 120) && (penv->NoteMap[nPos])) + if ((penv) && (nPos >= 0) && (nPos < NOTE_MAX) && (penv->NoteMap[nPos])) { UINT n = penv->NoteMap[nPos]; - if (n == 0xFF) strcpy(s, "==="); else - if (n == 0xFE) strcpy(s, "^^^"); else - if (n <= 120) + if (n == NOTE_KEYOFF) strcpy(s, "==="); else + if (n == NOTE_NOTECUT) strcpy(s, "^^^"); else + if (n <= NOTE_MAX) { string temp = pSndFile->GetNoteName(n, m_nInstrument); temp.resize(4); @@ -200,7 +200,7 @@ rect.left = rcClient.left + m_cxFont*2+3; rect.right = rcClient.right; strcpy(s, " .."); - if ((penv) && (nPos >= 0) && (nPos < 120) && (penv->Keyboard[nPos])) + if ((penv) && (nPos >= 0) && (nPos < NOTE_MAX) && (penv->Keyboard[nPos])) { wsprintf(s, "%3d", penv->Keyboard[nPos]); } @@ -298,7 +298,7 @@ { BYTE smpused[(MAX_SAMPLES+7)/8]; memset(smpused, 0, sizeof(smpused)); - for (UINT i=1; i<120; i++) + for (UINT i=1; i<NOTE_MAX; i++) { UINT nsmp = penv->Keyboard[i]; if (nsmp < MAX_SAMPLES) smpused[nsmp>>3] |= 1 << (nsmp & 7); @@ -346,7 +346,7 @@ { BOOL bModified = FALSE; UINT n = penv->Keyboard[m_nNote]; - for (UINT i=0; i<120; i++) if (penv->Keyboard[i] != n) + for (UINT i=0; i<NOTE_MAX; i++) if (penv->Keyboard[i] != n) { penv->Keyboard[i] = n; bModified = TRUE; @@ -374,7 +374,7 @@ if (penv) { BOOL bModified = FALSE; - for (UINT i=0; i<120; i++) if (penv->NoteMap[i] != i+1) + for (UINT i=0; i<NOTE_MAX; i++) if (penv->NoteMap[i] != i+1) { penv->NoteMap[i] = i+1; bModified = TRUE; @@ -448,13 +448,13 @@ { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; - if ((penv) && (m_nNote < 120)) + if ((penv) && (m_nNote < NOTE_MAX)) { if (!m_bIns && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) { UINT n = penv->NoteMap[m_nNote]; BOOL bOk = FALSE; - if ((note > 0) && (note <= 120)) + if ((note > 0) && (note <= NOTE_MAX)) { n = note; bOk = TRUE; @@ -480,7 +480,7 @@ { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; - if ((penv) && (m_nNote < 120)) { + if ((penv) && (m_nNote < NOTE_MAX)) { if ((m_bIns) && (((c >= '0') && (c <= '9')) || (c == ' '))) { //in sample # column @@ -568,7 +568,7 @@ if (m_nNote > 0) { m_nNote = 0; bRedraw = TRUE; } break; case VK_NEXT: - if (m_nNote+3 < 120) { m_nNote+=3; bRedraw = TRUE; } else + if (m_nNote+3 < NOTE_MAX) { m_nNote+=3; bRedraw = TRUE; } else if (m_nNote < 119) { m_nNote = 119; bRedraw = TRUE; } break; case VK_TAB: @@ -822,7 +822,7 @@ // Pitch/Pan Separation m_SpinPPS.SetRange(-32, +32); // Pitch/Pan Center - for (UINT n=0; n<=120; n++) + for (UINT n=0; n<=NOTE_MAX; n++) { wsprintf(s, "%s%d", szNoteNames[n % 12], n/12); m_ComboPPC.SetItemData(m_ComboPPC.AddString(s), n); @@ -863,7 +863,7 @@ { m_nInstrument = nIns; m_NoteMap.SetCurrentInstrument(m_pModDoc, m_nInstrument); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE, NULL); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE, NULL); } else { // Just in case @@ -939,7 +939,7 @@ SetCurrentInstrument((lParam > 0) ? lParam : m_nInstrument); // Initial Update - if (!m_bInitialized) UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_MODTYPE, NULL); + if (!m_bInitialized) UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_MODTYPE, NULL); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); if (pFrame) PostViewMessage(VIEWMSG_LOADSTATE, (LPARAM)pFrame->GetInstrumentViewState()); @@ -1027,7 +1027,7 @@ if (dwHintMask & HINT_MIXPLUGINS) OnMixPlugChanged(); UnlockControls(); if (!(dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE|HINT_MODTYPE))) return; - if (((dwHintMask >> 24) != m_nInstrument) && (dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE)) && (!(dwHintMask & HINT_MODTYPE))) return; + if (((dwHintMask >> HINT_SHIFT_INS) != m_nInstrument) && (dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE)) && (!(dwHintMask & HINT_MODTYPE))) return; LockControls(); if (!m_bInitialized) dwHintMask |= HINT_MODTYPE; if (dwHintMask & HINT_MODTYPE) @@ -1185,6 +1185,9 @@ m_CbnPluginVolumeHandling.EnableWindow(FALSE); m_CbnPluginVelocityHandling.SetCurSel(-1); m_CbnPluginVolumeHandling.SetCurSel(-1); + if(m_nInstrument > m_pSndFile->GetNumInstruments()) + SetCurrentInstrument(m_pSndFile->GetNumInstruments()); + } m_NoteMap.InvalidateRect(NULL, FALSE); } @@ -1295,7 +1298,7 @@ if (m_pModDoc) { m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); } } else bOk = FALSE; } @@ -1328,7 +1331,7 @@ m_pSndFile->ReadInstrumentFromSong(m_nInstrument, pSndFile, nInstr); END_CRITICAL(); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); if (bFirst) m_pModDoc->UpdateAllViews(NULL, HINT_MODTYPE | HINT_INSNAMES | HINT_SMPNAMES); m_pModDoc->SetModified(); EndWaitCursor(); @@ -1465,13 +1468,13 @@ return; } BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; - LONG smp = m_pModDoc->InsertInstrument(0); - if (smp > 0) + LONG ins = m_pModDoc->InsertInstrument(0); + if (ins > 0) { - SetCurrentInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + SetCurrentInstrument(ins); + m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); } - if (bFirst) m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); + if (bFirst) m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument); } SwitchToView(); @@ -1487,13 +1490,13 @@ 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); - if (smp > 0) + LONG ins = m_pModDoc->InsertInstrument(0, m_nInstrument); + if (ins > 0) { - SetCurrentInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + SetCurrentInstrument(ins); + m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); } - if (bFirst) m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); + if (bFirst) m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument); } } @@ -1658,7 +1661,7 @@ // -! NEW_FEATURE#0023 memcpy(penv->name, s, 32); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSNAMES, this); } } } @@ -1993,7 +1996,7 @@ m_CbnPluginVolumeHandling.SetCurSel(penv->nPluginVolumeHandling); m_pModDoc->UpdateAllViews(NULL, HINT_MIXPLUGINS, this); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSNAMES, this); if (penv->nMixPlug) //if we have not just set to no plugin { @@ -2007,7 +2010,7 @@ if (pPlug->pMixPlugin->isInstrument() && penv->nMidiChannel==0) { penv->nMidiChannel=1; m_pSndFile->instrumentModified[m_nInstrument-1] = TRUE; - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT, NULL); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT, NULL); } return; } @@ -2425,7 +2428,7 @@ if (dlg.DoModal() == IDOK) { m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT, this); m_NoteMap.InvalidateRect(NULL, FALSE); } } @@ -2505,7 +2508,7 @@ pInstH->SetTuning(NULL); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); return; } @@ -2533,7 +2536,7 @@ pInstH->SetTuning(&tc->GetTuning(sel)); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); return; } @@ -2559,7 +2562,7 @@ //new tuning(s) come visible. BuildTuningComboBox(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); } @@ -2611,7 +2614,7 @@ penv->SetTuning(penv->s_DefaultTuning); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); } void CCtrlInstruments::OnEnChangeEditPitchtempolock() Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -189,7 +189,7 @@ //CHAR s[8]; CHAR s[10]; - for(int i = 0 ; i < 120 ; i++){ + for(int i = 0 ; i < NOTE_MAX ; i++){ wsprintf(s, "%s%d", szNoteNames[i % 12], i/12); int n = m_CbnSplitNote.AddString(s); m_CbnSplitNote.SetItemData(n, i); @@ -338,7 +338,7 @@ { UINT nPat; if (dwHintMask&HINT_PATNAMES) { - nPat=(dwHintMask>>24)&0xFF; + nPat = (dwHintMask >> HINT_SHIFT_PAT); } else { nPat = SendViewMessage(VIEWMSG_GETCURRENTPATTERN); } @@ -378,7 +378,7 @@ return m_OrderList.GetCurrentPattern(); case CTRLMSG_PATTERNCHANGED: - UpdateView((lParam << 24) | HINT_PATNAMES, NULL); + UpdateView((lParam << HINT_SHIFT_PAT) | HINT_PATNAMES, NULL); break; case CTRLMSG_PAT_PREVINSTRUMENT: @@ -1087,7 +1087,7 @@ { m_pSndFile->SetPatternName(nPat, s); 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); + m_pModDoc->UpdateAllViews(NULL, (nPat << HINT_SHIFT_PAT) | HINT_PATNAMES, this); } } } @@ -1220,4 +1220,37 @@ } -//end rewbs.instroVST \ No newline at end of file +//end rewbs.instroVST + + +BOOL CCtrlPatterns::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) +//-------------------------------------------------------------------- +{ + // TODO: Add your message handler code here and/or call default + + if (nFlags==0) { + PostViewMessage(VIEWMSG_DOSCROLL, zDelta); + } + return CModControlDlg::OnMouseWheel(nFlags, zDelta, pt); +} + +BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT* /*pResult*/) +//--------------------------------------------------------------------- +{ + TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; + UINT nID =pNMHDR->idFrom; + if (pTTT->uFlags & TTF_IDISHWND) + { + // idFrom is actually the HWND of the tool + nID = ::GetDlgCtrlID((HWND)nID); + if(nID) + { + pTTT->lpszText = MAKEINTRESOURCE(nID); + pTTT->hinst = AfxGetResourceHandle(); + return(TRUE); + } + } + + return FALSE; +} + Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -329,7 +329,7 @@ { m_nSample = nSmp; // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - UpdateView((m_nSample << 20) | HINT_SAMPLEINFO, NULL); + UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO, NULL); } if (bUpdNum) { @@ -388,7 +388,7 @@ SetCurrentSample((lParam > 0) ? lParam : m_nSample); // Initial Update // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - if (!m_bInitialized) UpdateView((m_nSample << 20) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); + if (!m_bInitialized) UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); if ((pFrame) && (m_hWndView)) PostViewMessage(VIEWMSG_LOADSTATE, (LPARAM)pFrame->GetSampleViewState()); SwitchToView(); @@ -511,7 +511,8 @@ } if (!(dwHintMask & (HINT_SAMPLEINFO|HINT_MODTYPE))) return; // 05/01/05 : ericus replaced ">> 24" by ">> 20" : 4000 samples -> 12bits [see Moddoc.h] - if (((dwHintMask >> 20) != (m_nSample&0x0fff)) && (!(dwHintMask & HINT_MODTYPE))) return; + //if (((dwHintMask >> 20) != (m_nSample&0x0fff)) && (!(dwHintMask & HINT_MODTYPE))) return; + if (((dwHintMask >> HINT_SHIFT_SMP) != m_nSample) && (!(dwHintMask & HINT_MODTYPE))) return; LockControls(); if (!m_bInitialized) dwHintMask |= HINT_MODTYPE; // Updating Ranges @@ -773,7 +774,7 @@ pins->uFlags |= CHN_PANNING; } // 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_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); m_pModDoc->SetModified(); } return TRUE; @@ -802,7 +803,7 @@ } END_CRITICAL(); // 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_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); m_pModDoc->SetModified(); EndWaitCursor(); return TRUE; @@ -870,14 +871,14 @@ CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); SetCurrentSample(smp); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (smp << 20) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (smp << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES); if ((pSndFile->m_nInstruments) && (!m_pModDoc->FindSampleParent(smp))) { if (MessageBox("This sample is not used by any instrument. Do you want to create a new instrument using this sample ?", NULL, MB_YESNO|MB_ICONQUESTION) == IDYES) { UINT nins = m_pModDoc->InsertInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (nins << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + m_pModDoc->UpdateAllViews(NULL, (nins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); m_pParent->InstrumentChanged(nins); } } @@ -1065,7 +1066,7 @@ { m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } } @@ -1132,7 +1133,7 @@ } m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); EndWaitCursor(); SwitchToView(); @@ -1282,7 +1283,7 @@ SendViewMessage(VIEWMSG_LOADSTATE, (LPARAM)&viewstate); } // 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_SAMPLEDATA | HINT_SAMPLEINFO, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -1407,7 +1408,7 @@ SendViewMessage(VIEWMSG_LOADSTATE, (LPARAM)&viewstate); } // 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_SAMPLEDATA | HINT_SAMPLEINFO, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -1566,7 +1567,7 @@ } // Update sample view - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 m_pModDoc->SetModified(); } @@ -1643,7 +1644,7 @@ OnPitchShiftTimeStretchAccept(); // Update sample view - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 m_pModDoc->SetModified(); } @@ -2068,7 +2069,7 @@ } m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -2125,7 +2126,7 @@ } m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -2173,7 +2174,7 @@ { memcpy(m_pSndFile->m_szNames[m_nSample], s, 32); // 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_SMPNAMES|HINT_SAMPLEINFO), this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | (HINT_SMPNAMES|HINT_SAMPLEINFO), this); m_pModDoc->UpdateAllViews(NULL, HINT_INSNAMES, this); m_pModDoc->SetModified(); } @@ -2194,7 +2195,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); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO, this); if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } @@ -2430,7 +2431,7 @@ pins->nLoopStart = n; m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2447,7 +2448,7 @@ pins->nLoopEnd = n; m_pModDoc->AdjustEndOfSample(m_nSample); // 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_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2487,7 +2488,7 @@ { pins->nSustainStart = n; // 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_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2504,7 +2505,7 @@ { pins->nSustainEnd = n; // 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_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2783,7 +2784,7 @@ if ((nCode == SB_ENDSCROLL) || (nCode == SB_THUMBPOSITION)) SwitchToView(); if (bRedraw) { // 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_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } UnlockControls(); Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -183,7 +183,10 @@ { InvalidateChannelsHeaders(); } - if (((dwHintMask & 0xFFFFFF) == HINT_PATTERNDATA) & (m_nPattern != (dwHintMask >> 24))) return; + //if (((dwHintMask & 0xFFFFFF) == HINT_PATTERNDATA) & (m_nPattern != (dwHintMask >> HINT_SHIFT_PAT))) return; + if ( (HintFlagPart(dwHintMask) == HINT_PATTERNDATA) && (m_nPattern != (dwHintMask >> HINT_SHIFT_PAT)) ) + return; + if (dwHintMask & (HINT_MODTYPE|HINT_PATTERNDATA)) { InvalidatePattern(FALSE); @@ -193,7 +196,7 @@ // -> CODE#0008 // -> DESC"#define to set pattern max size (number of rows) limit (now set to 1024 instead of 256)" // InvalidateRow(dwHintMask >> 24); - InvalidateRow(dwHintMask >> 22); + InvalidateRow(dwHintMask >> HINT_SHIFT_ROW); // -! BEHAVIOUR_CHANGE#0008 } @@ -313,11 +316,11 @@ { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc); } else - if (note == 0xFE) + if (note == NOTE_NOTECUT) { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc + 13*COLUMN_HEIGHT); } else - if (note >= 0xFF) + if (note >= NOTE_KEYOFF) { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc + 14*COLUMN_HEIGHT); } else @@ -335,8 +338,11 @@ UINT o = (note-1) / 12; //Octave UINT n = (note-1) % 12; //Note m_Dib.TextBlt(x, y, pfnt->nNoteWidth, COLUMN_HEIGHT, xsrc, ysrc+(n+1)*COLUMN_HEIGHT); - m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, - pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + if(o <= 9) + m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, + pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + else + DrawLetter(x+pfnt->nNoteWidth, y, '?', pfnt->nOctaveWidth); } } } @@ -409,8 +415,8 @@ yofs = GetYScrollPos(); pSndFile = pModDoc->GetSoundFile(); nColumnWidth = m_szCell.cx; - nrows = pSndFile->PatternSize[m_nPattern]; - ncols = pSndFile->m_nChannels; + nrows = (pSndFile->Patterns[m_nPattern]) ? pSndFile->PatternSize[m_nPattern] : 0; + ncols = pSndFile->GetNumChannels(); xpaint = m_szHeader.cx; ypaint = rcClient.top; ncolhdr = xofs; @@ -783,7 +789,7 @@ { tx_col = row_col; bk_col = row_bkcol; - if ((CMainFrame::m_dwPatternSetup & PATTERN_EFFECTHILIGHT) && (m->note) && (m->note <= 120)) + if ((CMainFrame::m_dwPatternSetup & PATTERN_EFFECTHILIGHT) && (m->note) && (m->note <= NOTE_MAX)) { tx_col = MODCOLOR_NOTE; } @@ -1393,7 +1399,7 @@ INSTRUMENTHEADER *penv = pSndFile->Headers[m->instr]; memcpy(sztmp, penv->name, 32); sztmp[32] = 0; - if ((m->note) && (m->note <= 120)) + if ((m->note) && (m->note <= NOTE_MAX)) { UINT nsmp = penv->Keyboard[m->note-1]; if ((nsmp) && (nsmp <= pSndFile->m_nSamples)) Modified: trunk/OpenMPT/mptrack/EffectVis.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectVis.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/EffectVis.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -617,7 +617,7 @@ MakeChange(m_nDragItem, paramValue); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << 24), NULL); + m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << HINT_SHIFT_PAT), NULL); } else if ((m_dwStatus & FXVSTATUS_LDRAGGING)) { @@ -652,7 +652,7 @@ m_nLastDrawnRow = row; m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << 24), NULL); + m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << HINT_SHIFT_PAT), NULL); } //update status bar Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -372,14 +372,13 @@ BOOL CModDoc::OnSaveDocument(LPCTSTR lpszPathName) //------------------------------------------------ { - static int greccount = 0; - CHAR fext[_MAX_EXT]=""; + TCHAR fext[_MAX_EXT]=""; UINT nType = m_SndFile.m_nType, dwPacking = 0; BOOL bOk = FALSE; m_SndFile.m_dwLastSavedWithVersion = CMainFrame::GetFullVersionNumeric(); if (!lpszPathName) return FALSE; - _splitpath(lpszPathName, NULL, NULL, NULL, fext); + _tsplitpath(lpszPathName, NULL, NULL, NULL, fext); if (!lstrcmpi(fext, ".mod")) nType = MOD_TYPE_MOD; else if (!lstrcmpi(fext, ".s3m")) nType = MOD_TYPE_S3M; else if (!lstrcmpi(fext, ".xm")) nType = MOD_TYPE_XM; else @@ -421,6 +420,7 @@ // -> CODE#0023 // -> 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)){ @@ -435,8 +435,8 @@ for(UINT i = 0 ; i < m_SndFile.m_nInstruments ; i++){ if(m_SndFile.m_szInstrumentPath[i][0] != '\0'){ int size = strlen(m_SndFile.m_szInstrumentPath[i]); - BOOL iti = stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; - BOOL xi = stricmp(&m_SndFile.m_szInstrumentPath[i][size-2],"xi") == 0; + 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|MOD_TYPE_MPT))) m_SndFile.SaveITIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); @@ -1247,7 +1247,7 @@ penv = m_SndFile.Headers[nIns]; if (penv) { - for (UINT i=0; i<120; i++) + for (UINT i=0; i<NOTE_MAX; i++) { if (penv->Keyboard[i] == nSmp) return TRUE; } @@ -1265,7 +1265,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[i]; if (penv) { - for (UINT j=0; j<120; j++) + for (UINT j=0; j<NOTE_MAX; j++) { if (penv->Keyboard[j] == nSmp) return i; } @@ -1283,7 +1283,7 @@ penv = m_SndFile.Headers[nIns]; if (penv) { - for (UINT i=0; i<120; i++) + for (UINT i=0; i<NOTE_MAX; i++) { UINT n = penv->Keyboard[i]; if ((n) && (n <= m_SndFile.m_nSamples)) return n; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Moddoc.h 2008-06-07 12:17:24 UTC (rev 212) @@ -10,11 +10,8 @@ #endif // _MSC_VER >= 1000 #include "sndfile.h" +#include "misc_util.h" -// C-5 -#define NOTE_MIDDLEC (5*12+1) -#define NOTE_KEYOFF 0xFF -#define NOTE_NOTECUT 0xFE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -39,6 +36,19 @@ #define HINT_UNDO 0x10000 #define HINT_MIXPLUGINS 0x20000 #define HINT_SPEEDCHANGE 0x40000 //rewbs.envRowGrid +#define HINT_MAXHINTFLAG HINT_SPEEDCHANGE +//Bits 0-18 are reserved. +#define HINT_MASK_FLAGS (2*HINT_MAXHINTFLAG - 1) //When applied to hint parameter, should give the flag part. +#define HINT_MASK_ITEM (~HINT_MASK_FLAGS) //To nullify update hintbits from hint parameter. +#define HintFlagPart(x) ((x) & HINT_MASK_FLAGS) + +//If fails, hint flagbits|itembits does not enable all bits; +//might be worthwhile to check the reason. +STATIC_ASSERT( (HINT_MASK_ITEM | HINT_MASK_FLAGS) == -1 ); + +//If fails, hint param flag and item parts overlap; might be a problem. +STATIC_ASSERT( (HINT_MASK_ITEM & HINT_MASK_FLAGS) == 0 ); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // NOTE : be carefull when adding new flags !!! // ------------------------------------------------------------------------------------------------------------------------- @@ -50,6 +60,32 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Updateview hints can, in addition to the actual hints, contain +//addition data such as pattern or instrument index. The +//values below define the number of bits used for these. +#define HINT_BITS_PATTERN 12 +#define HINT_BITS_ROWS 10 +#define HINT_BITS_SAMPLE 12 +#define HINT_BITS_INST 8 +#define HINT_BITS_CHNTAB 8 + +//Defines bit shift values used for setting/retrieving the additional hint data to/from hint parameter. +#define HINT_SHIFT_PAT (32 - HINT_BITS_PATTERN) +#define HINT_SHIFT_ROW (32 - HINT_BITS_ROWS) +#define HINT_SHIFT_SMP (32 - HINT_BITS_SAMPLE) +#define HINT_SHIFT_INS (32 - HINT_BITS_INST) +#define HINT_SHIFT_CHNTAB (32 - HINT_BITS_CHNTAB) + +//Check that hint bit counts are not too large given the number of hint flags. +STATIC_ASSERT( ((-1 << HINT_SHIFT_PAT) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_PAT) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_ROW) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_ROW) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_SMP) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_SMP) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_INS) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_INS) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_CHNTAB) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_CHNTAB) ); + + + // Undo #define MAX_UNDO_LEVEL 100 Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -8,15 +8,18 @@ #include "dlg_misc.h" #include "dlsbank.h" -#pragma warning(disable:4244) +#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif +#define str_mptm_conversion_warning GetStrI18N(_TEXT("Conversion from mptm to any other moduletype may makes certain features unavailable and is not guaranteed to work properly. Do the conversion anyway?")) + ////////////////////////////////////////////////////////////////////// // Module type conversion @@ -52,9 +55,36 @@ if(oldTypeIsMPT) { - if(::MessageBox(NULL, "Convertion from MPTm to any other modtype makes certain features unavailable and is not guaranteed to work properly; Do the convertion anyway?", - "Notice", MB_YESNO) != IDYES) + if(::MessageBox(NULL, str_mptm_conversion_warning, 0, MB_YESNO) != IDYES) return FALSE; + + /* + Incomplete list of MPTm-only features and extensions in the old formats: + + Features only available for MPTm: + -User definable tunings. + -Extended pattern range + -Extended sequence + + Extended features in IT/XM/S3M/MOD(not all listed below are available in all of those formats): + -plugs + -Extended ranges for + -sample count + -instrument count + -pattern count + -sequence size + -Row count + -channel count + -tempo limits + -Extended sample/instrument properties. + -MIDI mapping directives + -Versioninfo + -channel names + -pattern names + -Alternative tempomodes + -For more info, see e.g. SaveExtendedSongProperties(), SaveExtendedInstrumentProperties() + */ + } // Check if conversion to 64 rows is necessary @@ -270,7 +300,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[j]; if (penv) { - for (UINT k=0; k<120; k++) + for (UINT k=0; k<NOTE_MAX; k++) { if ((penv->NoteMap[k]) && (penv->NoteMap[k] != (BYTE)(k+1))) { @@ -665,7 +695,7 @@ UINT jmax = m_SndFile.PatternSize[ipat] * m_SndFile.m_nChannels; for (UINT j=0; j<jmax; j++, p++) { - if ((p->note) && (p->note <= 120)) + if ((p->note) && (p->note <= NOTE_MAX)) { if ((p->instr) && (p->instr < MAX_INSTRUMENTS)) { @@ -1460,8 +1490,8 @@ switch(note) { case 0: p[1] = p[2] = p[3] = '.'; break; - case 0xFF: p[1] = p[2] = p[3] = '='; break; - case 0xFE: p[1] = p[2] = p[3] = '^'; break; + case NOTE_KEYOFF: p[1] = p[2] = p[3] = '='; break; + case NOTE_NOTECUT: p[1] = p[2] = p[3] = '^'; break; default: p[1] = szNoteNames[(note-1) % 12][0]; p[2] = szNoteNames[(note-1) % 12][1]; @@ -1604,8 +1634,8 @@ (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) { m[col].note = 0; - if (s[0] == '=') m[col].note = 0xFF; else - if (s[0] == '^') m[col].note = 0xFE; else + if (s[0] == '=') m[col].note = NOTE_KEYOFF; else + if (s[0] == '^') m[col].note = NOTE_NOTECUT; else if (s[0] != '.') { for (UINT i=0; i<12; i++) @@ -1710,7 +1740,7 @@ if (bOk) { SetModified(); - UpdateAllViews(NULL, HINT_PATTERNDATA | (nPattern << 24), NULL); + UpdateAllViews(NULL, HINT_PATTERNDATA | (nPattern << HINT_SHIFT_PAT), NULL); } } CloseClipboard(); @@ -1831,7 +1861,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[nIns]; UINT susBegin=0, susEnd=0, loopBegin=0, loopEnd=0, bSus=0, bLoop=0, bCarry=0, nPoints=0, releaseNode = ENV_RELEASE_NODE_UNSET; DWORD dwMemSize = GlobalSize(hCpy), dwPos = strlen(pszEnvHdr); - if ((dwMemSize > dwPos) && (!strnicmp(p, pszEnvHdr, dwPos-2))) + if ((dwMemSize > dwPos) && (!_strnicmp(p, pszEnvHdr, dwPos-2))) { for (UINT h=0; h<8; h++) { @@ -1947,7 +1977,7 @@ GlobalUnlock(hCpy); CloseClipboard(); SetModified(); - UpdateAllViews(NULL, (nIns << 24) | HINT_ENVELOPE, NULL); + UpdateAllViews(NULL, (nIns << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); } EndWaitCursor(); return TRUE; Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -7,9 +7,12 @@ #include "moptions.h" #include "moddoc.h" #include "snddev.h" +#include ".\mpdlgs.h" -#pragma warning(disable:4244) +#define str_preampChangeNote GetStrI18N(_TEXT("Note: Pre-Amp setting affects sample volume only. Changing this setting may cause undesired effects on volume balance between sample based instruments and plugin instrument.")) +//#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" + LPCSTR szCPUNames[8] = { "133MHz", @@ -165,11 +168,9 @@ } // Pre-Amplification { - int n = (CMainFrame::m_nPreAmp - 64) / 8; - if ((n < 0) || (n > 40)) n = 16; m_SliderPreAmp.SetTicFreq(5); m_SliderPreAmp.SetRange(0, 40); - m_SliderPreAmp.SetPos(40 - n); + SetPreAmpSliderPosition(); } // Sound Device { @@ -255,18 +256,36 @@ } +void COptionsSoundcard::SetPreAmpSliderPosition() +//----------------------------------------------- +{ + int n = (CMainFrame::m_nPreAmp - 64) / 8; + if ((n < 0) || (n > 40)) n = 16; + m_SliderPreAmp.SetPos(40 - n); +} + + void COptionsSoundcard::OnVScroll(UINT n, UINT pos, CScrollBar *p) //---------------------------------------------------------------- { CPropertyPage::OnVScroll(n, pos, p); // PreAmp { - int n = 40 - m_SliderPreAmp.GetPos(); - if ((n >= 0) && (n <= 40)) // approximately +/- 10dB + if(m_PreAmpNoteShowed == true) { - CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->SetPreAmp(64 + (n * 8)); + int n = 40 - m_SliderPreAmp.GetPos(); + if ((n >= 0) && (n <= 40)) // approximately +/- 10dB + { + CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); + if (pMainFrm) pMainFrm->SetPreAmp(64 + (n * 8)); + } } + else + { + m_PreAmpNoteShowed = true; + MessageBox(str_preampChangeNote, _TEXT(""), MB_ICONINFORMATION); + SetPreAmpSliderPosition(); + } } } @@ -464,7 +483,7 @@ //rewbs.resamplerConf OnResamplerChanged(); char s[20] = ""; - ltoa(CMainFrame::glVolumeRampSamples,s, 10); + _ltoa(CMainFrame::glVolumeRampSamples,s, 10); m_CEditRamping.SetWindowText(s); //end rewbs.resamplerConf return TRUE; @@ -499,7 +518,7 @@ //rewbs.resamplerConf void COptionsPlayer::OnWFIRTypeChanged() { - CMainFrame::gbWFIRType = m_CbnWFIRType.GetCurSel(); + CMainFrame::gbWFIRType = static_cast<BYTE>(m_CbnWFIRType.GetCurSel()); OnSettingsChanged(); } @@ -1150,5 +1169,3 @@ return CPropertyPage::OnSetActive(); } - - Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2008-06-07 12:17:24 UTC (rev 212) @@ -17,11 +17,16 @@ DWORD m_dwRate, m_dwSoundSetup, m_nBitsPerSample, m_nChannels; DWORD m_nBufferLength; DWORD m_nSoundDevice; + bool m_PreAmpNoteShowed; public: COptionsSoundcard(DWORD rate, DWORD q, DWORD bits, DWORD chns, DWORD bufsize, DWORD sd):CPropertyPage(IDD_OPTIONS_SOUNDCARD) - { m_dwRate = rate; m_dwSoundSetup = q; m_nBitsPerSample = bits; m_nChannels = chns; m_nBufferLength = bufsize; m_nSoundDevice = sd; } + { m_dwRate = rate; m_dwSoundSetup = q; m_nBitsPerSample = bits; m_nChannels = chns; + m_nBufferLength = bufsize; m_nSoundDevice = sd; m_PreAmpNoteShowed = false;} +private: + void SetPreAmpSliderPosition(); + protected: virtual BOOL OnInitDialog(); virtual void OnOK(); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -632,11 +632,13 @@ // Initialize OLE MFC support AfxOleInit(); // Standard initialization +/* #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif +*/ // Change the registry key under which our settings are stored. //SetRegistryKey(_T("Olivier Lapicque")); Modified: trunk/OpenMPT/mptrack/Stdafx.h =================================================================== --- trunk/OpenMPT/mptrack/Stdafx.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Stdafx.h 2008-06-07 12:17:24 UTC (rev 212) @@ -78,6 +78,9 @@ #define VERSIONNUMBER(v1, v2, v3, v4) ((v1 << 24) + (v2 << 16) + (v3 << 8) + v4) +//To mark string that should be translated in case of multilingual version. +#define GetStrI18N(x) (x) + //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -283,7 +283,7 @@ void CViewGlobals::OnUpdate(CView* pView, LPARAM lHint, CObject*pHint) //-------------------------------------------------------------------- { - if (((lHint & 0xFFFF) == HINT_MODCHANNELS) && ((lHint >> 24) != m_nActiveTab)) return; + if ((HintFlagPart(lHint) == HINT_MODCHANNELS) && ((lHint >> HINT_SHIFT_CHNTAB) != m_nActiveTab)) return; if (pView != this) UpdateView(lHint, pHint); } @@ -329,7 +329,6 @@ } if (nOldSel >= (UINT)nTabCount) nOldSel = 0; - //Changing the order of these calls seemed to fix a GUI bug (http://lpchip.com/modplug/viewtopic.php?t=1324) m_TabCtrl.SetRedraw(TRUE); m_TabCtrl.SetCurSel(nOldSel); @@ -560,263 +559,90 @@ if (pResult) *pResult = 0; } - -void CViewGlobals::OnMute1() -//-------------------------- +void CViewGlobals::OnMute(const CHANNELINDEX chnMod4, const UINT itemID) +//--------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK1)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4; if (pModDoc) { + const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; + const UINT nChn = m_nActiveTab * 4 + chnMod4; pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } +void CViewGlobals::OnMute1() {OnMute(0, IDC_CHECK1);} +void CViewGlobals::OnMute2() {OnMute(1, IDC_CHECK3);} +void CViewGlobals::OnMute3() {OnMute(2, IDC_CHECK5);} +void CViewGlobals::OnMute4() {OnMute(3, IDC_CHECK7);} -void CViewGlobals::OnMute2() -//-------------------------- -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK3)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 1; - - if (pModDoc) - { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - -void CViewGlobals::OnMute3() -//-------------------------- +void CViewGlobals::OnSurround(const CHANNELINDEX chnMod4, const UINT itemID) +//-------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK5)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 2; if (pModDoc) { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnMute4() -//-------------------------- -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK7)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 3; - - if (pModDoc) - { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround1() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK2)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4; - - if (pModDoc) - { + const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; + const UINT nChn = m_nActiveTab * 4 + chnMod4; pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } +void CViewGlobals::OnSurround1() {OnSurround(0, IDC_CHECK2);} +void CViewGlobals::OnSurround2() {OnSurround(1, IDC_CHECK4);} +void CViewGlobals::OnSurround3() {OnSurround(2, IDC_CHECK6);} +void CViewGlobals::OnSurround4() {OnSurround(3, IDC_CHECK8);} -void CViewGlobals::OnSurround2() -//------------------------------ +void CViewGlobals::OnEditVol(const CHANNELINDEX chnMod4, const UINT itemID) +//------------------------------------------------------------ { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK4)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 1; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround3() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK6)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 2; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround4() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK8)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 3; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnEditVol1() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4; - int vol = GetDlgItemIntEx(IDC_EDIT1); + const UINT nChn = m_nActiveTab * 4 + chnMod4; + const int vol = GetDlgItemIntEx(itemID); if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) { if (pModDoc->SetChannelGlobalVolume(nChn, vol)) { - m_sbVolume[0].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + m_sbVolume[chnMod4].SetPos(vol); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } +void CViewGlobals::OnEditVol1() {OnEditVol(0, IDC_EDIT1);} +void CViewGlobals::OnEditVol2() {OnEditVol(1, IDC_EDIT3);} +void CViewGlobals::OnEditVol3() {OnEditVol(2, IDC_EDIT5);} +void CViewGlobals::OnEditVol4() {OnEditVol(3, IDC_EDIT7);} -void CViewGlobals::OnEditVol2() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 1; - int vol = GetDlgItemIntEx(IDC_EDIT3); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[1].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - -void CViewGlobals::OnEditVol3() -//----------------------------- +void CViewGlobals::OnEditPan(const CHANNELINDEX chnMod4, const UINT itemID) +//-------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 2; - int vol = GetDlgItemIntEx(IDC_EDIT5); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[2].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditVol4() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 3; - int vol = GetDlgItemIntEx(IDC_EDIT7); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[3].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditPan1() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4; - int pan = GetDlgItemIntEx(IDC_EDIT2); + const UINT nChn = m_nActiveTab * 4 + chnMod4; + const int pan = GetDlgItemIntEx(itemID); if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) { if (pModDoc->SetChannelDefaultPan(nChn, pan)) { - m_sbPan[0].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + m_sbPan[chnMod4].SetPos(pan/4); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } -void CViewGlobals::OnEditPan2() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 1; - int pan = GetDlgItemIntEx(IDC_EDIT4); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[1].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} +void CViewGlobals::OnEditPan1() {OnEditPan(0, IDC_EDIT2);} +void CViewGlobals::OnEditPan2() {OnEditPan(1, IDC_EDIT4);} +void CViewGlobals::OnEditPan3() {OnEditPan(2, IDC_EDIT6);} +void CViewGlobals::OnEditPan4() {OnEditPan(3, IDC_EDIT8);} -void CViewGlobals::OnEditPan3() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 2; - int pan = GetDlgItemIntEx(IDC_EDIT6); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[2].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditPan4() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 3; - int pan = GetDlgItemIntEx(IDC_EDIT8); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[3].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - void CViewGlobals::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //--------------------------------------------------------------------------- { @@ -880,7 +706,7 @@ } //end rewbs.dryRatio - if (bUpdate) pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + if (bUpdate) pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); UnlockControls(); if ((pScrollBar) && (pScrollBar->m_hWnd == m_sbValue.m_hWnd)) @@ -952,8 +778,8 @@ } -void CViewGlobals::OnEditName1() -//------------------------------ +void CViewGlobals::OnEditName(const CHANNELINDEX chnMod4, const UINT itemID) +//---------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -961,181 +787,53 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4; + const UINT nChn = m_nActiveTab * 4 + chnMod4; memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT9, s, sizeof(s)); + GetDlgItemText(itemID, s, sizeof(s)); s[MAX_CHANNELNAME+1] = 0; if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } +void CViewGlobals::OnEditName1() {OnEditName(0, IDC_EDIT9);} +void CViewGlobals::OnEditName2() {OnEditName(1, IDC_EDIT10);} +void CViewGlobals::OnEditName3() {OnEditName(2, IDC_EDIT11);} +void CViewGlobals::OnEditName4() {OnEditName(3, IDC_EDIT12);} -void CViewGlobals::OnEditName2() -//------------------------------ +void CViewGlobals::OnFxChanged(const CHANNELINDEX chnMod4) +//-------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 1; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT10, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; - pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditName3() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 2; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT11, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; - pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditName4() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 3; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT12, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFi... [truncated message content] |