summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_ops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r--gtk2_ardour/editor_ops.cc149
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()));
}