diff --git a/libs/ardour/ardour/triggerbox.h b/libs/ardour/ardour/triggerbox.h index aad258f442..33d3b7e00d 100644 --- a/libs/ardour/ardour/triggerbox.h +++ b/libs/ardour/ardour/triggerbox.h @@ -104,6 +104,12 @@ class LIBARDOUR_API Trigger : public PBD::Stateful { void set_name (std::string const &); std::string name() const { return _name; } + void set_stretchable (bool yn); + bool stretchable () const { return _stretchable; } + + void set_scene_isolated (bool isolate); + bool scene_isolated () const { return _isolated; } + /* Calling ::bang() will cause this Trigger to be placed in its owning TriggerBox's queue. */ @@ -262,6 +268,7 @@ class LIBARDOUR_API Trigger : public PBD::Stateful { void* _ui; samplepos_t expected_end_sample; PBD::Property _stretchable; + PBD::Property _isolated; bool _explicitly_stopped; void set_region_internal (boost::shared_ptr); @@ -302,9 +309,6 @@ class LIBARDOUR_API AudioTrigger : public Trigger { SegmentDescriptor get_segment_descriptor () const; void set_expected_end_sample (Temporal::TempoMap::SharedPtr const &, Temporal::BBT_Time const &); - void set_stretchable (bool yn); - bool stretchable () const { return _stretchable; } - bool stretching () const; protected: @@ -619,6 +623,7 @@ namespace Properties { LIBARDOUR_API extern PBD::PropertyDescriptor gain; LIBARDOUR_API extern PBD::PropertyDescriptor currently_playing; LIBARDOUR_API extern PBD::PropertyDescriptor stretchable; + LIBARDOUR_API extern PBD::PropertyDescriptor isolated; } diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index 2cba23dc92..6e921cfc67 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -58,6 +58,7 @@ namespace ARDOUR { PBD::PropertyDescriptor velocity_effect; PBD::PropertyDescriptor gain; PBD::PropertyDescriptor stretchable; + PBD::PropertyDescriptor isolated; } } @@ -83,6 +84,7 @@ Trigger::Trigger (uint64_t n, TriggerBox& b) , _ui (0) , expected_end_sample (0) , _stretchable (Properties::stretchable, true) + , _isolated (Properties::isolated, false) , _explicitly_stopped (false) { add_property (_legato); @@ -91,6 +93,7 @@ Trigger::Trigger (uint64_t n, TriggerBox& b) add_property (_midi_velocity_effect); add_property (_follow_action_probability); add_property (_stretchable); + add_property (_isolated); } void @@ -106,6 +109,20 @@ Trigger::set_name (std::string const & str) _name = str; } +void +Trigger::set_scene_isolated (bool i) +{ + _isolated = i; + PropertyChanged (ARDOUR::Properties::isolated); +} + +void +Trigger::set_stretchable (bool s) +{ + _stretchable = s; + PropertyChanged (ARDOUR::Properties::stretchable); +} + void Trigger::set_ui (void* p) { @@ -649,13 +666,6 @@ AudioTrigger::set_state (const XMLNode& node, int version) return 0; } -void -AudioTrigger::set_stretchable (bool s) -{ - _stretchable = s; - PropertyChanged (ARDOUR::Properties::stretchable); -} - void AudioTrigger::set_start (timepos_t const & s) { @@ -1601,6 +1611,8 @@ Trigger::make_property_quarks () DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for follow-action-1 = %1\n", Properties::follow_action1.property_id)); Properties::stretchable.property_id = g_quark_from_static_string (X_("stretchable")); DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for stretchable = %1\n", Properties::stretchable.property_id)); + Properties::isolated.property_id = g_quark_from_static_string (X_("isolated")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for isolated = %1\n", Properties::isolated.property_id)); } const int32_t TriggerBox::default_triggers_per_box = 8; @@ -2063,7 +2075,9 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp if (_active_scene >= 0) { DEBUG_TRACE (DEBUG::Triggers, string_compose ("tb noticed active scene %1\n", _active_scene)); if (_active_scene < (int32_t) all_triggers.size()) { - all_triggers[_active_scene]->bang (); + if (!all_triggers[_active_scene]->scene_isolated()) { + all_triggers[_active_scene]->bang (); + } } }