diff options
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 149 |
1 files changed, 85 insertions, 64 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index aa0f316467..9f2f4acccf 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -219,14 +219,14 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions) a = tmp; } + latest_regionviews.clear (); + vector<sigc::connection> region_added_connections; for (list<RouteTimeAxisView*>::iterator i = used_trackviews.begin(); i != used_trackviews.end(); ++i) { region_added_connections.push_back ((*i)->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view))); } - latest_regionviews.clear (); - while (used_playlists.size() > 0) { list <boost::shared_ptr<Playlist > >::iterator i = used_playlists.begin(); (*i)->thaw(); @@ -236,8 +236,6 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions) for (vector<sigc::connection>::iterator c = region_added_connections.begin(); c != region_added_connections.end(); ++c) { (*c).disconnect (); } - - commit_reversible_command (); if (frozen){ EditorThaw(); /* Emit Signal */ @@ -251,7 +249,15 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions) selection->add (latest_regionviews); //these are the new regions created after the split } _ignore_follow_edits = false; + } else { + _ignore_follow_edits = true; + if( working_on_selection ) { + selection->add (latest_regionviews); //these are the new regions created after the split + } + _ignore_follow_edits = false; } + + commit_reversible_command (); } /** Move one extreme of the current range selection. If more than one range is selected, @@ -1928,12 +1934,14 @@ Editor::add_location_from_selection () _session->locations()->next_available_name(rangename,"selection"); Location *location = new Location (*_session, start, end, rangename, Location::IsRangeMarker); - _session->begin_reversible_command (_("add marker")); + begin_reversible_command (_("add marker")); + XMLNode &before = _session->locations()->get_state(); _session->locations()->add (location, true); XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -1948,12 +1956,14 @@ Editor::add_location_mark (framepos_t where) return; } Location *location = new Location (*_session, where, where, markername, Location::IsMark); - _session->begin_reversible_command (_("add marker")); + begin_reversible_command (_("add marker")); + XMLNode &before = _session->locations()->get_state(); _session->locations()->add (location, true); XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -1968,7 +1978,8 @@ Editor::remove_location_at_playhead_cursor () if (_session) { //set up for undo - _session->begin_reversible_command (_("remove marker")); + begin_reversible_command (_("remove marker")); + XMLNode &before = _session->locations()->get_state(); bool removed = false; @@ -1986,7 +1997,8 @@ Editor::remove_location_at_playhead_cursor () if (removed) { XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } } } @@ -2001,7 +2013,8 @@ Editor::add_locations_from_region () return; } - _session->begin_reversible_command (selection->regions.size () > 1 ? _("add markers") : _("add marker")); + begin_reversible_command (selection->regions.size () > 1 ? _("add markers") : _("add marker")); + XMLNode &before = _session->locations()->get_state(); for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) { @@ -2015,7 +2028,8 @@ Editor::add_locations_from_region () XMLNode &after = _session->locations()->get_state(); _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } /** Add a single range marker around all selected regions */ @@ -2028,7 +2042,8 @@ Editor::add_location_from_region () return; } - _session->begin_reversible_command (_("add marker")); + begin_reversible_command (_("add marker")); + XMLNode &before = _session->locations()->get_state(); string markername; @@ -2051,7 +2066,8 @@ Editor::add_location_from_region () XMLNode &after = _session->locations()->get_state(); _session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } /* MARKS */ @@ -2107,12 +2123,14 @@ void Editor::clear_markers () { if (_session) { - _session->begin_reversible_command (_("clear markers")); + begin_reversible_command (_("clear markers")); + XMLNode &before = _session->locations()->get_state(); _session->locations()->clear_markers (); XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } } @@ -2120,27 +2138,30 @@ void Editor::clear_ranges () { if (_session) { - _session->begin_reversible_command (_("clear ranges")); + begin_reversible_command (_("clear ranges")); + XMLNode &before = _session->locations()->get_state(); _session->locations()->clear_ranges (); XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); + + commit_reversible_command (); } } void Editor::clear_locations () { - _session->begin_reversible_command (_("clear locations")); + begin_reversible_command (_("clear locations")); + XMLNode &before = _session->locations()->get_state(); _session->locations()->clear (); XMLNode &after = _session->locations()->get_state(); _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after)); - _session->commit_reversible_command (); - _session->locations()->clear (); + + commit_reversible_command (); } void @@ -4537,11 +4558,11 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times) foo.insert (foo.end(), latest_regionviews.begin(), latest_regionviews.end()); } - commit_reversible_command (); - if (!foo.empty()) { selection->set (foo); } + + commit_reversible_command (); } void @@ -5168,8 +5189,8 @@ Editor::reset_region_gain_envelopes () return; } - _session->begin_reversible_command (_("reset region gain")); - + begin_reversible_command (_("reset region gain")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i); if (arv) { @@ -5180,8 +5201,8 @@ Editor::reset_region_gain_envelopes () _session->add_command (new MementoCommand<AutomationList>(*arv->audio_region()->envelope().get(), &before, &alist->get_state())); } } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -5221,8 +5242,8 @@ Editor::toggle_gain_envelope_active () return; } - _session->begin_reversible_command (_("region gain envelope active")); - + begin_reversible_command (_("region gain envelope active")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i); if (arv) { @@ -5231,8 +5252,8 @@ Editor::toggle_gain_envelope_active () _session->add_command (new StatefulDiffCommand (arv->region())); } } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -5248,15 +5269,15 @@ Editor::toggle_region_lock () return; } - _session->begin_reversible_command (_("toggle region lock")); - + begin_reversible_command (_("toggle region lock")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { (*i)->region()->clear_changes (); (*i)->region()->set_locked (!(*i)->region()->locked()); _session->add_command (new StatefulDiffCommand ((*i)->region())); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -5272,15 +5293,15 @@ Editor::toggle_region_video_lock () return; } - _session->begin_reversible_command (_("Toggle Video Lock")); - + begin_reversible_command (_("Toggle Video Lock")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { (*i)->region()->clear_changes (); (*i)->region()->set_video_locked (!(*i)->region()->video_locked()); _session->add_command (new StatefulDiffCommand ((*i)->region())); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -5296,16 +5317,16 @@ Editor::toggle_region_lock_style () return; } - _session->begin_reversible_command (_("region lock style")); - + begin_reversible_command (_("region lock style")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { (*i)->region()->clear_changes (); PositionLockStyle const ns = (*i)->region()->position_lock_style() == AudioTime ? MusicTime : AudioTime; (*i)->region()->set_position_lock_style (ns); _session->add_command (new StatefulDiffCommand ((*i)->region())); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -5321,15 +5342,15 @@ Editor::toggle_opaque_region () return; } - _session->begin_reversible_command (_("change region opacity")); - + begin_reversible_command (_("change region opacity")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { (*i)->region()->clear_changes (); (*i)->region()->set_opaque (!(*i)->region()->opaque()); _session->add_command (new StatefulDiffCommand ((*i)->region())); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -6137,8 +6158,8 @@ Editor::split_region_at_transients () return; } - _session->begin_reversible_command (_("split regions")); - + begin_reversible_command (_("split regions")); + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ) { RegionSelection::iterator tmp; @@ -6155,8 +6176,8 @@ Editor::split_region_at_transients () i = tmp; } - - _session->commit_reversible_command (); + + commit_reversible_command (); } @@ -6344,14 +6365,14 @@ Editor::place_transient() framepos_t where = get_preferred_edit_position(); - _session->begin_reversible_command (_("place transient")); - + begin_reversible_command (_("place transient")); + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { framepos_t position = (*r)->region()->position(); (*r)->region()->add_transient(where - position); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -6379,8 +6400,8 @@ Editor::snap_regions_to_grid () return; } - _session->begin_reversible_command (_("snap regions to grid")); - + begin_reversible_command (_("snap regions to grid")); + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { boost::shared_ptr<Playlist> pl = (*r)->region()->playlist(); @@ -6403,8 +6424,8 @@ Editor::snap_regions_to_grid () (*i)->thaw(); used_playlists.pop_front(); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -6462,8 +6483,8 @@ Editor::close_region_gaps () /* Iterate over the region list and make adjacent regions overlap by crossfade_len_ms */ - _session->begin_reversible_command (_("close region gaps")); - + begin_reversible_command (_("close region gaps")); + int idx = 0; boost::shared_ptr<Region> last_region; @@ -6502,8 +6523,8 @@ Editor::close_region_gaps () (*i)->thaw(); used_playlists.pop_front(); } - - _session->commit_reversible_command (); + + commit_reversible_command (); } void @@ -7111,7 +7132,7 @@ Editor::toggle_region_mute () (*i)->region()->playlist()->clear_changes (); (*i)->region()->set_muted (!(*i)->region()->muted ()); - _session->add_command (new StatefulDiffCommand ((*i)->region()->playlist())); + _session->add_command (new StatefulDiffCommand ((*i)->region())); } |