From 1961a9207c3369da5f093c0b0b42f32d74db2ce4 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 2 Oct 2024 13:46:59 -0600 Subject: [PATCH] provide a better method to decide if a trigger(slot) is occupied This is necessary with clip recording because for some short time after recording, a trigger may be playable despite not yet having a region. GUI edition. --- gtk2_ardour/editor_audio_import.cc | 2 +- gtk2_ardour/editor_export_audio.cc | 2 +- gtk2_ardour/editor_ops.cc | 2 +- gtk2_ardour/slot_properties_box.cc | 8 ++++---- gtk2_ardour/trigger_page.cc | 6 +++--- gtk2_ardour/triggerbox_ui.cc | 18 +++++++++--------- 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 8583daac56..78215f9b28 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -1115,7 +1115,7 @@ Editor::finish_bringing_in_material (std::shared_ptr region, if (mode == ImportAsTrigger) { std::shared_ptr copy (RegionFactory::create (region, true)); for (int s = 0; s < TriggerBox::default_triggers_per_box; ++s) { - if (!existing_track->triggerbox ()->trigger (s)->region ()) { + if (!existing_track->triggerbox ()->trigger (s)->playable ()) { existing_track->triggerbox ()->set_from_selection (s, copy); #if 1 /* assume drop from sidebar */ ARDOUR_UI_UTILS::copy_patch_changes (_session->the_auditioner (), existing_track->triggerbox ()->trigger (s)); diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index 533035e16a..85d3ec2596 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -417,7 +417,7 @@ Editor::bounce_region_selection (bool with_processing) if (!track) { continue; } - if (track->triggerbox()->trigger(trigger_slot)->region()) { + if (track->triggerbox()->trigger(trigger_slot)->playable()) { overwriting = true; } } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index be1dae137f..ae0c15928c 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4527,7 +4527,7 @@ Editor::bounce_range_selection (BounceTarget target, bool with_processing) if (!track) { continue; } - if (track->triggerbox()->trigger(trigger_slot)->region()) { + if (track->triggerbox()->trigger(trigger_slot)->playable()) { overwriting = true; } } diff --git a/gtk2_ardour/slot_properties_box.cc b/gtk2_ardour/slot_properties_box.cc index 9621be9804..811826c9fa 100644 --- a/gtk2_ardour/slot_properties_box.cc +++ b/gtk2_ardour/slot_properties_box.cc @@ -745,15 +745,15 @@ SlotPropertyWindow::SlotPropertyWindow (TriggerReference tref) int col = 0; table->attach(*slot_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; - if (trigger->region()) { - if (trigger->region()->data_type() == DataType::AUDIO) { + if (trigger->the_region()) { + if (trigger->the_region()->data_type() == DataType::AUDIO) { _trig_box = manage(new AudioTriggerPropertiesBox ()); _ops_box = manage(new AudioRegionOperationsBox ()); _trim_box = manage(new AudioClipEditorBox ()); _trig_box->set_trigger (tref); - _trim_box->set_region(trigger->region(), tref); - _ops_box->set_session(&trigger->region()->session()); + _trim_box->set_region(trigger->the_region(), tref); + _ops_box->set_session(&trigger->the_region()->session()); table->attach(*_trig_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; table->attach(*_ops_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index 0de81ff41a..6890c49775 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -404,15 +404,15 @@ TriggerPage::selection_changed () _slot_prop_box.set_slot (ref); _slot_prop_box.show (); - if (trigger->region ()) { - if (trigger->region ()->data_type () == DataType::AUDIO) { + if (trigger->the_region ()) { + if (trigger->the_region ()->data_type () == DataType::AUDIO) { _audio_trig_box.set_trigger (ref); _audio_trig_box.show (); } else { _midi_trig_box.set_trigger (ref); _midi_trig_box.show (); - std::shared_ptr mr = std::dynamic_pointer_cast (trigger->region()); + std::shared_ptr mr = std::dynamic_pointer_cast (trigger->the_region()); if (mr) { std::shared_ptr mt = std::dynamic_pointer_cast (entry->strip().stripable()); _midi_editor->set_region (mt, ref.slot(), mr); diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index 3c872605ad..2dd6cf8961 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -315,7 +315,7 @@ TriggerEntry::draw_launch_icon (Cairo::RefPtr context, float sz, bool active = trigger ()->active (); - if (!trigger ()->region ()) { + if (!trigger ()->playable ()) { bool solid = false; context->arc (margin + (size * 0.75), margin + (size * 0.75), (size * 0.75), 0., 360.0 * (M_PI/180.0)); @@ -533,7 +533,7 @@ TriggerEntry::render (ArdourCanvas::Rect const& area, Cairo::RefPtrregion () && trigger ()->will_follow ()) { + if (trigger ()->playable () && trigger ()->will_follow ()) { context->set_identity_matrix (); context->translate (self.x0, self.y0 - 0.5); context->translate (width - height, 0); // right side of the widget @@ -546,7 +546,7 @@ void TriggerEntry::on_trigger_changed (PropertyChange const& change) { if (change.contains (ARDOUR::Properties::name)) { - if (trigger ()->region ()) { + if (trigger ()->playable ()) { name_text->set (short_version (trigger ()->name (), 16)); } else { name_text->set (""); @@ -672,7 +672,7 @@ TriggerEntry::name_button_event (GdkEvent* ev) bool TriggerEntry::play_button_event (GdkEvent* ev) { - if (!trigger ()->region ()) { + if (!trigger ()->playable ()) { /* empty slot; this is just a stop button */ switch (ev->type) { case GDK_BUTTON_PRESS: @@ -781,7 +781,7 @@ TriggerEntry::follow_button_event (GdkEvent* ev) bool TriggerEntry::event (GdkEvent* ev) { - if (!trigger ()->region ()) { + if (!trigger ()->playable ()) { return false; } @@ -877,7 +877,7 @@ TriggerEntry::drag_begin (Glib::RefPtr const& context) /* ctx leaves scope, cr is destroyed, and pixmap surface is flush()ed */ } - std::shared_ptr region = trigger ()->region (); + std::shared_ptr region = trigger ()->the_region (); if (region) { PublicEditor::instance ().pbdid_dragged_dt = region->data_type (); } else { @@ -905,7 +905,7 @@ TriggerEntry::drag_data_get (Glib::RefPtr const&, Gtk::Selecti return; } if (data.get_target () == "x-ardour/region.pbdid") { - std::shared_ptr region = trigger ()->region (); + std::shared_ptr region = trigger ()->the_region (); if (region) { data.set (data.get_target (), region->id ().to_s ()); } @@ -1100,8 +1100,8 @@ TriggerBoxUI::drag_data_received (Glib::RefPtr const& context, Trigger::UIState *state = new Trigger::UIState(); source->get_ui_state(*state); std::shared_ptr state_p (state); - _triggerbox.enqueue_trigger_state_for_region(source->region(), state_p); - _triggerbox.set_from_selection (n, source->region()); + _triggerbox.enqueue_trigger_state_for_region(source->the_region(), state_p); + _triggerbox.set_from_selection (n, source->the_region()); context->drag_finish (true, false, time); } else { context->drag_finish (false, false, time);