better design for range plays that leaves the range play button able to play the...
[ardour.git] / libs / ardour / session_events.cc
index e93a7a5f17a01ca0ec58a0a098321f8b769f596c..58702c133b9aedf37f7e9baed4307d614850b0ef 100644 (file)
@@ -41,6 +41,7 @@ static const char* event_names[] = {
        "SetDiskstreamSpeed",
        "Locate",
        "LocateRoll",
+       "LocateRollLocate",
        "SetLoop",
        "PunchIn",
        "PunchOut",
@@ -335,6 +336,7 @@ Session::process_event (Event* ev)
                        // cerr << "soft locate to " << ev->target_frame << endl;
                        start_locate (ev->target_frame, false, true, false);
                }
+               _send_smpte_update = true;
                break;
 
        case Event::LocateRoll:
@@ -345,10 +347,19 @@ Session::process_event (Event* ev)
                        // cerr << "soft locate to+roll " << ev->target_frame << endl;
                        start_locate (ev->target_frame, true, true, false);
                }
+               _send_smpte_update = true;
                break;
 
+       case Event::LocateRollLocate:
+               // locate is handled by ::request_roll_at_and_return()
+               _requested_return_frame = ev->target_frame;
+               cerr << "Set RRF " << ev->target_frame << endl;
+               request_locate (ev->target2_frame, true);
+               break;
+
+
        case Event::SetTransportSpeed:
-               set_transport_speed (ev->speed, ev->yes_or_no);
+               set_transport_speed (ev->speed, ev->yes_or_no, ev->second_yes_or_no);
                break;
                
        case Event::PunchIn:
@@ -371,7 +382,7 @@ Session::process_event (Event* ev)
 
        case Event::StopOnce:
                if (!non_realtime_work_pending()) {
-                       stop_transport (ev->yes_or_no);
+                       set_transport_speed (0.0, ev->yes_or_no, ev->second_yes_or_no);
                        _clear_event_type (Event::StopOnce);
                }
                remove = false;
@@ -406,6 +417,8 @@ Session::process_event (Event* ev)
 
        case Event::Audition:
                set_audition (ev->region);
+               // drop reference to region
+               ev->region.reset ();
                break;
 
        case Event::InputConfigurationChange:
@@ -413,13 +426,8 @@ Session::process_event (Event* ev)
                schedule_butler_transport_work ();
                break;
 
-       case Event::SetAudioRange:
-               current_audio_range = ev->audio_range;
-               setup_auto_play ();
-               break;
-
-       case Event::SetPlayRange:
-               set_play_range (ev->yes_or_no);
+       case Event::SetPlayAudioRange:
+               set_play_range (ev->audio_range, ev->yes_or_no, (ev->speed == 1.0f));
                break;
 
        default: