diff --git a/fluid/fluidgui.cpp b/fluid/fluidgui.cpp index e65f5e11ece23..060be9a379934 100644 --- a/fluid/fluidgui.cpp +++ b/fluid/fluidgui.cpp @@ -140,24 +140,37 @@ void FluidGui::synthesizerChanged() } //--------------------------------------------------------- -// soundFontUpClicked +// moveSoundfontInTheList //--------------------------------------------------------- -void FluidGui::soundFontUpClicked() +void FluidGui::moveSoundfontInTheList(int currentIdx, int targetIdx) { - int row = soundFonts->currentRow(); - if (row <= 0) - return; QStringList sfonts = fluid()->soundFonts(); - sfonts.swap(row, row - 1); + for (auto sfName : sfonts) + fluid()->removeSoundFont(sfName); + + sfonts.swap(currentIdx, targetIdx); fluid()->loadSoundFonts(sfonts); sfonts = fluid()->soundFonts(); soundFonts->clear(); soundFonts->addItems(sfonts); - soundFonts->setCurrentRow(row - 1); + soundFonts->setCurrentRow(targetIdx); emit sfChanged(); } +//--------------------------------------------------------- +// soundFontUpClicked +//--------------------------------------------------------- + +void FluidGui::soundFontUpClicked() + { + int row = soundFonts->currentRow(); + if (row <= 0) + return; + + moveSoundfontInTheList(row, row - 1); + } + //--------------------------------------------------------- // soundFontDownClicked //--------------------------------------------------------- @@ -169,14 +182,7 @@ void FluidGui::soundFontDownClicked() if (row + 1 >= rows) return; - QStringList sfonts = fluid()->soundFonts(); - sfonts.swap(row, row + 1); - fluid()->loadSoundFonts(sfonts); - sfonts = fluid()->soundFonts(); - soundFonts->clear(); - soundFonts->addItems(sfonts); - soundFonts->setCurrentRow(row + 1); - emit sfChanged(); + moveSoundfontInTheList(row, row + 1); } //--------------------------------------------------------- diff --git a/fluid/fluidgui.h b/fluid/fluidgui.h index 33a03be9eacbd..df0c39307f107 100644 --- a/fluid/fluidgui.h +++ b/fluid/fluidgui.h @@ -61,6 +61,7 @@ class FluidGui : public Ms::SynthesizerGui, Ui::FluidGui { QTimer * _progressTimer; std::list _sfToLoad; void loadSf(); + void moveSoundfontInTheList(int currentIdx, int targetIdx); private slots: void soundFontUpClicked(); diff --git a/zerberus/zerberusgui.cpp b/zerberus/zerberusgui.cpp index da0e54af15524..2b1339aba481c 100644 --- a/zerberus/zerberusgui.cpp +++ b/zerberus/zerberusgui.cpp @@ -109,21 +109,38 @@ ZerberusGui::ZerberusGui(Ms::Synthesizer* s) updateButtons(); } +//--------------------------------------------------------- +// moveSoundfontInTheList +//--------------------------------------------------------- + +void ZerberusGui::moveSoundfontInTheList(int currentIdx, int targetIdx) + { + QStringList sfonts = zerberus()->soundFonts(); + sfonts.swap(currentIdx, targetIdx); + zerberus()->removeSoundFonts(zerberus()->soundFonts()); + + loadSoundFontsAsync(sfonts); + files->setCurrentRow(targetIdx); + emit sfChanged(); + } + +//--------------------------------------------------------- +// soundFontUpClicked +//--------------------------------------------------------- + void ZerberusGui::soundFontUpClicked() { int row = files->currentRow(); if (row <= 0) return; - QStringList sfonts = zerberus()->soundFonts(); - sfonts.swap(row, row-1); - zerberus()->removeSoundFonts(zerberus()->soundFonts()); - - loadSoundFontsAsync(sfonts); - files->setCurrentRow(row-1); - emit sfChanged(); + moveSoundfontInTheList(row, row - 1); } +//--------------------------------------------------------- +// soundFontDownClicked +//--------------------------------------------------------- + void ZerberusGui::soundFontDownClicked() { int rows = files->count(); @@ -131,13 +148,7 @@ void ZerberusGui::soundFontDownClicked() if (row + 1 >= rows) return; - QStringList sfonts = zerberus()->soundFonts(); - sfonts.swap(row, row + 1); - zerberus()->removeSoundFonts(zerberus()->soundFonts()); - - loadSoundFontsAsync(sfonts); - files->setCurrentRow(row + 1); - emit sfChanged(); + moveSoundfontInTheList(row, row + 1); } //--------------------------------------------------------- diff --git a/zerberus/zerberusgui.h b/zerberus/zerberusgui.h index 85d7d50842ff9..003be07c001dd 100644 --- a/zerberus/zerberusgui.h +++ b/zerberus/zerberusgui.h @@ -64,7 +64,8 @@ class ZerberusGui : public Ms::SynthesizerGui, Ui::ZerberusGui { void loadSfz(); void loadSoundFontsAsync(QStringList sfonts); - + void moveSoundfontInTheList(int currentIdx, int targetIdx); + private slots: void soundFontUpClicked(); void soundFontDownClicked();