From: <sag...@us...> - 2010-12-04 20:07:21
|
Revision: 770 http://modplug.svn.sourceforge.net/modplug/?rev=770&view=rev Author: saga-games Date: 2010-12-04 20:07:14 +0000 (Sat, 04 Dec 2010) Log Message: ----------- [Mod] Undo steps have been increased from 100 to 1000. [Fix] Pattern Editor: Find/Replace in selection didn't work when not using "Replace All" (i.e. Finding didn't work at all) [Mod] Pattern Editor: "Replace All" just creates one undo point now. Modified Paths: -------------- trunk/OpenMPT/mptrack/Undo.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Undo.h =================================================================== --- trunk/OpenMPT/mptrack/Undo.h 2010-12-03 22:12:57 UTC (rev 769) +++ trunk/OpenMPT/mptrack/Undo.h 2010-12-04 20:07:14 UTC (rev 770) @@ -9,7 +9,7 @@ #pragma once -#define MAX_UNDO_LEVEL 100 // 100 undo steps for each undo type! +#define MAX_UNDO_LEVEL 1000 // 1000 undo steps for each undo type! ///////////////////////////////////////////////////////////////////////////////////////// // Pattern Undo Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2010-12-03 22:12:57 UTC (rev 769) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2010-12-04 20:07:14 UTC (rev 770) @@ -30,6 +30,7 @@ PATSEARCH_FULLSEARCH, PATSEARCH_REPLACEALL, 0, 0, 0, + 0, 0, }; MODCOMMAND CViewPattern::m_cmdOld = {0,0,0,0,0,0}; @@ -1734,6 +1735,8 @@ m_findReplace.cmdReplace.param = pageReplace.m_nParam; m_findReplace.dwReplaceFlags = pageReplace.m_dwFlags; m_findReplace.cInstrRelChange = pageReplace.cInstrRelChange; + m_findReplace.dwBeginSel = m_dwBeginSel; + m_findReplace.dwEndSel = m_dwEndSel; m_bContinueSearch = false; OnEditFindNext(); } @@ -1847,8 +1850,9 @@ // limit to pattern selection const CHANNELINDEX ch = n % pSndFile->m_nChannels; const ROWINDEX row = n / pSndFile->m_nChannels; - if ((ch < GetSelectionStartChan()) || (ch > GetSelectionEndChan())) bFound = false; - if ((row < GetSelectionStartRow()) || (row > GetSelectionEndRow())) bFound = false; + + if ((ch < GetChanFromCursor(m_findReplace.dwBeginSel)) || (ch > GetChanFromCursor(m_findReplace.dwEndSel))) bFound = false; + if ((row < GetRowFromCursor(m_findReplace.dwBeginSel)) || (row > GetRowFromCursor(m_findReplace.dwEndSel))) bFound = false; } if (((m_findReplace.dwFindFlags & PATSEARCH_NOTE) && ((m->note != m_findReplace.cmdFind.note) && ((m_findReplace.cmdFind.note != CFindReplaceTab::findAny) || (!m->note) || (m->note & 0x80)))) || ((m_findReplace.dwFindFlags & PATSEARCH_INSTR) && (m->instr != m_findReplace.cmdFind.instr)) @@ -1880,6 +1884,7 @@ bool bUpdPos = true; if ((m_findReplace.dwReplaceFlags & (PATSEARCH_REPLACEALL|PATSEARCH_REPLACE)) == (PATSEARCH_REPLACEALL|PATSEARCH_REPLACE)) bUpdPos = false; nFound++; + if (bUpdPos) { // turn off "follow song" @@ -1889,6 +1894,7 @@ SetCurrentPattern(nPat); SetCurrentRow(n / pSndFile->m_nChannels); } + UINT ncurs = (n % pSndFile->m_nChannels) << 3; if (!(m_findReplace.dwFindFlags & PATSEARCH_NOTE)) { @@ -1916,7 +1922,9 @@ } if (bReplace) { - pModDoc->GetPatternUndo()->PrepareUndo(nPat, n % pSndFile->m_nChannels, n / pSndFile->m_nChannels, 1, 1); + // Just create one logic undo step when auto-replacing all occurences. + const bool linkUndoBuffer = (nFound > 1) && (m_findReplace.dwReplaceFlags & PATSEARCH_REPLACEALL) != 0; + pModDoc->GetPatternUndo()->PrepareUndo(nPat, n % pSndFile->m_nChannels, n / pSndFile->m_nChannels, 1, 1, linkUndoBuffer); if ((m_findReplace.dwReplaceFlags & PATSEARCH_NOTE)) { @@ -1986,7 +1994,16 @@ } } EndSearch: - if (m_findReplace.dwReplaceFlags & PATSEARCH_REPLACEALL) InvalidatePattern(); + if( m_findReplace.dwFindFlags & PATSEARCH_PATSELECTION) + { + // Restore original selection + m_dwBeginSel = m_findReplace.dwBeginSel; + m_dwEndSel = m_findReplace.dwEndSel; + InvalidatePattern(); + } else if (m_findReplace.dwReplaceFlags & PATSEARCH_REPLACEALL) + { + InvalidatePattern(); + } m_bContinueSearch = true; EndWaitCursor(); // Display search results Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2010-12-03 22:12:57 UTC (rev 769) +++ trunk/OpenMPT/mptrack/View_pat.h 2010-12-04 20:07:14 UTC (rev 770) @@ -66,10 +66,11 @@ // Find/Replace data struct FindReplaceStruct { - MODCOMMAND cmdFind, cmdReplace; - DWORD dwFindFlags, dwReplaceFlags; - CHANNELINDEX nFindMinChn, nFindMaxChn; - signed char cInstrRelChange; // relative instrument change (quick'n'dirty fix, this should be implemented in a less cryptic way) + MODCOMMAND cmdFind, cmdReplace; // Find/replace notes/instruments/effects + DWORD dwFindFlags, dwReplaceFlags; // PATSEARCH_XXX flags + CHANNELINDEX nFindMinChn, nFindMaxChn; // Find in these channels (if PATSEARCH_CHANNEL is set) + signed char cInstrRelChange; // relative instrument change (quick'n'dirty fix, this should be implemented in a less cryptic way) + DWORD dwBeginSel, dwEndSel; // Find in this selection (if PATSEARCH_PATSEL is set) }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |