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.cc96
1 files changed, 67 insertions, 29 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 8906837031..ca2d7039ad 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -119,7 +119,22 @@ Editor::split_regions_at (nframes_t where, RegionSelection& regions)
{
begin_reversible_command (_("split"));
- snap_to (where);
+ // if splitting a single region, and snap-to is using
+ // region boundaries, don't pay attention to them
+
+ if (regions.size() == 1) {
+ switch (snap_type) {
+ case SnapToRegionStart:
+ case SnapToRegionSync:
+ case SnapToRegionEnd:
+ break;
+ default:
+ snap_to (where);
+ }
+ } else {
+ snap_to (where);
+ }
+
for (RegionSelection::iterator a = regions.begin(); a != regions.end(); ) {
RegionSelection::iterator tmp;
@@ -178,16 +193,17 @@ Editor::remove_selected_regions ()
/* XXX: should be called remove regions if we're removing more than one */
begin_reversible_command (_("remove region"));
+
while (!selection->regions.empty()) {
boost::shared_ptr<Region> region = selection->regions.front()->region ();
boost::shared_ptr<Playlist> playlist = region->playlist ();
-
+
XMLNode &before = playlist->get_state();
playlist->remove_region (region);
XMLNode &after = playlist->get_state();
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
}
-
+
commit_reversible_command ();
}
@@ -497,12 +513,13 @@ Editor::build_region_boundary_cache ()
for (vector<RegionPoint>::iterator p = interesting_points.begin(); p != interesting_points.end(); ++p) {
if ((r = find_next_region (pos, *p, 1, tlist, &ontrack)) == 0) {
- at_end = true;
+ if (*p == interesting_points.back()) {
+ at_end = true;
+ }
/* move to next point type */
continue;
}
-
switch (*p) {
case Start:
rpos = r->first_frame();
@@ -3423,73 +3440,94 @@ Editor::reset_region_gain_envelopes ()
session->commit_reversible_command ();
}
-/** Set whether or not gain envelopes are visible for the selected regions.
- * @param yn true to make visible, false to make invisible.
- */
void
-Editor::set_gain_envelope_visibility (bool yn)
+Editor::toggle_gain_envelope_visibility ()
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv) {
- if (arv->envelope_visible() != yn) {
- arv->set_envelope_visible (yn);
+ bool x = region_envelope_visible_item->get_active();
+ if (x != arv->envelope_visible()) {
+ arv->set_envelope_visible (x);
}
}
}
}
-/** Set whether or not gain envelopes are active for the selected regions.
- * @param yn true to make active, false to make inactive.
- */
void
-Editor::set_gain_envelope_active (bool yn)
+Editor::toggle_gain_envelope_active ()
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv) {
- if (arv->audio_region()->envelope_active() != yn) {
- arv->audio_region()->set_envelope_active (yn);
+ bool x = region_envelope_active_item->get_active();
+ if (x != arv->audio_region()->envelope_active()) {
+ arv->audio_region()->set_envelope_active (x);
}
}
}
}
-/** Set the locked state of all selected regions to a particular value.
+/** Set the position-locked state of all selected regions to a particular value.
* @param yn true to make locked, false to make unlocked.
*/
void
-Editor::set_region_lock (bool yn)
+Editor::toggle_region_position_lock ()
{
+ bool x = region_lock_position_item->get_active();
+
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- (*i)->region()->set_locked (yn);
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv) {
+ if (x != arv->audio_region()->locked()) {
+ arv->audio_region()->set_position_locked (x);
+ }
+ }
}
}
-/** Set the position-locked state of all selected regions to a particular value.
- * @param yn true to make locked, false to make unlocked.
- */
void
-Editor::set_region_position_lock (bool yn)
+Editor::toggle_region_lock ()
{
+ bool x = region_lock_item->get_active();
+
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- (*i)->region()->set_position_locked (yn);
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv) {
+ if (x != arv->audio_region()->locked()) {
+ arv->audio_region()->set_locked (x);
+ }
+ }
}
}
void
-Editor::set_region_mute (bool yn)
+Editor::toggle_region_mute ()
{
+ bool x = region_mute_item->get_active();
+
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- (*i)->region()->set_muted (yn);
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv) {
+ if (x != arv->audio_region()->muted()) {
+ arv->audio_region()->set_muted (x);
+ }
+ }
}
}
void
-Editor::set_region_opaque (bool yn)
+Editor::toggle_region_opaque ()
{
+ bool x = region_opaque_item->get_active();
+
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- (*i)->region()->set_opaque (yn);
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv) {
+ if (x != arv->audio_region()->opaque()) {
+ arv->audio_region()->set_opaque (x);
+ }
+ }
}
}