diff --git a/include/Track.h b/include/Track.h index dc7f418e9..3a537b712 100644 --- a/include/Track.h +++ b/include/Track.h @@ -186,6 +186,11 @@ public: { return m_hasColor; } + + bool isMutedBeforeSolo() const + { + return m_mutedBeforeSolo; + } BoolModel* getMutedModel(); @@ -196,6 +201,11 @@ public slots: emit nameChanged(); } + void setMutedBeforeSolo(const bool muted) + { + m_mutedBeforeSolo = muted; + } + void toggleSolo(); void setColor(const QColor& c); @@ -209,6 +219,7 @@ private: protected: BoolModel m_mutedModel; + private: BoolModel m_soloModel; bool m_mutedBeforeSolo; @@ -230,7 +241,6 @@ signals: void nameChanged(); void trackContentObjectAdded( TrackContentObject * ); void colorChanged(); - } ; diff --git a/src/gui/InstrumentTrackWindow.cpp b/src/gui/InstrumentTrackWindow.cpp index cda4e44f8..15e6ea273 100644 --- a/src/gui/InstrumentTrackWindow.cpp +++ b/src/gui/InstrumentTrackWindow.cpp @@ -387,20 +387,20 @@ void InstrumentTrackWindow::modelChanged() void InstrumentTrackWindow::saveSettingsBtnClicked() { - FileDialog sfd( this, tr( "Save preset" ), "", tr( "XML preset file (*.xpf)" ) ); + FileDialog sfd(this, tr("Save preset"), "", tr("XML preset file (*.xpf)")); QString presetRoot = ConfigManager::inst()->userPresetsDir(); - if( !QDir( presetRoot ).exists() ) + if(!QDir(presetRoot).exists()) { - QDir().mkdir( presetRoot ); + QDir().mkdir(presetRoot); } - if( !QDir( presetRoot + m_track->instrumentName() ).exists() ) + if(!QDir(presetRoot + m_track->instrumentName()).exists()) { - QDir( presetRoot ).mkdir( m_track->instrumentName() ); + QDir(presetRoot).mkdir(m_track->instrumentName()); } - sfd.setAcceptMode( FileDialog::AcceptSave ); - sfd.setDirectory( presetRoot + m_track->instrumentName() ); + sfd.setAcceptMode(FileDialog::AcceptSave); + sfd.setDirectory(presetRoot + m_track->instrumentName()); sfd.setFileMode( FileDialog::AnyFile ); QString fname = m_track->name(); sfd.selectFile(fname.remove(QRegExp(FILENAME_FILTER))); @@ -410,11 +410,17 @@ void InstrumentTrackWindow::saveSettingsBtnClicked() !sfd.selectedFiles().isEmpty() && !sfd.selectedFiles().first().isEmpty() ) { - DataFile dataFile( DataFile::InstrumentTrackSettings ); + DataFile dataFile(DataFile::InstrumentTrackSettings); + QDomElement& content(dataFile.content()); + m_track->setSimpleSerializing(); - m_track->saveSettings( dataFile, dataFile.content() ); + m_track->saveSettings(dataFile, content); + //We don't want to save muted & solo settings when we're saving a preset + content.setAttribute("muted", 0); + content.setAttribute("solo", 0); + content.setAttribute("mutedBeforeSolo", 0); QString f = sfd.selectedFiles()[0]; - dataFile.writeFile( f ); + dataFile.writeFile(f); } } diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index d7904b38e..7892a3bc0 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -986,8 +986,18 @@ void InstrumentTrack::replaceInstrument(DataFile dataFile) InstrumentTrack::removeMidiPortNode(dataFile); setSimpleSerializing(); + + //Replacing an instrument shouldn't change the solo/mute state. + bool oldMute = isMuted(); + bool oldSolo = isSolo(); + bool oldMutedBeforeSolo = isMutedBeforeSolo(); + loadSettings(dataFile.content().toElement()); + setMuted(oldMute); + setSolo(oldSolo); + setMutedBeforeSolo(oldMutedBeforeSolo); + m_effectChannelModel.setValue(effectChannel); Engine::getSong()->setModified(); }