--- gigedit/trunk/src/gigedit/regionchooser.cpp 2007/08/26 09:29:52 1303 +++ gigedit/trunk/src/gigedit/regionchooser.cpp 2007/09/10 19:56:26 1339 @@ -79,8 +79,16 @@ add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK); - dimensionManager.articulation_changed_signal.connect( - sigc::mem_fun(*this, &RegionChooser::on_dimension_manager_changed) + dimensionManager.region_to_be_changed_signal.connect( + region_to_be_changed_signal.make_slot() + ); + dimensionManager.region_changed_signal.connect( + region_changed_signal.make_slot() + ); + dimensionManager.region_changed_signal.connect( + sigc::hide( + sigc::mem_fun(*this, &RegionChooser::on_dimension_manager_changed) + ) ); } @@ -250,13 +258,23 @@ if (resize.mode == resize.moving_high_limit) { if (resize.region->KeyRange.high != resize.pos - 1) { - resize.region->KeyRange.high = resize.pos - 1; - instrument_changed(); + instrument_struct_to_be_changed_signal.emit(instrument); + resize.region->SetKeyRange( + resize.region->KeyRange.low, // low + resize.pos - 1 // high + ); + instrument_changed.emit(); + instrument_struct_changed_signal.emit(instrument); } } else if (resize.mode == resize.moving_low_limit) { if (resize.region->KeyRange.low != resize.pos) { - resize.region->KeyRange.low = resize.pos; - instrument_changed(); + instrument_struct_to_be_changed_signal.emit(instrument); + resize.region->SetKeyRange( + resize.pos, // low + resize.region->KeyRange.high // high + ); + instrument_changed.emit(); + instrument_struct_changed_signal.emit(instrument); } } @@ -269,22 +287,12 @@ move.active = false; if (move.pos) { - region->KeyRange.low += move.pos; - region->KeyRange.high += move.pos; - - // find the r which is the first one to the right of region - // at its new position - gig::Region* r; - gig::Region* prev_region = 0; - for (r = instrument->GetFirstRegion() ; r ; r = instrument->GetNextRegion()) { - if (r->KeyRange.low > region->KeyRange.low) break; - prev_region = r; - } - - // place region before r if it's not already there - if (prev_region != region) { - instrument->MoveRegion(region, r); - } + instrument_struct_to_be_changed_signal.emit(instrument); + region->SetKeyRange( + region->KeyRange.low + move.pos, + region->KeyRange.high + move.pos + ); + instrument_struct_changed_signal.emit(instrument); } if (is_in_resize_zone(event->x, event->y)) { @@ -608,12 +616,12 @@ return false; } -sigc::signal RegionChooser::signal_region_selected() +sigc::signal& RegionChooser::signal_region_selected() { return region_selected; } -sigc::signal RegionChooser::signal_instrument_changed() +sigc::signal& RegionChooser::signal_instrument_changed() { return instrument_changed; } @@ -645,15 +653,13 @@ void RegionChooser::add_region() { - gig::Region* r; - for (r = instrument->GetFirstRegion() ; r ; r = instrument->GetNextRegion()) { - if (r->KeyRange.low > new_region_pos) break; - } + instrument_struct_to_be_changed_signal.emit(instrument); region = instrument->AddRegion(); - region->KeyRange.low = region->KeyRange.high = new_region_pos; + region->SetKeyRange(new_region_pos, new_region_pos); + + instrument_struct_changed_signal.emit(instrument); - instrument->MoveRegion(region, r); queue_draw(); region_selected(); instrument_changed(); @@ -661,7 +667,10 @@ void RegionChooser::delete_region() { + instrument_struct_to_be_changed_signal.emit(instrument); instrument->DeleteRegion(region); + instrument_struct_changed_signal.emit(instrument); + region = 0; queue_draw(); region_selected(); @@ -679,3 +688,19 @@ region_selected(); instrument_changed(); } + +sigc::signal& RegionChooser::signal_instrument_struct_to_be_changed() { + return instrument_struct_to_be_changed_signal; +} + +sigc::signal& RegionChooser::signal_instrument_struct_changed() { + return instrument_struct_changed_signal; +} + +sigc::signal& RegionChooser::signal_region_to_be_changed() { + return region_to_be_changed_signal; +} + +sigc::signal& RegionChooser::signal_region_changed_signal() { + return region_changed_signal; +}