|
From: <re...@us...> - 2006-08-20 20:32:51
|
Revision: 165 Author: rewbs Date: 2006-08-20 13:29:31 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=165&view=rev Log Message: ----------- v1.17.02.45 + <Relabsoluness & Alex> "Pitch to tempo lock" instrument setting: define the tempo at which your instrument loops correctly, and it will be pitched automatically to match the song's current tempo. + <Relabsoluness> Notification when attempting to modify pattern but pattern record is off. + <Relabsoluness> Orderlist margins: you can define how many slots to keep visible around the active pattern as the orderlist scrolls . <Relabsoluness> Fixes for various unexpected pattern loop state changes. . <Relabsoluness> Fixes to IT Style clear. . <Relabsoluness> Memory management fixes and misc other bug fixes. . <rewbs> ITP loading fixed (I broke it in v1.17.02.44) . <rewbs> Time estimation fixed for tracks with pattern break+XParam. . <rewbs> "Last saved with" version number was not always saved correctly - fixed Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_com.cpp trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_ins.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/bin/mptrack_Generic.exe trunk/OpenMPT/mptrack/bin/mptrack_P3.exe trunk/OpenMPT/mptrack/bin/mptrack_P4-Athlon64.exe trunk/OpenMPT/mptrack/bin/mptrack_athlon32.exe trunk/OpenMPT/mptrack/bin/version trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.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/Sndmix.cpp trunk/OpenMPT/soundlib/Tables.cpp trunk/OpenMPT/unlha/Unlha.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_com.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_com.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -186,13 +186,13 @@ if (p[0]) m_pSndFile->m_lpszSongComments = p; else - delete p; + delete[] p; if (oldcomments) { BOOL bSame = FALSE; if ((m_pSndFile->m_lpszSongComments) && (!strcmp(m_pSndFile->m_lpszSongComments, oldcomments))) bSame = TRUE; - delete oldcomments; + delete[] oldcomments; if (bSame) return; } else { Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -156,7 +156,8 @@ if (dwHint & HINT_MODSEQUENCE) { // Detecting max valid restart position - for (UINT i=0; i<MAX_ORDERS; i++) if (m_pSndFile->Order[i] == 0xFF) break; + UINT i = 0; + for (i=0; i<MAX_ORDERS; i++) if (m_pSndFile->Order[i] == 0xFF) break; m_SpinRestartPos.SetRange(0, i); } if (dwHint & HINT_MODGENERAL) Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -7,6 +7,11 @@ #include "ctrl_ins.h" #include "view_ins.h" #include "dlg_misc.h" +#include "misc_util.h" +#include <vector> +#include <string> +using std::string; +using std::vector; #pragma warning(disable:4244) @@ -215,7 +220,7 @@ { CWnd::OnSetFocus(pOldWnd); InvalidateRect(NULL, FALSE); - CMainFrame::GetMainFrame()->m_pNoteMapHasFocus= (CWnd*) this; //rewbs.customKeys + CMainFrame::GetMainFrame()->m_pNoteMapHasFocus = (CWnd*) this; //rewbs.customKeys } @@ -644,6 +649,9 @@ ON_CBN_SELCHANGE(IDC_FILTERMODE, OnFilterModeChanged) ON_COMMAND(ID_INSTRUMENT_SAMPLEMAP, OnEditSampleMap) //}}AFX_MSG_MAP + ON_EN_CHANGE(IDC_EDIT_PITCHTEMPOLOCK, OnEnChangeEditPitchtempolock) + ON_BN_CLICKED(IDC_CHECK_PITCHTEMPOLOCK, OnBnClickedCheckPitchtempolock) + ON_EN_KILLFOCUS(IDC_EDIT_PITCHTEMPOLOCK, OnEnKillfocusEditPitchtempolock) END_MESSAGE_MAP() void CCtrlInstruments::DoDataExchange(CDataExchange* pDX) @@ -688,6 +696,8 @@ DDX_Control(pDX, IDC_SLIDER5, m_SliderAttack); DDX_Control(pDX, IDC_SPIN1, m_SpinAttack); // -! NEW_FEATURE#0027 + DDX_Control(pDX, IDC_CHECK_PITCHTEMPOLOCK, m_CheckPitchTempoLock); + DDX_Control(pDX, IDC_EDIT_PITCHTEMPOLOCK, m_EditPitchTempoLock); //}}AFX_DATA_MAP } @@ -805,8 +815,12 @@ m_SpinInstrument.SetFocus(); + CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); + //OnBnClickedCheckPitchtempolock(); + m_EditPitchTempoLock.SetLimitText(4); + return FALSE; } @@ -1038,6 +1052,8 @@ m_SliderResonance.EnableWindow(bITonly); m_SpinInstrument.SetRange(1, m_pSndFile->m_nInstruments); m_SpinInstrument.EnableWindow((m_pSndFile->m_nInstruments) ? TRUE : FALSE); + m_EditPitchTempoLock.EnableWindow(bITonly); + m_CheckPitchTempoLock.EnableWindow(bITonly); } if (dwHintMask & (HINT_INSTRUMENT|HINT_MODTYPE)) { @@ -1129,6 +1145,12 @@ if(n == 0) SetDlgItemText(IDC_EDIT2,"default"); else SetDlgItemInt(IDC_EDIT2,n); // -! NEW_FEATURE#0027 + if(penv->wPitchToTempoLock > 0) //Current instrument uses pitchTempoLock. + CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_CHECKED); + else + CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); + + OnBnClickedCheckPitchtempolock(); } else { m_EditName.SetWindowText(""); @@ -1301,6 +1323,7 @@ BOOL CCtrlInstruments::GetToolTipText(UINT uId, LPSTR pszText) //------------------------------------------------------------ { + //NOTE: pszText seems to point to char array of length 256. if ((pszText) && (uId)) { switch(uId) @@ -1313,6 +1336,23 @@ return TRUE; } break; + case IDC_EDIT_PITCHTEMPOLOCK: + case IDC_CHECK_PITCHTEMPOLOCK: + if ((m_pSndFile) && (m_pSndFile->Headers[m_nInstrument])) + { + const string str = string("Tempo range: ") + Stringify(m_pSndFile->GetTempoMin()) + string(" - ") + Stringify(m_pSndFile->GetTempoMax()); + ASSERT(str.size() < 256); + wsprintf(pszText, str.c_str()); + return TRUE; + } + break; + case IDC_EDIT7: //Fade out + if ((m_pSndFile) && (m_pSndFile->Headers[m_nInstrument])) + { + wsprintf(pszText, "Higher value <-> Faster fade out"); + return TRUE; + } + break; } } return FALSE; @@ -2322,4 +2362,94 @@ return 0; } -//end rewbs.customKeys \ No newline at end of file +//end rewbs.customKeys +void CCtrlInstruments::OnEnChangeEditPitchtempolock() +//---------------------------------------------------- +{ + if(IsLocked() || !m_pModDoc || !m_pSndFile || !m_nInstrument || !m_pSndFile->Headers[m_nInstrument]) return; + + const WORD MINTEMPO = m_pSndFile->GetTempoMin(); + const WORD MAXTEMPO = m_pSndFile->GetTempoMax(); + char buffer[7]; + m_EditPitchTempoLock.GetWindowText(buffer, 6); + int ptlTempo = atoi(buffer); + if(ptlTempo < MINTEMPO) + ptlTempo = MINTEMPO; + if(ptlTempo > MAXTEMPO) + ptlTempo = MAXTEMPO; + + BEGIN_CRITICAL(); + m_pSndFile->Headers[m_nInstrument]->wPitchToTempoLock = ptlTempo; + END_CRITICAL(); + m_pModDoc->SetModified(); +} + +void CCtrlInstruments::OnBnClickedCheckPitchtempolock() +//----------------------------------------------------- +{ + if(!m_pSndFile || !m_nInstrument || !m_pSndFile->Headers[m_nInstrument]) + return; + + if(IsDlgButtonChecked(IDC_CHECK_PITCHTEMPOLOCK)) + { + + INSTRUMENTHEADER* penv = m_pSndFile->Headers[m_nInstrument]; + if(!penv) + return; + + //Checking to what value to put for the wPitchToTempoLock. + m_EditPitchTempoLock.EnableWindow(); + WORD ptl = penv->wPitchToTempoLock; + if(ptl == 0) + { + if(m_EditPitchTempoLock.GetWindowTextLength() > 0) + { + char buffer[7]; + m_EditPitchTempoLock.GetWindowText(buffer, 6); + ptl = atoi(buffer); + } + else + ptl = m_pSndFile->m_nDefaultTempo; + } + m_EditPitchTempoLock.SetWindowText(Stringify(ptl).c_str()); + //SetModified() comes with this. + } + else + { + m_EditPitchTempoLock.EnableWindow(FALSE); + if(m_pSndFile && m_nInstrument && m_pSndFile->Headers[m_nInstrument] && + m_pSndFile->Headers[m_nInstrument]->wPitchToTempoLock > 0) + { + BEGIN_CRITICAL(); + m_pSndFile->Headers[m_nInstrument]->wPitchToTempoLock = 0; + END_CRITICAL(); + m_pModDoc->SetModified(); + } + } +} + +void CCtrlInstruments::OnEnKillfocusEditPitchtempolock() +//------------------------------------------------------ +{ + if(!m_pSndFile || IsLocked()) return; + + char buffer[6]; + m_EditPitchTempoLock.GetWindowText(buffer, 5); + int ptlTempo = atoi(buffer); + bool changed = false; + + + if(ptlTempo < m_pSndFile->GetTempoMin()) + { + ptlTempo = m_pSndFile->GetTempoMin(); + changed = true; + } + if(ptlTempo > m_pSndFile->GetTempoMax()) + { + ptlTempo = m_pSndFile->GetTempoMax(); + changed = true; + + } + + if(changed) m_EditPitchTempoLock.SetWindowText(Stringify(ptlTempo).c_str()); +} Modified: trunk/OpenMPT/mptrack/Ctrl_ins.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.h 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_ins.h 2006-08-20 20:29:31 UTC (rev 165) @@ -78,6 +78,10 @@ CSpinButtonCtrl m_SpinAttack; // -! NEW_FEATURE#0027 + //Pitch/Tempo lock + CEdit m_EditPitchTempoLock; + CButton m_CheckPitchTempoLock; + public: CCtrlInstruments(); virtual ~CCtrlInstruments(); @@ -144,6 +148,9 @@ afx_msg void OnEditSampleMap(); afx_msg void TogglePluginEditor(); //rewbs.instroVSTi afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM); //rewbs.customKeys + afx_msg void OnEnChangeEditPitchtempolock(); + afx_msg void OnBnClickedCheckPitchtempolock(); + afx_msg void OnEnKillfocusEditPitchtempolock(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -64,6 +64,7 @@ ON_COMMAND(IDC_PATINSTROPLUGGUI2, ToggleSplitPluginEditor) //rewbs.instroVST ON_EN_CHANGE(IDC_EDIT_SPACING, OnSpacingChanged) ON_EN_CHANGE(IDC_EDIT_PATTERNNAME, OnPatternNameChanged) + ON_EN_KILLFOCUS(IDC_EDIT_ORDERLIST_MARGINS, OnOrderListMarginsChanged) ON_UPDATE_COMMAND_UI(IDC_PATTERN_RECORD,OnUpdateRecord) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) //}}AFX_MSG_MAP @@ -85,8 +86,10 @@ DDX_Control(pDX, IDC_COMBO_OCTAVEMODIFIER, m_CbnOctaveModifier); DDX_Control(pDX, IDC_COMBO_SPLITVOLUME, m_CbnSplitVolume); DDX_Control(pDX, IDC_EDIT_SPACING, m_EditSpacing); + DDX_Control(pDX, IDC_EDIT_ORDERLIST_MARGINS,m_EditOrderListMargins); DDX_Control(pDX, IDC_EDIT_PATTERNNAME, m_EditPatName); DDX_Control(pDX, IDC_SPIN_SPACING, m_SpinSpacing); + DDX_Control(pDX, IDC_SPIN_ORDERLIST_MARGINS,m_SpinOrderListMargins); DDX_Control(pDX, IDC_SPIN_INSTRUMENT, m_SpinInstrument); DDX_Control(pDX, IDC_TOOLBAR1, m_ToolBar); //}}AFX_DATA_MAP @@ -157,13 +160,18 @@ // Special edit controls -> tab switch to view m_EditSpacing.SetParent(this); m_EditPatName.SetParent(this); + m_EditPatName.SetLimitText(MAX_PATTERNNAME); + m_EditOrderListMargins.SetParent(this); + m_EditOrderListMargins.SetLimitText(3); // Spin controls m_SpinSpacing.SetRange(0, 16); + m_SpinSpacing.SetPos(CMainFrame::gnPatternSpacing); m_SpinInstrument.SetRange(-1, 1); m_SpinInstrument.SetPos(0); - m_SpinSpacing.SetPos(CMainFrame::gnPatternSpacing); - m_EditPatName.SetLimitText(MAX_PATTERNNAME); + 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 & PATTERN_FOLLOWSONGOFF)); //rewbs.noFollow - set to unchecked m_OrderList.SetFocus(); @@ -240,6 +248,7 @@ { m_OrderList.SetWindowPos(NULL, 0,0, cx, cy, SWP_NOMOVE|SWP_NOZORDER|SWP_DRAWFRAME); } + OnOrderListMarginsChanged(); } } @@ -410,6 +419,7 @@ SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_dwSongFlags)); } OnSpacingChanged(); + OnOrderListMarginsChanged(); //mimicry SendViewMessage(VIEWMSG_SETSPLITINSTRUMENT, m_nSplitInstrument); SendViewMessage(VIEWMSG_SETSPLITNOTE, m_nSplitNote); @@ -580,6 +590,7 @@ if (m_hWndView) { OnSpacingChanged(); + OnOrderListMarginsChanged(); //mimicry... if (m_bRecord) SendViewMessage(VIEWMSG_SETRECORD, m_bRecord); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); @@ -664,6 +675,24 @@ } +void CCtrlPatterns::OnOrderListMarginsChanged() +//--------------------------------------------- +{ + BYTE i; + BYTE maxOrders = m_OrderList.GetShownOrdersMax(); + if((m_EditOrderListMargins.m_hWnd) && (m_EditOrderListMargins.GetWindowTextLength() > 0)) + { + i = m_OrderList.SetOrderlistMargins(GetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS)); + } + else + { + i = m_OrderList.GetOrderlistMargins(); + } + + m_SpinOrderListMargins.SetRange(0, maxOrders); + SetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS, i); + +} void CCtrlPatterns::OnSpacingChanged() //------------------------------------ { Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2006-08-20 20:29:31 UTC (rev 165) @@ -12,6 +12,11 @@ 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; @@ -32,6 +37,9 @@ BOOL UpdateScrollInfo(); void UpdateInfoText(); int GetFontWidth(); + BYTE SetOrderlistMargins(int); //Returns the number that was set. + BYTE GetOrderlistMargins() const {return m_nOrderlistMargins;} + BYTE GetShownOrdersMax(); //Should return the maximum number of shown orders. public: //{{AFX_VIRTUAL(COrderList) @@ -98,8 +106,8 @@ // -> DESC="midi keyboard split" CComboBox m_CbnSplitInstrument,m_CbnSplitNote,m_CbnOctaveModifier,m_CbnSplitVolume; // -! NEW_FEATURE#0012 - CPatEdit m_EditSpacing, m_EditPatName; - CSpinButtonCtrl m_SpinInstrument, m_SpinSpacing; + CPatEdit m_EditSpacing, m_EditPatName, m_EditOrderListMargins; + CSpinButtonCtrl m_SpinInstrument, m_SpinSpacing, m_SpinOrderListMargins; CModControlBar m_ToolBar; UINT m_nInstrument, m_nDetailLevel; BOOL m_bRecord, m_bVUMeters, m_bPluginNames; @@ -171,6 +179,7 @@ afx_msg void OnNextInstrument(); afx_msg void OnSpacingChanged(); afx_msg void OnPatternNameChanged(); + afx_msg void OnOrderListMarginsChanged(); afx_msg void OnSetupZxxMacros(); afx_msg void OnChordEditor(); afx_msg void OnDetailLo(); Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -67,7 +67,8 @@ m_pParent = NULL; m_cxFont = m_cyFont = 0; m_pModDoc = NULL; - m_nScrollPos = m_nXScroll = 0; + m_nScrollPos = m_nXScroll = 0; + m_nOrderlistMargins = 2; m_bScrolling = FALSE; m_bDragging = FALSE; m_bShift = FALSE; @@ -151,6 +152,16 @@ } +BYTE COrderList::GetShownOrdersMax() +//---------------------------------- +{ + CRect rcClient; + GetClientRect(&rcClient); + if(m_cxFont>0) return static_cast<BYTE>(rcClient.right / m_cxFont); + else return static_cast<BYTE>(rcClient.right / GetFontWidth()); +} + + BOOL COrderList::SetCurSel(int sel, BOOL bEdit) //--------------------------------------------- { @@ -164,18 +175,18 @@ m_nScrollPos = sel; if (!m_bScrolling) { - if ((m_nScrollPos < m_nXScroll) || (!m_cxFont) || (!m_cyFont)) + if ((m_nScrollPos < m_nXScroll+m_nOrderlistMargins) || (!m_cxFont) || (!m_cyFont)) { - m_nXScroll = m_nScrollPos; + m_nXScroll = max(0, m_nScrollPos - m_nOrderlistMargins); SetScrollPos(SB_HORZ, m_nXScroll); InvalidateRect(NULL, FALSE); } else { - int maxsel = (rcClient.right / m_cxFont); + int maxsel = GetShownOrdersMax(); if (maxsel) maxsel--; - if (m_nScrollPos - m_nXScroll >= maxsel) + if (m_nScrollPos - m_nXScroll >= maxsel-m_nOrderlistMargins) { - m_nXScroll = m_nScrollPos - maxsel; + m_nXScroll = m_nScrollPos - (maxsel-m_nOrderlistMargins); SetScrollPos(SB_HORZ, m_nXScroll); InvalidateRect(NULL, FALSE); } @@ -243,7 +254,8 @@ if (m_pModDoc) { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - for (int i=0; i<MAX_ORDERS-1; i++) if (pSndFile->Order[i+1] == 0xFF) break; + int i = 0; + for (i=0; i<MAX_ORDERS-1; i++) if (pSndFile->Order[i+1] == 0xFF) break; SetCurSel(i); } break; @@ -434,6 +446,7 @@ GetClientRect(&rcClient); rect = rcClient; int nIndex = m_nXScroll; + //Scrolling the shown orders(the showns rectangles)? while (rect.left < rcClient.right) { BOOL bHighLight = ((bFocus) && (nIndex == m_nScrollPos)) ? TRUE : FALSE; @@ -859,3 +872,24 @@ } return bCanDrop; } + + +BYTE COrderList::SetOrderlistMargins(int i) +//---------------------------------------------- +{ + const BYTE maxOrders = GetShownOrdersMax(); + const BYTE maxMargins = (maxOrders % 2 == 0) ? maxOrders/2 - 1 : maxOrders/2; + //For example: If maximum is 4 orders -> maxMargins = 4/2 - 1 = 1; + //if maximum is 5 -> maxMargins = (int)5/2 = 2 + + if(i >= 0 && i < maxMargins) + { + m_nOrderlistMargins = static_cast<BYTE>(i); + } + else + { + if(i<0) m_nOrderlistMargins = 0; + else m_nOrderlistMargins = maxMargins; + } + return m_nOrderlistMargins; +} Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -194,7 +194,7 @@ } -POINT CViewPattern::GetPointFromPosition(DWORD dwPos) +POINT CViewPattern::GetPointFromPosition(DWORD dwPos) //--------------------------------------------------- { PCPATTERNFONT pfnt = GetCurrentPatternFont(); @@ -231,7 +231,8 @@ int xx = (pt.x - m_szHeader.cx) % GetColumnWidth(), dx = 0; int imax = 4; if (imax > (int)m_nDetailLevel+1) imax = m_nDetailLevel+1; - for (int i=0; i<imax; i++) + int i = 0; + for (i=0; i<imax; i++) { dx += pfnt->nEltWidths[i]; if (xx < dx) break; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -279,6 +279,12 @@ _getdcwd(_getdrive(), wd, 255); m_csExecutablePath = wd; //Assume working dir is executable path at this stage. + //Relabs.note: m_csExecutablePath doesn't give right path + //at least for debug builds. + #ifdef DEBUG + m_csExecutablePath += "\\bin"; + #endif + m_bModTreeHasFocus = false; //rewbs.customKeys m_pNoteMapHasFocus = NULL; //rewbs.customKeys m_bOptionsLocked = false; //rewbs.customKeys @@ -1607,18 +1613,18 @@ UINT uVerLength; if (!(::GetFileVersionInfo((LPTSTR)szFullPath, (DWORD)dwVerHnd, (DWORD)dwVerInfoSize, (LPVOID)pVersionInfo))) { - delete pVersionInfo; + delete[] pVersionInfo; return 0; } if (!(::VerQueryValue(pVersionInfo, TEXT("\\StringFileInfo\\040904b0\\FileVersion"), (LPVOID*)&szVer, &uVerLength))) { - delete pVersionInfo; + delete[] pVersionInfo; return 0; } //version will be like: 1, 17, 2, 38 CString version = szVer; - delete pVersionInfo; + delete[] pVersionInfo; int v1, v2, v3, v4; sscanf(version, "%x, %x, %x, %x", &v1, &v2, &v3, &v4); @@ -1873,7 +1879,9 @@ } if (m_pSndFile) { - m_pSndFile->LoopPattern(-1); + //m_pSndFile->LoopPattern(-1); + //Relabs.note: Commented above line - why loop should be disabled when pausing? + m_pSndFile->m_dwSongFlags &= ~SONG_PAUSED; if (m_pSndFile == &m_WaveFile) { m_pSndFile = NULL; Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -1069,7 +1069,7 @@ fwrite(&zero, 1, 1, f); list.filesize++; } - delete pszComments; + delete[] pszComments; } } for (UINT iCmt=0; iCmt<=6; iCmt++) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -107,7 +107,6 @@ // -> DESC="channels management dlg" ReinitRecordState(); // -! NEW_FEATURE#0015 - } @@ -132,6 +131,7 @@ //--------------------------- { if (!CDocument::OnNewDocument()) return FALSE; + m_SndFile.Create(NULL, this, 0); m_SndFile.m_nType = CTrackApp::GetDefaultDocType(); @@ -349,6 +349,13 @@ // -> DESC="channels management dlg" ReinitRecordState(); // -! NEW_FEATURE#0015 + if (m_SndFile.m_dwLastSavedWithVersion>CMainFrame::GetFullVersionNumeric()) { + char s[256]; + wsprintf(s, "Warning: this song was last saved with a more recent version of OpenMPT.\r\nSong saved with: v%s. Current version: v%s.\r\n", + CMainFrame::GetVersionString(m_SndFile.m_dwLastSavedWithVersion), + CMainFrame::GetFullVersionString()); + ::AfxMessageBox(s); + } SetModifiedFlag(FALSE); // (bModified); m_bHasValidPath=true; @@ -364,7 +371,7 @@ CHAR 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); if (!lstrcmpi(fext, ".mod")) nType = MOD_TYPE_MOD; else @@ -558,7 +565,6 @@ { SetModified(FALSE); m_bHasValidPath=true; - m_SndFile.m_dwLastSavedWithVersion=CMainFrame::GetFullVersionNumeric(); return TRUE; } else { @@ -693,7 +699,7 @@ { strcpy(p, m_lpszLog); strcat(p, lpszLog); - delete m_lpszLog; + delete[] m_lpszLog; m_lpszLog = p; } } else @@ -710,7 +716,7 @@ { if (m_lpszLog) { - delete m_lpszLog; + delete[] m_lpszLog; m_lpszLog = NULL; } return TRUE; @@ -1406,6 +1412,9 @@ if(!wsdlg.m_bChannelMode || !(flags[i] & CHN_MUTE)){ // rewbs.fix3239 m_SndFile.SetCurrentPos(0); + //Relabs.note: Since I removed pattern loop disabling from certain + //methods, making sure that pattern loop is off. + m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; if (wsdlg.m_bSelectPlay) { m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); m_SndFile.m_nCurrentPattern = wsdlg.m_nMinOrder; @@ -1477,6 +1486,9 @@ bplaying = TRUE; pMainFrm->PauseMod(); m_SndFile.SetCurrentPos(0); + + m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + // Saving file PTAGID3INFO pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_id3tag : NULL; CDoAcmConvert dwcdlg(&m_SndFile, s, &wfx.wfx, hadid, pTag, pMainFrm); @@ -1580,9 +1592,9 @@ if (pMainFrm) { CChildFrame *pChildFrm = (CChildFrame *) GetChildFrame(); - if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) == 0) // Relabsoluness.note: Using existing 'dirty HACK' + if (strcmp("CViewPattern", pChildFrm->GetCurrentViewClassName()) == 0) { - //Relabsoluness.note: User has sent play song command: set loop pattern checkbox to false. + //User has sent play song command: set loop pattern checkbox to false. pChildFrm->SendViewMessage(VIEWMSG_PATTERNLOOP, 0); } @@ -1604,7 +1616,9 @@ m_SndFile.ResumePlugins(); } END_CRITICAL(); - m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED); + //m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED); + //Relabs.note: Added SONG_PATTERNLOOP. + m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED|SONG_PATTERNLOOP); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } } @@ -1679,7 +1693,9 @@ pMainFrm->PauseMod(); - m_SndFile.m_dwSongFlags &= ~SONG_STEP; + //m_SndFile.m_dwSongFlags &= ~SONG_STEP; + //Relabs.hack: Added SONG_PATTERNLOOP + m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PATTERNLOOP); m_SndFile.SetCurrentPos(0); pMainFrm->ResetElapsedTime(); BEGIN_CRITICAL(); @@ -2061,7 +2077,8 @@ BOOL bSupported; int fxndx = -1; pszDescription[0] = 0; - for (UINT i=0; i<MAX_FXINFO; i++) + UINT i = 0; + for (i=0; i<MAX_FXINFO; i++) { if ((command == gFXInfo[i].dwEffect) // Effect && ((param & gFXInfo[i].dwParamMask) == gFXInfo[i].dwParamValue)) // Value @@ -2837,6 +2854,8 @@ { pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; } + if ((nOrd < MAX_PATTERNS) && (pSndFile->Order[nOrd] == nPat)) pSndFile->m_nCurrentPattern = pSndFile->m_nNextPattern = nOrd; + //Relabs.note: Some jumps occured when using pattern play and loop pattern checkbox - above line hopefully fixes it. pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = nRow; @@ -3041,7 +3060,8 @@ if (macroType==sfx_plug && MacroToPlugParam(macroText)==paramToUse) { CString message; message.Format("Param %d can already be controlled with macro %X", paramToUse, checkMacro); - ::MessageBox(NULL,message, "Macro exists for this param",MB_ICONINFORMATION | MB_OK); + CMainFrame::GetMainFrame()->MessageBox(message, "Macro exists for this param",MB_ICONINFORMATION | MB_OK); + //Relabs.expl: Modified to prevent notification box go 'under' ompt to block key messages. return; } } Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2006-08-20 20:29:31 UTC (rev 165) @@ -56,7 +56,8 @@ } // Resizing all patterns to 64 rows UINT nPatCvt = 0; - for (UINT i=0; i<MAX_PATTERNS; i++) if ((m_SndFile.Patterns[i]) && (m_SndFile.PatternSize[i] != 64)) + UINT i = 0; + for (i=0; i<MAX_PATTERNS; i++) if ((m_SndFile.Patterns[i]) && (m_SndFile.PatternSize[i] != 64)) { if (m_SndFile.PatternSize[i] < 64) { @@ -424,7 +425,8 @@ { UINT nRemainingChannels = 0; //First calculating how many channels are to be left - for(UINT i = 0; i<m_SndFile.m_nChannels; i++) + UINT i = 0; + for(i = 0; i<m_SndFile.m_nChannels; i++) { if(!m_bChnMask[i]) nRemainingChannels++; } @@ -439,7 +441,7 @@ BeginWaitCursor(); BEGIN_CRITICAL(); - for (UINT i=0; i<MAX_PATTERNS; i++) if (m_SndFile.Patterns[i]) + for (i=0; i<MAX_PATTERNS; i++) if (m_SndFile.Patterns[i]) { MODCOMMAND *p = m_SndFile.Patterns[i]; MODCOMMAND *newp = CSoundFile::AllocatePattern(m_SndFile.PatternSize[i], nRemainingChannels); @@ -623,7 +625,8 @@ memset(pPatterns, 0, sizeof(pPatterns)); for (UINT irst=0; irst<MAX_PATTERNS; irst++) nPatMap[irst] = 0xFFFF; nPats = 0; - for (UINT imap=0; imap<MAX_ORDERS; imap++) + UINT imap = 0; + for (imap=0; imap<MAX_ORDERS; imap++) { UINT n = m_SndFile.Order[imap]; if (n < MAX_PATTERNS) @@ -1131,7 +1134,8 @@ //------------------------------------------------ { UINT maxpat = (m_SndFile.m_nType & MOD_TYPE_MOD) ? 128 : MAX_PATTERNS; - for (UINT i=0; i<maxpat; i++) + UINT i = 0; + for (i=0; i<maxpat; i++) { if (!m_SndFile.Patterns[i]) break; } @@ -1172,7 +1176,8 @@ LONG CModDoc::InsertSample(BOOL bLimit) //------------------------------------- { - for (UINT i=1; i<=m_SndFile.m_nSamples; i++) + UINT i = 1; + for (i=1; i<=m_SndFile.m_nSamples; i++) { if ((!m_SndFile.m_szNames[i][0]) && (m_SndFile.Ins[i].pSample == NULL)) { @@ -2071,7 +2076,7 @@ { for (UINT i=0; i<MAX_UNDO_LEVEL; i++) { - if (PatternUndo[i].pbuffer) delete PatternUndo[i].pbuffer; + if (PatternUndo[i].pbuffer) delete[] PatternUndo[i].pbuffer; PatternUndo[i].cx = 0; PatternUndo[i].cy = 0; PatternUndo[i].pbuffer = NULL; @@ -2110,7 +2115,7 @@ bUpdate = (PatternUndo[0].pbuffer) ? FALSE : TRUE; if (PatternUndo[MAX_UNDO_LEVEL-1].pbuffer) { - delete PatternUndo[MAX_UNDO_LEVEL-1].pbuffer; + delete[] PatternUndo[MAX_UNDO_LEVEL-1].pbuffer; PatternUndo[MAX_UNDO_LEVEL-1].pbuffer = NULL; } for (UINT i=MAX_UNDO_LEVEL-1; i>=1; i--) @@ -2172,7 +2177,7 @@ pUndo += PatternUndo[0].cx; } } - delete PatternUndo[0].pbuffer; + delete[] PatternUndo[0].pbuffer; for (UINT i=0; i<MAX_UNDO_LEVEL-1; i++) { PatternUndo[i] = PatternUndo[i+1]; Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2006-08-16 23:47:38 UTC (rev 164) +++ trunk/OpenMP... [truncated message content] |