--- gigedit/trunk/src/gigedit/dimregionedit.cpp 2016/09/24 15:08:37 2991 +++ gigedit/trunk/src/gigedit/dimregionedit.cpp 2017/05/22 18:58:46 3202 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016 Andreas Persson + * Copyright (C) 2006-2017 Andreas Persson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -17,9 +17,9 @@ * 02110-1301 USA. */ +#include "global.h" #include "dimregionedit.h" -#include "global.h" #include "compat.h" VelocityCurve::VelocityCurve(double (gig::DimensionRegion::*getter)(uint8_t)) : @@ -1315,11 +1315,13 @@ bool DimRegionEdit::set_sample(gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop) { + bool result = false; for (std::set::iterator itDimReg = dimregs.begin(); itDimReg != dimregs.end(); ++itDimReg) { - set_sample(*itDimReg, sample, copy_sample_unity, copy_sample_tune, copy_sample_loop); + result |= set_sample(*itDimReg, sample, copy_sample_unity, copy_sample_tune, copy_sample_loop); } + return result; } bool DimRegionEdit::set_sample(gig::DimensionRegion* dimreg, gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop) @@ -1328,7 +1330,7 @@ //TODO: we should better move the code from MainWindow::on_sample_label_drop_drag_data_received() here // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received() - //dimreg_to_be_changed_signal.emit(dimregion); + //DimRegionChangeGuard(this, dimregion); // make sure stereo samples always are the same in both // dimregs in the samplechannel dimension @@ -1398,8 +1400,6 @@ update_model--; sample_ref_changed_signal.emit(oldref, sample); - // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received() - //dimreg_changed_signal.emit(dimreg); return true; } return false; @@ -1468,24 +1468,24 @@ if (value) { // create a new sample loop in case there is none yet if (!d->SampleLoops) { + DimRegionChangeGuard(this, d); + DLS::sample_loop_t loop; loop.LoopType = gig::loop_type_normal; // loop the whole sample by default loop.LoopStart = 0; loop.LoopLength = (d->pSample) ? d->pSample->SamplesTotal : 0; - dimreg_to_be_changed_signal.emit(d); d->AddSampleLoop(&loop); - dimreg_changed_signal.emit(d); } } else { if (d->SampleLoops) { - dimreg_to_be_changed_signal.emit(d); + DimRegionChangeGuard(this, d); + // delete ALL existing sample loops while (d->SampleLoops) { d->DeleteSampleLoop(&d->pSampleLoops[0]); } - dimreg_changed_signal.emit(d); } } } @@ -1535,7 +1535,7 @@ gig::Sample* oldref = dimregion->pSample; if (!oldref) return; - dimreg_to_be_changed_signal.emit(dimregion); + DimRegionChangeGuard(this, dimregion); // in case currently assigned sample is a stereo one, then remove both // references (expected to be due to a "stereo dimension") @@ -1573,7 +1573,6 @@ set_dim_region(dimregion); sample_ref_changed_signal.emit(oldref, NULL); - dimreg_changed_signal.emit(dimregion); } void DimRegionEdit::onButtonSelectSamplePressed() {