From c71e408a828190c90f69a5fb1876bcd09f59df52 Mon Sep 17 00:00:00 2001 From: Spekular Date: Mon, 21 Jun 2021 23:19:06 +0200 Subject: [PATCH] Preserve FX channel when replacing track (#5957) * Preserve FX channel when replacing track * Add comment --- include/InstrumentTrack.h | 2 ++ src/gui/FileBrowser.cpp | 10 +++------- src/tracks/InstrumentTrack.cpp | 25 ++++++++++++++++++------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index d3c84a441..e437fcb15 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -232,6 +232,8 @@ public: { return m_previewMode; } + + void replaceInstrument(DataFile dataFile); void autoAssignMidiDevice( bool ); diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 4fcbb6053..8b08ffa59 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -776,15 +776,11 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it) break; } - case FileItem::LoadAsPreset: - { - DataFile dataFile( f->fullName() ); - InstrumentTrack::removeMidiPortNode( dataFile ); - it->setSimpleSerializing(); - it->loadSettings( dataFile.content().toElement() ); + case FileItem::LoadAsPreset: { + DataFile dataFile(f->fullName()); + it->replaceInstrument(dataFile); break; } - case FileItem::ImportAsProject: ImportFilter::import( f->fullName(), Engine::getSong() ); diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 0ca8d6571..3f55222b5 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -954,6 +954,22 @@ void InstrumentTrack::setPreviewMode( const bool value ) +void InstrumentTrack::replaceInstrument(DataFile dataFile) +{ + // loadSettings clears the FX channel, so we save it here and set it back later + int effectChannel = effectChannelModel()->value(); + + InstrumentTrack::removeMidiPortNode(dataFile); + setSimpleSerializing(); + loadSettings(dataFile.content().toElement()); + + m_effectChannelModel.setValue(effectChannel); + Engine::getSong()->setModified(); +} + + + + QString InstrumentTrack::getSavedInstrumentName(const QDomElement &thisElement) const { QDomElement elem = thisElement.firstChildElement("instrument"); @@ -1835,13 +1851,8 @@ void InstrumentTrackWindow::dropEvent( QDropEvent* event ) } else if( type == "presetfile" ) { - DataFile dataFile( value ); - InstrumentTrack::removeMidiPortNode( dataFile ); - m_track->setSimpleSerializing(); - m_track->loadSettings( dataFile.content().toElement() ); - - Engine::getSong()->setModified(); - + DataFile dataFile(value); + m_track->replaceInstrument(dataFile); event->accept(); setFocus(); }