From: <sag...@us...> - 2011-03-19 16:37:17
|
Revision: 821 http://modplug.svn.sourceforge.net/modplug/?rev=821&view=rev Author: saga-games Date: 2011-03-19 16:37:10 +0000 (Sat, 19 Mar 2011) Log Message: ----------- [Imp] Pattern Editor: Select beat / measure behaves more intelligent now (selection extension to all channels) Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2011-03-19 14:03:32 UTC (rev 820) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2011-03-19 16:37:10 UTC (rev 821) @@ -3697,24 +3697,7 @@ case kcSelectBeat: case kcSelectMeasure: - // Select whole beat / measure - { - const ROWINDEX adjust = (wParam == kcSelectBeat) ? GetRowsPerBeat() : GetRowsPerMeasure(); - const ROWINDEX startRow = GetSelectionStartRow() - (GetSelectionStartRow() % adjust); // Snap to start of beat / measure of upper-left corner of current selection - const ROWINDEX endRow = GetSelectionEndRow() + adjust - (GetSelectionEndRow() % adjust) - 1; // Snap to end of beat / measure of lower-right corner of current selection - DWORD startMask = (GetSelectionStartChan() << 3), endMask = (GetSelectionEndChan() << 3); - if(m_dwBeginSel == m_dwEndSel) - { - endMask |= LAST_COLUMN; // Extend to param column; - } else - { - // Remember start / end column - startMask |= (m_dwBeginSel & 0x07); - endMask |= (m_dwEndSel & 0x07); - } - SetCurSel((startRow << 16) | startMask, (endRow << 16) | endMask); - } - return wParam; + SelectBeatOrMeasure(wParam == kcSelectBeat); return wParam; case kcClearRow: OnClearField(-1, false); return wParam; case kcClearField: OnClearField(m_dwCursor & 0x07, false); return wParam; @@ -5671,3 +5654,44 @@ } EndWaitCursor(); } + + +// Select a whole beat (selectBeat = true) or measure. +void CViewPattern::SelectBeatOrMeasure(bool selectBeat) +//----------------------------------------------------- +{ + const ROWINDEX adjust = selectBeat ? GetRowsPerBeat() : GetRowsPerMeasure(); + + // Snap to start of beat / measure of upper-left corner of current selection + const ROWINDEX startRow = GetSelectionStartRow() - (GetSelectionStartRow() % adjust); + // Snap to end of beat / measure of lower-right corner of current selection + const ROWINDEX endRow = GetSelectionEndRow() + adjust - (GetSelectionEndRow() % adjust) - 1; + + DWORD startMask = (GetSelectionStartChan() << 3), endMask = (GetSelectionEndChan() << 3); + + if(m_dwBeginSel == m_dwEndSel) + { + // No selection has been made yet => expand selection to whole channel. + endMask |= LAST_COLUMN; // Extend to param column; + } else if(startRow == GetSelectionStartRow() && endRow == GetSelectionEndRow()) + { + // Whole beat or measure is already selected + if((m_dwBeginSel & 0x07) == 0 && (m_dwEndSel & 0x07) == LAST_COLUMN) + { + // Whole channel is already selected => expand selection to whole row. + startMask = 0; + endMask = 0xFFFF; + } else + { + // Channel is only partly selected => expand to whole channel first. + endMask |= LAST_COLUMN; // Extend to param column; + } + } + else + { + // Some arbitrary selection: Remember start / end column + startMask |= (m_dwBeginSel & 0x07); + endMask |= (m_dwEndSel & 0x07); + } + SetCurSel((startRow << 16) | startMask, (endRow << 16) | endMask); +} Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2011-03-19 14:03:32 UTC (rev 820) +++ trunk/OpenMPT/mptrack/View_pat.h 2011-03-19 16:37:10 UTC (rev 821) @@ -186,6 +186,7 @@ // -! NEW_FEATURE#0014// -> CODE#0012 BOOL ShowEditWindow(); UINT GetCurrentInstrument() const; + void SelectBeatOrMeasure(bool selectBeat); BOOL TransposeSelection(int transp); BOOL PrepareUndo(DWORD dwBegin, DWORD dwEnd); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |