diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.h | 1 |
2 files changed, 21 insertions, 4 deletions
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index ab8ebb32b5..7ae1f860fc 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -480,8 +480,6 @@ RouteTimeAxisView::set_track_mode (TrackMode mode) RadioMenuItem* item; RadioMenuItem* other_item; - cerr << "STM, mode = " << mode; - switch (mode) { case ARDOUR::Normal: item = normal_track_mode_item; @@ -498,10 +496,28 @@ RouteTimeAxisView::set_track_mode (TrackMode mode) } if (item->get_active () && track()->mode() != mode) { - if (track()->set_mode (mode)) { - Glib::signal_idle().connect (bind (sigc::ptr_fun (__reset_item), other_item)); + _set_track_mode (track(), mode, other_item); + } +} + +void +RouteTimeAxisView::_set_track_mode (Track* track, TrackMode mode, RadioMenuItem* reset_item) +{ + bool needs_bounce; + + if (!track->can_use_mode (mode, needs_bounce)) { + + if (!needs_bounce) { + /* cannot be done */ + Glib::signal_idle().connect (bind (sigc::ptr_fun (__reset_item), reset_item)); + return; + } else { + cerr << "would bounce this one\n"; + return; } } + + track->set_mode (mode); } void diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 4a6f89e0af..cefe954c9a 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -234,6 +234,7 @@ protected: ArdourCanvas::SimpleRect* timestretch_rect; void set_track_mode (ARDOUR::TrackMode); + void _set_track_mode (ARDOUR::Track* track, ARDOUR::TrackMode mode, Gtk::RadioMenuItem* reset_item); void track_mode_changed (); list<RedirectAutomationInfo*> redirect_automation; |