mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-23 21:57:16 +01:00
small adjustments to TransportMaster API to better accomodate the "ignore/accept commands" concept
This commit is contained in:
parent
843907654c
commit
aad60e37b9
6 changed files with 36 additions and 14 deletions
|
|
@ -345,6 +345,7 @@ class LIBARDOUR_API TransportMaster : public PBD::Stateful {
|
|||
|
||||
virtual void check_backend() {}
|
||||
virtual bool allow_request (TransportRequestSource, TransportRequestType) const;
|
||||
std::string allowed_request_string () const;
|
||||
|
||||
TransportRequestType request_mask() const { return _request_mask; }
|
||||
void set_request_mask (TransportRequestType);
|
||||
|
|
|
|||
|
|
@ -598,10 +598,9 @@ enum TransportRequestSource {
|
|||
};
|
||||
|
||||
enum TransportRequestType {
|
||||
TR_Stop = 0x1,
|
||||
TR_Start = 0x2,
|
||||
TR_Speed = 0x4,
|
||||
TR_Locate = 0x8
|
||||
TR_StartStop = 0x1,
|
||||
TR_Speed = 0x2,
|
||||
TR_Locate = 0x4
|
||||
};
|
||||
|
||||
enum ShuttleBehaviour {
|
||||
|
|
|
|||
|
|
@ -418,8 +418,7 @@ setup_enum_writer ()
|
|||
REGISTER_ENUM (LTC);
|
||||
REGISTER (_SyncSource);
|
||||
|
||||
REGISTER_ENUM (TR_Stop);
|
||||
REGISTER_ENUM (TR_Start);
|
||||
REGISTER_ENUM (TR_StartStop);
|
||||
REGISTER_ENUM (TR_Speed);
|
||||
REGISTER_ENUM (TR_Locate);
|
||||
REGISTER (_TransportRequestType);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ CubicInterpolation::interpolate (int channel, samplecnt_t input_samples, Sample
|
|||
assert (output_samples > 0);
|
||||
assert (input);
|
||||
assert (output);
|
||||
assert (phase.size () > channel);
|
||||
assert (phase.size () > std::vector<double>::size_type (channel));
|
||||
|
||||
_speed = fabs (_speed);
|
||||
|
||||
|
|
|
|||
|
|
@ -864,8 +864,14 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
|
|||
return;
|
||||
}
|
||||
|
||||
if (should_ignore_transport_request (origin, TR_Speed)) {
|
||||
return;
|
||||
if (speed == 1. || speed == 0. || speed == -1.) {
|
||||
if (should_ignore_transport_request (origin, TR_StartStop)) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (should_ignore_transport_request (origin, TR_Speed)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
|
||||
|
|
@ -881,10 +887,6 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
|
|||
void
|
||||
Session::request_transport_speed_nonzero (double speed, bool as_default, TransportRequestSource origin)
|
||||
{
|
||||
if (should_ignore_transport_request (origin, TransportRequestType (TR_Speed|TR_Start))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (speed == 0) {
|
||||
speed = DBL_EPSILON;
|
||||
}
|
||||
|
|
@ -900,7 +902,7 @@ Session::request_stop (bool abort, bool clear_state, TransportRequestSource orig
|
|||
return;
|
||||
}
|
||||
|
||||
if (should_ignore_transport_request (origin, TR_Stop)) {
|
||||
if (should_ignore_transport_request (origin, TR_StartStop)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -482,6 +482,27 @@ TransportMaster::allow_request (TransportRequestSource src, TransportRequestType
|
|||
return _request_mask & type;
|
||||
}
|
||||
|
||||
std::string
|
||||
TransportMaster::allowed_request_string () const
|
||||
{
|
||||
std::string s;
|
||||
if (_request_mask == TransportRequestType (TR_StartStop|TR_Speed|TR_Locate)) {
|
||||
s = _("All");
|
||||
} else if (_request_mask == TransportRequestType (0)) {
|
||||
s = _("None");
|
||||
} else if (_request_mask == TR_StartStop) {
|
||||
s = _("Start/Stop");
|
||||
} else if (_request_mask == TR_Speed) {
|
||||
s = _("Speed");
|
||||
} else if (_request_mask == TR_Locate) {
|
||||
s = _("Locate");
|
||||
} else {
|
||||
s = _("Complex");
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void
|
||||
TransportMaster::set_request_mask (TransportRequestType t)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue