add a method to cancel a pending play_range. this is needed when we are modifying the range with keyboard commands.

This commit is contained in:
Ben Loftis 2014-07-02 17:34:49 -05:00
parent 0f1c7b1d71
commit a1c8e67e50
6 changed files with 18 additions and 54 deletions

View file

@ -63,8 +63,8 @@ Editor::keyboard_selection_finish (bool add)
selection->set (start, end); selection->set (start, end);
//if session is playing a range, cancel that //if session is playing a range, cancel that
// if (_session->get_play_range()) if (_session->get_play_range())
// _session->request_cancel_play_range(); _session->request_cancel_play_range();
} }
} }
@ -99,61 +99,10 @@ Editor::keyboard_selection_begin ()
//if session is playing a range, cancel that //if session is playing a range, cancel that
if (_session->get_play_range()) if (_session->get_play_range())
_session->request_transport_speed ( 1.0 ); _session->request_cancel_play_range();
//if join playhead, locate to the newly selected start
// if ( !_session->transport_rolling() && Config->get_join_play_range() )
// _session->request_cancel_play_range();
} }
} }
/*
void
Editor::keyboard_selection_finish (bool add)
{
if (_session && have_pending_keyboard_selection) {
framepos_t end;
bool ignored;
if (_session->transport_rolling()) {
end = _session->audible_frame();
} else {
if (!mouse_frame (end, ignored)) {
return;
}
}
if (add) {
selection->add (pending_keyboard_selection_start, end);
} else {
selection->set (pending_keyboard_selection_start, end);
}
have_pending_keyboard_selection = false;
}
}
void
Editor::keyboard_selection_begin ()
{
if (_session) {
if (_session->transport_rolling()) {
pending_keyboard_selection_start = _session->audible_frame();
have_pending_keyboard_selection = true;
} else {
bool ignored;
framepos_t where; // XXX fix me
if (mouse_frame (where, ignored)) {
pending_keyboard_selection_start = where;
have_pending_keyboard_selection = true;
}
}
}
}*/
void void
Editor::keyboard_paste () Editor::keyboard_paste ()
{ {

View file

@ -763,6 +763,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
/* ranges */ /* ranges */
void request_play_range (std::list<AudioRange>*, bool leave_rolling = false); void request_play_range (std::list<AudioRange>*, bool leave_rolling = false);
void request_cancel_play_range ();
bool get_play_range () const { return _play_range; } bool get_play_range () const { return _play_range; }
void maybe_update_session_range (framepos_t, framepos_t); void maybe_update_session_range (framepos_t, framepos_t);

View file

@ -54,6 +54,7 @@ public:
Audition, Audition,
InputConfigurationChange, InputConfigurationChange,
SetPlayAudioRange, SetPlayAudioRange,
CancelPlayAudioRange,
RealTimeOperation, RealTimeOperation,
AdjustPlaybackBuffering, AdjustPlaybackBuffering,
AdjustCaptureBuffering, AdjustCaptureBuffering,

View file

@ -369,6 +369,7 @@ setup_enum_writer ()
REGISTER_CLASS_ENUM (SessionEvent, Audition); REGISTER_CLASS_ENUM (SessionEvent, Audition);
REGISTER_CLASS_ENUM (SessionEvent, InputConfigurationChange); REGISTER_CLASS_ENUM (SessionEvent, InputConfigurationChange);
REGISTER_CLASS_ENUM (SessionEvent, SetPlayAudioRange); REGISTER_CLASS_ENUM (SessionEvent, SetPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, CancelPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, StopOnce); REGISTER_CLASS_ENUM (SessionEvent, StopOnce);
REGISTER_CLASS_ENUM (SessionEvent, AutoLoop); REGISTER_CLASS_ENUM (SessionEvent, AutoLoop);
REGISTER (_SessionEvent_Type); REGISTER (_SessionEvent_Type);

View file

@ -1142,6 +1142,10 @@ Session::process_event (SessionEvent* ev)
set_play_range (ev->audio_range, (ev->speed == 1.0f)); set_play_range (ev->audio_range, (ev->speed == 1.0f));
break; break;
case SessionEvent::CancelPlayAudioRange:
unset_play_range();
break;
case SessionEvent::RealTimeOperation: case SessionEvent::RealTimeOperation:
process_rtop (ev); process_rtop (ev);
del = false; // other side of RT request needs to clean up del = false; // other side of RT request needs to clean up

View file

@ -227,6 +227,14 @@ Session::request_play_range (list<AudioRange>* range, bool leave_rolling)
queue_event (ev); queue_event (ev);
} }
void
Session::request_cancel_play_range ()
{
SessionEvent* ev = new SessionEvent (SessionEvent::CancelPlayAudioRange, SessionEvent::Add, SessionEvent::Immediate, 0, 0);
queue_event (ev);
}
void void
Session::realtime_stop (bool abort, bool clear_state) Session::realtime_stop (bool abort, bool clear_state)
{ {