diff --git a/gtk2_ardour/audio_trigger_properties_box.cc b/gtk2_ardour/audio_trigger_properties_box.cc index 1ad20a968e..7f3f0870ea 100644 --- a/gtk2_ardour/audio_trigger_properties_box.cc +++ b/gtk2_ardour/audio_trigger_properties_box.cc @@ -44,6 +44,35 @@ using namespace ArdourWidgets; using std::max; using std::min; +void +TriggerPropertiesBox::set_trigger (TriggerReference tr) +{ + tref = tr; + tref.trigger()->PropertyChanged.connect (_state_connection, invalidator (*this), boost::bind (&TriggerPropertiesBox::trigger_changed, this, _1), gui_context ()); + tref.box->TriggerSwapped.connect (trigger_swap_connection, MISSING_INVALIDATOR, boost::bind (&TriggerPropertiesBox::trigger_swap, this, _1), gui_context ()); + + PBD::PropertyChange changed; + changed.add (ARDOUR::Properties::name); + changed.add (ARDOUR::Properties::running); + trigger_changed (changed); +} + +void +TriggerPropertiesBox::trigger_swap (uint32_t n) +{ + if (n != tref.slot) { + /* some other slot in the same box got swapped. we don't care */ + return; + } + _state_connection.disconnect (); + tref.trigger()->PropertyChanged.connect (_state_connection, invalidator (*this), boost::bind (&TriggerPropertiesBox::trigger_changed, this, _1), gui_context ()); + + PBD::PropertyChange changed; + changed.add (ARDOUR::Properties::name); + changed.add (ARDOUR::Properties::running); + trigger_changed (changed); +} + AudioTriggerPropertiesBox::AudioTriggerPropertiesBox () : _length_clock (X_("regionlength"), true, "", true, false, true) , _start_clock (X_("regionstart"), true, "", false, false) @@ -179,13 +208,7 @@ AudioTriggerPropertiesBox::set_trigger (ARDOUR::TriggerReference tr) return; } - tref = tr; - tref.trigger()->PropertyChanged.connect (_state_connection, invalidator (*this), boost::bind (&AudioTriggerPropertiesBox::trigger_changed, this, _1), gui_context ()); - - PBD::PropertyChange changed; - changed.add (ARDOUR::Properties::name); - changed.add (ARDOUR::Properties::running); - trigger_changed (changed); + TriggerPropertiesBox::set_trigger (tr); } void diff --git a/gtk2_ardour/audio_trigger_properties_box.h b/gtk2_ardour/audio_trigger_properties_box.h index 11956ac6e4..1c6c3d62f3 100644 --- a/gtk2_ardour/audio_trigger_properties_box.h +++ b/gtk2_ardour/audio_trigger_properties_box.h @@ -38,6 +38,16 @@ public: ~TriggerPropertiesBox () {} virtual void set_trigger (ARDOUR::TriggerReference) = 0; + +protected: + ARDOUR::TriggerReference tref; + Gtk::Label _header_label; + + virtual void trigger_changed (const PBD::PropertyChange& what_changed) = 0; + void trigger_swap (uint32_t); + + PBD::ScopedConnection _state_connection; + PBD::ScopedConnection trigger_swap_connection; }; class AudioTriggerPropertiesBox : public TriggerPropertiesBox @@ -51,14 +61,10 @@ public: void set_session (ARDOUR::Session*); protected: + void toggle_stretch (); void trigger_changed (const PBD::PropertyChange& what_changed); - void toggle_stretch (); - - Gtk::Label _header_label; - private: - ARDOUR::TriggerReference tref; Gtk::Table _table; Gtk::Label _abpm_label; @@ -76,7 +82,6 @@ private: ArdourWidgets::ArdourButton _gain_control; ArdourWidgets::ArdourButton _stretch_selector; - PBD::ScopedConnection _state_connection; }; #endif diff --git a/gtk2_ardour/midi_trigger_properties_box.cc b/gtk2_ardour/midi_trigger_properties_box.cc index b5122ded74..1a2508936d 100644 --- a/gtk2_ardour/midi_trigger_properties_box.cc +++ b/gtk2_ardour/midi_trigger_properties_box.cc @@ -79,7 +79,7 @@ MidiTriggerPropertiesBox::~MidiTriggerPropertiesBox () } void -MidiTriggerPropertiesBox::set_trigger (ARDOUR::TriggerReference tref) +MidiTriggerPropertiesBox::set_trigger (ARDOUR::TriggerReference tr) { boost::shared_ptr midi_trigger = boost::dynamic_pointer_cast (tref.trigger()); @@ -87,12 +87,7 @@ MidiTriggerPropertiesBox::set_trigger (ARDOUR::TriggerReference tref) return; } - tref.trigger()->PropertyChanged.connect (_midi_state_connection, invalidator (*this), boost::bind (&MidiTriggerPropertiesBox::trigger_changed, this, _1), gui_context ()); - - PBD::PropertyChange changed; - changed.add (ARDOUR::Properties::name); - changed.add (ARDOUR::Properties::running); - trigger_changed (changed); + TriggerPropertiesBox::set_trigger (tr); } void diff --git a/gtk2_ardour/midi_trigger_properties_box.h b/gtk2_ardour/midi_trigger_properties_box.h index 600aaf40c5..cce5d8d1f6 100644 --- a/gtk2_ardour/midi_trigger_properties_box.h +++ b/gtk2_ardour/midi_trigger_properties_box.h @@ -34,16 +34,13 @@ public: void set_trigger (ARDOUR::TriggerReference); -private: +protected: void trigger_changed (const PBD::PropertyChange& what_changed); - boost::shared_ptr _trigger; - - Gtk::Label _header_label; +private: ArdourWidgets::ArdourButton _patch_enable_button; ArdourWidgets::ArdourButton _cc_enable_button; - PBD::ScopedConnection _midi_state_connection; }; #endif diff --git a/gtk2_ardour/trigger_ui.cc b/gtk2_ardour/trigger_ui.cc index 82db34c59f..2dd4e73cdc 100644 --- a/gtk2_ardour/trigger_ui.cc +++ b/gtk2_ardour/trigger_ui.cc @@ -789,6 +789,5 @@ TriggerUI::set_trigger (ARDOUR::TriggerReference tr) trigger_changed (pc); trigger()->PropertyChanged.connect (trigger_connections, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context()); - tref.box->TriggerSwapped.connect (trigger_swap_connection, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_swap, this, _1), gui_context ()); }