From: <sag...@us...> - 2015-06-26 18:36:46
|
Revision: 5358 http://sourceforge.net/p/modplug/code/5358 Author: saga-games Date: 2015-06-26 18:36:40 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [Fix] Pattern tab: r5325 only partially solved the prev/next pattern problem (or rather introduced new cases where it would fail) Revision Links: -------------- http://sourceforge.net/p/modplug/code/5325 Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 18:36:40 UTC (rev 5358) @@ -578,12 +578,6 @@ } ypaint += m_szHeader.cy; - ORDERINDEX curOrder; - if(IsLiveRecord() && m_nPlayOrd < sndFile.Order.size()) - curOrder = m_nPlayOrd; - else - curOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); - if (m_nMidRow) { if (yofs >= m_nMidRow) @@ -597,12 +591,12 @@ // Display previous pattern if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SHOWPREVIOUS) { - if(curOrder > 0) + if(m_nOrder > 0) { - ORDERINDEX prevOrder = sndFile.Order.GetPreviousOrderIgnoringSkips(curOrder); + ORDERINDEX prevOrder = sndFile.Order.GetPreviousOrderIgnoringSkips(m_nOrder); //Skip +++ items - if(curOrder < sndFile.Order.size() && sndFile.Order[curOrder] == m_nPattern) + if(m_nOrder < sndFile.Order.size() && sndFile.Order[m_nOrder] == m_nPattern) { nPrevPat = sndFile.Order[prevOrder]; } @@ -645,12 +639,12 @@ if ((nVisRows > 0) && (m_nMidRow)) { PATTERNINDEX nNextPat = PATTERNINDEX_INVALID; - ORDERINDEX nNextOrder = sndFile.Order.GetNextOrderIgnoringSkips(curOrder); - if(nNextOrder == curOrder) nNextOrder = ORDERINDEX_INVALID; + ORDERINDEX nNextOrder = sndFile.Order.GetNextOrderIgnoringSkips(m_nOrder); + if(nNextOrder == m_nOrder) nNextOrder = ORDERINDEX_INVALID; //Ignore skip items(+++) from sequence. const ORDERINDEX ordCount = sndFile.Order.GetLength(); - if(nNextOrder < ordCount && sndFile.Order[curOrder] == m_nPattern) + if(nNextOrder < ordCount && sndFile.Order[m_nOrder] == m_nPattern) { nNextPat = sndFile.Order[nNextOrder]; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 18:36:40 UTC (rev 5358) @@ -157,6 +157,7 @@ m_nTransposeAmount = 1; m_nPattern = 0; + m_nOrder = 0; m_nDetailLevel = PatternCursor::lastColumn; m_pEditWnd = NULL; m_pGotoWnd = NULL; @@ -177,13 +178,10 @@ CModScrollView::OnInitialUpdate(); MemsetZero(ChnVUMeters); MemsetZero(OldVUMeters); -// -> CODE#0012 -// -> DESC="midi keyboard split" memset(previousNote, NOTE_NONE, sizeof(previousNote)); memset(splitActiveNoteChannel, 0xFF, sizeof(splitActiveNoteChannel)); memset(activeNoteChannel, 0xFF, sizeof(activeNoteChannel)); m_nPlayPat = PATTERNINDEX_INVALID; - m_nPlayOrd = ORDERINDEX_INVALID; m_nPlayRow = 0; m_nPlayTick = 0; m_nMidRow = 0; @@ -288,13 +286,13 @@ if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CONTSCROLL) { ORDERINDEX curOrder = GetCurrentOrder(); - if ((curOrder > 0) && (curOrder < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[curOrder])) + const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(curOrder); + if (prevOrd < curOrder && m_nPattern == pSndFile->Order[curOrder]) { - const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(curOrder); const PATTERNINDEX nPrevPat = pSndFile->Order[prevOrd]; if ((nPrevPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nPrevPat].GetNumRows())) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, prevOrd); + SetCurrentOrder(prevOrd); if (SetCurrentPattern(nPrevPat)) return SetCurrentRow(pSndFile->Patterns[nPrevPat].GetNumRows() + (int)row); } @@ -315,14 +313,14 @@ } else if(TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CONTSCROLL) { ORDERINDEX curOrder = GetCurrentOrder(); - if(curOrder + 1 < pSndFile->Order.size() && m_nPattern == pSndFile->Order[curOrder]) + ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(curOrder); + if(nextOrder > curOrder && m_nPattern == pSndFile->Order[curOrder]) { - const ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(curOrder); - const PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; + PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; if ((nextPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nextPat].GetNumRows())) { const ROWINDEX newRow = row - pSndFile->Patterns[m_nPattern].GetNumRows(); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nextOrder); + SetCurrentOrder(nextOrder); if (SetCurrentPattern(nextPat)) return SetCurrentRow(newRow); } @@ -614,30 +612,20 @@ } -bool CViewPattern::SetPlayCursor(ORDERINDEX ord, PATTERNINDEX pat, ROWINDEX row) -//------------------------------------------------------------------------------ +bool CViewPattern::SetPlayCursor(PATTERNINDEX pat, ROWINDEX row) +//-------------------------------------------------------------- { - ORDERINDEX oldOrd = m_nPlayOrd; PATTERNINDEX oldPat = m_nPlayPat; ROWINDEX oldRow = m_nPlayRow; - if (ord == m_nPlayOrd && pat == m_nPlayPat && row == m_nPlayRow) - return true; - - m_nPlayOrd = ord; m_nPlayPat = pat; m_nPlayRow = row; - if (oldOrd != m_nPlayOrd) - { - InvalidatePattern(true); - } else - { - if (oldPat == m_nPattern) - InvalidateRow(oldRow); - if (m_nPlayPat == m_nPattern) - InvalidateRow(m_nPlayRow); - } + if (oldPat == m_nPattern) + InvalidateRow(oldRow); + if (m_nPlayPat == m_nPattern) + InvalidateRow(m_nPlayRow); + return true; } @@ -2021,7 +2009,7 @@ SetCurrentPattern(m_pGotoWnd->m_nPattern); if (m_pGotoWnd->m_nOrder != curOrder) - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, m_pGotoWnd->m_nOrder); + SetCurrentOrder( m_pGotoWnd->m_nOrder); if (m_pGotoWnd->m_nChannel != curChannel) SetCurrentColumn(m_pGotoWnd->m_nChannel - 1); @@ -2211,7 +2199,7 @@ ORDERINDEX matchingOrder = pSndFile->Order.FindOrder(pat, GetCurrentOrder()); if(matchingOrder != ORDERINDEX_INVALID) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, matchingOrder); + SetCurrentOrder(matchingOrder); } // go to place of finding SetCurrentPattern(pat); @@ -3481,7 +3469,7 @@ ORDERINDEX matchingOrder = GetSoundFile()->Order.FindOrder(pat, GetCurrentOrder()); if(matchingOrder != ORDERINDEX_INVALID) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, matchingOrder); + SetCurrentOrder(matchingOrder); } SetCurrentPattern(pat); } else @@ -3768,7 +3756,7 @@ if (nPat != m_nPattern || updateOrderList) { if(nPat != m_nPattern) SetCurrentPattern(nPat, nRow); - if (nOrd < pSndFile->Order.size()) SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nOrd); + if (nOrd < pSndFile->Order.size()) SetCurrentOrder(nOrd); updateOrderList = false; } if (nRow != GetCurrentRow()) @@ -3784,7 +3772,7 @@ updateOrderList = false; } } - SetPlayCursor(nOrd, nPat, nRow); + SetPlayCursor(nPat, nRow); m_nPlayTick = pnotify->tick; } } @@ -3799,7 +3787,7 @@ MemsetZero(ChnVUMeters); // Also zero all non-visible VU meters if((m_Status & (psFollowSong | psDragActive)) == psFollowSong) { - SetPlayCursor(ORDERINDEX_INVALID, PATTERNINDEX_INVALID, ROWINDEX_INVALID); + SetPlayCursor(PATTERNINDEX_INVALID, ROWINDEX_INVALID); } } @@ -4136,7 +4124,7 @@ if(plug) { plug->MidiSend(dwMidiData); - // Sending midi may modify the plug. For now, if MIDI data + // Sending MIDI may modify the plugin. For now, if MIDI data // is not active sensing, set modified. if(dwMidiData != MIDIEvents::System(MIDIEvents::sysActiveSense)) pMainFrm->ThreadSafeSetModified(pModDoc); @@ -4165,6 +4153,7 @@ return m_nPattern; case VIEWMSG_SETCURRENTPATTERN: + m_nOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); SetCurrentPattern(lParam); break; @@ -4494,7 +4483,7 @@ SetCurrentPattern((n < pSndFile->Patterns.Size()) ? n : 0); ORDERINDEX currentOrder = GetCurrentOrder(); ORDERINDEX newOrder = pSndFile->Order.FindOrder(m_nPattern, currentOrder, true); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, newOrder); + SetCurrentOrder(newOrder); return wParam; } case kcPrevPattern: { PATTERNINDEX n = (m_nPattern) ? m_nPattern - 1 : pSndFile->Patterns.Size() - 1; @@ -4502,7 +4491,7 @@ SetCurrentPattern(n); ORDERINDEX currentOrder = GetCurrentOrder(); ORDERINDEX newOrder = pSndFile->Order.FindOrder(m_nPattern, currentOrder, false); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, newOrder); + SetCurrentOrder(newOrder); return wParam; } case kcSelectWithCopySelect: @@ -7100,7 +7089,7 @@ // Multipaste: Switch to pasted pattern. SetCurrentPattern(pos.pattern); curOrder = GetSoundFile()->Order.FindOrder(pos.pattern, curOrder); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, curOrder); + SetCurrentOrder(curOrder); } if(result) Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 18:36:40 UTC (rev 5358) @@ -165,7 +165,7 @@ ROWINDEX m_nPlayRow; uint32 m_nPlayTick; PATTERNINDEX m_nPattern, m_nPlayPat; - ORDERINDEX m_nPlayOrd; + ORDERINDEX m_nOrder; int32 m_nTransposeAmount; int m_nXScroll, m_nYScroll; @@ -234,7 +234,8 @@ PATTERNINDEX GetCurrentPattern() const { return m_nPattern; } ROWINDEX GetCurrentRow() const { return m_Cursor.GetRow(); } CHANNELINDEX GetCurrentChannel() const { return m_Cursor.GetChannel(); } - ORDERINDEX GetCurrentOrder() const { return static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); } + ORDERINDEX GetCurrentOrder() const { return m_nOrder; } + void SetCurrentOrder(ORDERINDEX ord) { m_nOrder = ord; SendCtrlMessage(CTRLMSG_SETCURRENTORDER, ord); } // Get ModCommand at the pattern cursor position. ModCommand &GetCursorCommand() { return GetModCommand(m_Cursor); }; void SanitizeCursor(); @@ -270,7 +271,7 @@ // This should be used instead of consecutive calls to SetCurrentRow() then SetCurrentColumn() bool SetCursorPosition(const PatternCursor &cursor, bool wrap = false); bool DragToSel(const PatternCursor &cursor, bool scrollHorizontal, bool scrollVertical, bool noMove = false); - bool SetPlayCursor(ORDERINDEX ord, PATTERNINDEX pat, ROWINDEX row); + bool SetPlayCursor(PATTERNINDEX pat, ROWINDEX row); bool UpdateScrollbarPositions(bool updateHorizontalScrollbar = true); BYTE EnterNote(UINT nNote, UINT nIns=0, BOOL bCheck=FALSE, int vol=-1, BOOL bMultiCh=FALSE); bool ShowEditWindow(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-26 18:36:40 UTC (rev 5358) @@ -826,7 +826,7 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,108,240,12 CONTROL "Record MIDI Note Velocity, amplify by",IDC_CHECK1, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,150,144,10 - EDITTEXT IDC_EDIT3,162,150,42,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT3,162,149,42,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,186,145,11,14 LTEXT "%",IDC_STATIC,207,151,48,8 CONTROL "Combine MIDI Volume (CC#07) to Note Velocity",IDC_MIDIVOL_TO_NOTEVOL, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |