From: <sag...@us...> - 2015-06-14 21:14:32
|
Revision: 5318 http://sourceforge.net/p/modplug/code/5318 Author: saga-games Date: 2015-06-14 21:14:26 +0000 (Sun, 14 Jun 2015) Log Message: ----------- [Mod] Tree view: Stop sample / instrument preview using note cut/off/fade keys instead of automatically fading it out [Imp] When loading tempo swing, make sure that its length is the same as the rows per beat. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/pattern.cpp Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2015-06-14 21:14:26 UTC (rev 5318) @@ -686,6 +686,7 @@ } // Safety margin if we want to add more cues DefineKeyCommand(kcOrderlistEditCopyOrders, 1950, _T("Copy Orders")); + DefineKeyCommand(kcTreeViewStopPreview, 1951, _T("Stop sample preview"), kcHidden); // Add new key commands here. @@ -1296,8 +1297,7 @@ Remove(newKcInsNoteMap, (CommandID)(kcInsNoteMapStartNotes+noteOffset)); Remove(newKcVSTGUI, (CommandID)(kcVSTGUIStartNotes+noteOffset)); } - } - if (inCmd>=kcVPStartNoteStops && inCmd<=kcVPEndNoteStops) + } else if (inCmd>=kcVPStartNoteStops && inCmd<=kcVPEndNoteStops) { KeyCombination newKcSamp = inKc; KeyCombination newKcIns = inKc; @@ -1330,7 +1330,18 @@ Remove(newKcInsNoteMap, (CommandID)(kcInsNoteMapStartNoteStops+noteOffset)); Remove(newKcVSTGUI, (CommandID)(kcVSTGUIStartNoteStops+noteOffset)); } - + } else if(inCmd == kcNoteCut || inCmd == kcNoteOff || inCmd == kcNoteFade) + { + // Stop preview in instrument browser + KeyCombination newKcTree = inKc; + newKcTree.Context(kCtxViewTree); + if(adding) + { + Add(newKcTree, kcTreeViewStopPreview, false); + } else + { + Remove(newKcTree, kcTreeViewStopPreview); + } } } if (enforceRule[krCheckModifiers]) Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/mptrack/CommandSet.h 2015-06-14 21:14:26 UTC (rev 5318) @@ -1078,6 +1078,8 @@ kcVSTGUINoteStopA_3, kcVSTGUIEndNoteStops=kcVSTGUINoteStopA_3, + kcTreeViewStopPreview, + kcStartVSTGUICommands, kcVSTGUIPrevPreset=kcStartVSTGUICommands, kcVSTGUINextPreset, Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-14 21:14:26 UTC (rev 5318) @@ -9,7 +9,7 @@ #include "stdafx.h" -#include "mptrack.h" +#include "Mptrack.h" #include "MainFrm.h" #include "../sounddev/SoundDevice.h" #include "../sounddev/SoundDeviceManager.h" @@ -33,7 +33,7 @@ #include "MIDIMappingDialog.h" #include <direct.h> #include "../common/version.h" -#include "ctrl_pat.h" +#include "Ctrl_pat.h" #include "UpdateCheck.h" #include "CloseMainDialog.h" #include "SelectPluginDialog.h" @@ -1601,7 +1601,7 @@ m_WaveFile.m_nTempoMode = tempoModeClassic; m_WaveFile.Order.resize(1); m_WaveFile.Order[0] = 0; - m_WaveFile.Patterns.Insert(0, 80); + m_WaveFile.Patterns.Insert(0, 2); m_WaveFile.m_SongFlags = SONG_LINEARSLIDES; } @@ -1621,15 +1621,11 @@ m[0].note = note; m[0].instr = 1; - if(m_WaveFile.GetNumInstruments() != 0 || m_WaveFile.GetSample(1).uFlags[CHN_LOOP]) - { - m[48 * 2].note = NOTE_KEYOFF; - m[79 * 2].note = NOTE_NOTECUT; - } } - m[79 * 2].command = CMD_POSITIONJUMP; - m[79 * 2 + 1].command = CMD_PATTERNBREAK; - m[79 * 2 + 1].param = 63; + // Infinite loop on second row + m[1 * 2].command = CMD_POSITIONJUMP; + m[1 * 2 + 1].command = CMD_PATTERNBREAK; + m[1 * 2 + 1].param = 1; } } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2015-06-14 21:14:26 UTC (rev 5318) @@ -1377,8 +1377,11 @@ case MODITEM_SAMPLE: if (modDoc) { - if (nParam & 0x80) + if (nParam == NOTE_NOTECUT) { + modDoc->NoteOff(0, true); // cut previous playing samples + } else if (nParam & 0x80) + { modDoc->NoteOff(nParam & 0x7F, true); } else { @@ -1391,8 +1394,11 @@ case MODITEM_INSTRUMENT: if (modDoc) { - if (nParam & 0x80) + if (nParam == NOTE_NOTECUT) { + modDoc->NoteOff(0, true); + } else if (nParam & 0x80) + { modDoc->NoteOff(nParam & 0x7F, true); } else { @@ -1418,29 +1424,36 @@ case MODITEM_INSLIB_SAMPLE: case MODITEM_INSLIB_INSTRUMENT: - if(!m_SongFileName.empty()) + if(nParam != NOTE_NOTECUT) { - // Preview sample / instrument in module - char szName[16]; - mpt::String::CopyN(szName, GetItemText(hItem)); - const size_t n = ConvertStrTo<size_t>(szName); CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm && m_SongFile) + if(!m_SongFileName.empty()) { - if (modItem.type == MODITEM_INSLIB_INSTRUMENT) + // Preview sample / instrument in module + char szName[16]; + mpt::String::CopyN(szName, GetItemText(hItem)); + const size_t n = ConvertStrTo<size_t>(szName); + if (pMainFrm && m_SongFile) { - pMainFrm->PlaySoundFile(*m_SongFile, static_cast<INSTRUMENTINDEX>(n), SAMPLEINDEX_INVALID, nParam); - } else - { - pMainFrm->PlaySoundFile(*m_SongFile, INSTRUMENTINDEX_INVALID, static_cast<SAMPLEINDEX>(n), nParam); + if (modItem.type == MODITEM_INSLIB_INSTRUMENT) + { + pMainFrm->PlaySoundFile(*m_SongFile, static_cast<INSTRUMENTINDEX>(n), SAMPLEINDEX_INVALID, nParam); + } else + { + pMainFrm->PlaySoundFile(*m_SongFile, INSTRUMENTINDEX_INVALID, static_cast<SAMPLEINDEX>(n), nParam); + } } + } else + { + // Preview sample / instrument file + if (pMainFrm) pMainFrm->PlaySoundFile(InsLibGetFullPath(hItem), nParam); } } else { - // Preview sample / instrument file CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->PlaySoundFile(InsLibGetFullPath(hItem), nParam); + if (pMainFrm) pMainFrm->StopPreview(); } + return TRUE; case MODITEM_MIDIPERCUSSION: @@ -2084,7 +2097,7 @@ case MODITEM_INSLIB_INSTRUMENT: if(!m_SongFileName.empty()) { - CHAR s[32]; + TCHAR s[32]; mpt::String::CopyN(s, GetItemText(m_hItemDrag)); const uint32 n = ConvertStrTo<uint32>(s); dropInfo.dwDropType = (m_itemDrag.type == MODITEM_INSLIB_SAMPLE) ? DRAGONDROP_SAMPLE : DRAGONDROP_INSTRUMENT; @@ -3546,11 +3559,18 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); + ModCommand::NOTE note = NOTE_NONE; const bool start = wParam >= kcTreeViewStartNotes && wParam <= kcTreeViewEndNotes, stop = (wParam >= kcTreeViewStartNoteStops && wParam <= kcTreeViewEndNoteStops) && !IsSampleBrowser(); if(start || stop) { - ModCommand::NOTE note = static_cast<ModCommand::NOTE>(wParam - (start ? kcTreeViewStartNotes : kcTreeViewStartNoteStops) + 1 + pMainFrm->GetBaseOctave() * 12); + note = static_cast<ModCommand::NOTE>(wParam - (start ? kcTreeViewStartNotes : kcTreeViewStartNoteStops) + 1 + pMainFrm->GetBaseOctave() * 12); + } else if(wParam == kcTreeViewStopPreview) + { + note = NOTE_NOTECUT; + } + if(note != NOTE_NONE) + { if(stop) note |= 0x80; if(PlayItem(GetSelectedItem(), note)) Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-06-14 21:14:26 UTC (rev 5318) @@ -835,7 +835,7 @@ if(chnMask[ch] & 1) // Note { uint8 note = patternData.ReadUint8(); - if(note < 0x80) note++; + if(note < 0x80) note += NOTE_MIN; if(!(GetType() & MOD_TYPE_MPT)) { if(note > NOTE_MAX && note < 0xFD) note = NOTE_FADE; @@ -1450,7 +1450,7 @@ uint8 vol = 0xFF; uint8 note = m->note; if (note != NOTE_NONE) b |= 1; - if (m->IsNote()) note--; + if (m->IsNote()) note -= NOTE_MIN; if (note == NOTE_FADE && GetType() != MOD_TYPE_MPT) note = 0xF6; if (m->instr) b |= 2; if (m->volcmd != VOLCMD_NONE) @@ -2222,6 +2222,7 @@ LimitMax(m_nDefaultGlobalVolume, MAX_GLOBAL_VOLUME); //m_nRestartPos //m_ModFlags + if(!m_tempoSwing.empty()) m_tempoSwing.resize(m_nDefaultRowsPerMeasure); } Modified: trunk/OpenMPT/soundlib/pattern.cpp =================================================================== --- trunk/OpenMPT/soundlib/pattern.cpp 2015-06-14 16:18:43 UTC (rev 5317) +++ trunk/OpenMPT/soundlib/pattern.cpp 2015-06-14 21:14:26 UTC (rev 5318) @@ -517,6 +517,7 @@ pat.SetSignature(nRPB, nRPM); TempoSwing swing; ssb.ReadItem<TempoSwing>(swing, "SWNG", TempoSwing::Deserialize); + if(!swing.empty()) swing.resize(nRPB); pat.SetTempoSwing(swing); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |