From: <sag...@us...> - 2015-03-10 15:49:53
|
Revision: 4850 http://sourceforge.net/p/modplug/code/4850 Author: saga-games Date: 2015-03-10 15:49:47 +0000 (Tue, 10 Mar 2015) Log Message: ----------- [New] Pattern tab: Added option to transpose a whole channel. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-03-10 15:20:21 UTC (rev 4849) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-03-10 15:49:47 UTC (rev 4850) @@ -122,6 +122,7 @@ ON_COMMAND(ID_PATTERN_SETINSTRUMENT, OnSetSelInstrument) ON_COMMAND(ID_PATTERN_ADDCHANNEL_FRONT, OnAddChannelFront) ON_COMMAND(ID_PATTERN_ADDCHANNEL_AFTER, OnAddChannelAfter) + ON_COMMAND(ID_PATTERN_TRANSPOSECHANNEL, OnTransposeChannel) ON_COMMAND(ID_PATTERN_DUPLICATECHANNEL, OnDuplicateChannel) ON_COMMAND(ID_PATTERN_REMOVECHANNEL, OnRemoveChannel) ON_COMMAND(ID_PATTERN_REMOVECHANNELDIALOG, OnRemoveChannelDialog) @@ -153,6 +154,7 @@ m_pEffectVis = nullptr; //rewbs.fxvis m_bLastNoteEntryBlocked = false; + m_nTransposeAmount = 1; m_nPattern = 0; m_nDetailLevel = PatternCursor::lastColumn; m_pEditWnd = NULL; @@ -2888,14 +2890,60 @@ } +void CViewPattern::OnTransposeChannel() +//------------------------------------- +{ + CInputDlg dlg(this, "Enter transpose amount:", -(NOTE_MAX - NOTE_MIN), (NOTE_MAX - NOTE_MIN), m_nTransposeAmount); + if(dlg.DoModal() == IDOK) + { + m_nTransposeAmount = dlg.resultNumber; + + CSoundFile &sndFile = *GetSoundFile(); + bool changed = false; + // Don't allow notes outside our supported note range. + const ModCommand::NOTE noteMin = sndFile.GetModSpecifications().noteMin; + const ModCommand::NOTE noteMax = sndFile.GetModSpecifications().noteMax; + + for(PATTERNINDEX pat = 0; pat < sndFile.Patterns.Size(); pat++) + { + bool changedThisPat = false; + if(sndFile.Patterns.IsValidPat(pat)) + { + ModCommand *m = sndFile.Patterns[pat].GetpModCommand(0, m_MenuCursor.GetChannel()); + const ROWINDEX numRows = sndFile.Patterns[pat].GetNumRows(); + for(ROWINDEX row = 0; row < numRows; row++) + { + if(m->IsNote()) + { + if(!changedThisPat) + { + GetDocument()->GetPatternUndo().PrepareUndo(pat, m_MenuCursor.GetChannel(), 0, 1, numRows, "Transpose Channel", changed); + changed = changedThisPat = true; + } + int note = m->note + m_nTransposeAmount; + Limit(note, noteMin, noteMax); + m->note = static_cast<ModCommand::NOTE>(note); + } + m += sndFile.Patterns[pat].GetNumChannels(); + } + } + } + if(changed) + { + SetModified(true); + InvalidatePattern(false); + } + } +} + + void CViewPattern::OnTransposeCustom() //------------------------------------ { - static int32 tranpose = 1; - CInputDlg dlg(this, "Enter transpose amount:", -(NOTE_MAX - NOTE_MIN), (NOTE_MAX - NOTE_MIN), tranpose); + CInputDlg dlg(this, "Enter transpose amount:", -(NOTE_MAX - NOTE_MIN), (NOTE_MAX - NOTE_MIN), m_nTransposeAmount); if(dlg.DoModal() == IDOK) { - tranpose = dlg.resultNumber; + m_nTransposeAmount = dlg.resultNumber; TransposeSelection(dlg.resultNumber); } } @@ -2930,7 +2978,7 @@ { int note = m[chn].note + transp; Limit(note, noteMin, noteMax); - m[chn].note = (ModCommand::NOTE)note; + m[chn].note = static_cast<ModCommand::NOTE>(note); } } } @@ -3310,6 +3358,7 @@ EndWaitCursor(); } + void CViewPattern::OnRunScript() //------------------------------ { @@ -6306,7 +6355,8 @@ { AppendMenu(hMenu, MF_SEPARATOR, 0, ""); - AppendMenu(hMenu, MF_STRING, ID_PATTERN_DUPLICATECHANNEL, "&Duplicate this channel"); + AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSPOSECHANNEL, "&Transpose channel"); + AppendMenu(hMenu, MF_STRING, ID_PATTERN_DUPLICATECHANNEL, "&Duplicate channel"); HMENU addChannelMenu = ::CreatePopupMenu(); AppendMenu(hMenu, MF_POPUP, reinterpret_cast<UINT_PTR>(addChannelMenu), "&Add channel\t"); Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-03-10 15:20:21 UTC (rev 4849) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-03-10 15:49:47 UTC (rev 4850) @@ -165,6 +165,7 @@ ROWINDEX m_nPlayRow; UINT m_nPlayTick; PATTERNINDEX m_nPattern, m_nPlayPat; + int32 m_nTransposeAmount; int m_nXScroll, m_nYScroll; PatternCursor::Columns m_nDetailLevel; // Visible Columns @@ -183,8 +184,8 @@ UINT m_nFoundInstrument; DWORD m_dwLastNoteEntryTime; //rewbs.customkeys - bool m_bLastNoteEntryBlocked; - bool m_bContinueSearch, m_bWholePatternFitsOnScreen; + bool m_bLastNoteEntryBlocked : 1; + bool m_bContinueSearch : 1, m_bWholePatternFitsOnScreen : 1; ModCommand m_PCNoteEditMemory; // PC Note edit memory static ModCommand m_cmdOld; // Quick cursor copy/paste data @@ -419,6 +420,7 @@ afx_msg void OnAddChannelFront() { AddChannelBefore(m_MenuCursor.GetChannel()); } afx_msg void OnAddChannelAfter() { AddChannelBefore(m_MenuCursor.GetChannel() + 1); }; afx_msg void OnDuplicateChannel(); + afx_msg void OnTransposeChannel(); afx_msg void OnRemoveChannel(); afx_msg void OnRemoveChannelDialog(); afx_msg void OnPatternProperties(); Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2015-03-10 15:20:21 UTC (rev 4849) +++ trunk/OpenMPT/mptrack/resource.h 2015-03-10 15:49:47 UTC (rev 4850) @@ -1166,8 +1166,10 @@ #define ID_SHRINK_SELECTION 43002 #define ID_RUN_SCRIPT 43003 #define ID_EXAMPLE_MODULES 43004 +// From here: Command range [ID_EXAMPLE_MODULES, ID_EXAMPLE_MODULES_LASTINRANGE] #define ID_EXAMPLE_MODULES_LASTINRANGE 43053 #define ID_FILE_OPENTEMPLATE 43054 +// From here: Command range [ID_FILE_OPENTEMPLATE, ID_FILE_OPENTEMPLATE_LASTINRANGE] #define ID_FILE_OPENTEMPLATE_LASTINRANGE 43103 #define ID_INDICATOR_TIME 43143 #define ID_INDICATOR_USER 43144 @@ -1183,6 +1185,7 @@ #define ID_ENVELOPE_TOGGLERELEASENODE 43154 #define ID_ENVELOPE_SCALEPOINTS 43155 #define ID_VIEW_MIDIMAPPING 43156 +#define ID_PATTERN_TRANSPOSECHANNEL 43215 #define ID_PATTERN_DUPLICATECHANNEL 43216 #define ID_EDIT_GOTO_MENU 43217 #define ID_CLEANUP_COMPO 43218 @@ -1245,6 +1248,7 @@ #define ID_SETQUANTIZE 44609 #define ID_PLUG_RECORD_MIDIOUT 44610 #define ID_MRU_LIST_FIRST 44611 +// From here: Command range [ID_MRU_LIST_FIRST, ID_MRU_LIST_LAST] #define ID_MRU_LIST_LAST 44642 #define ID_FILE_APPENDMODULE 44643 #define ID_SAMPLE_16BITCONVERT 44644 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |