From bc60f7492f809b3f463dee2be377d957a9f06b7e Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 18 Dec 2022 20:58:05 -0700 Subject: [PATCH] automation stream view now creates VelocityRegionView when appropriate --- gtk2_ardour/automation_streamview.cc | 74 +++++++++++++++++++--------- gtk2_ardour/automation_streamview.h | 2 +- gtk2_ardour/wscript | 1 + 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc index f3dacd322b..e2316c0a11 100644 --- a/gtk2_ardour/automation_streamview.cc +++ b/gtk2_ardour/automation_streamview.cc @@ -44,6 +44,8 @@ #include "rgb_macros.h" #include "selection.h" #include "ui_config.h" +#include "velocity_region_view.h" +#include "velocity_time_axis.h" #include "pbd/i18n.h" @@ -92,30 +94,52 @@ AutomationStreamView::add_region_view_internal (std::shared_ptr region, } } - AutomationRegionView *region_view; - std::list::iterator i; + RegionView *region_view; - for (i = region_views.begin(); i != region_views.end(); ++i) { - if ((*i)->region() == region) { + if (_automation_view.parameter().type() == MidiVelocityAutomation) { - /* great. we already have an AutomationRegionView for this Region. use it again. */ - AutomationRegionView* arv = dynamic_cast(*i);; + for (auto const & rv : region_views) { + if (rv->region() == region) { - if (arv->line()) { - arv->line()->set_list (list); + /* great. we already have an AutomationRegionView for this Region. use it again. */ + // VelocityRegionView* vrv = dynamic_cast(rv); + + // if (vrv->line()) { + // vrv->line()->set_list (list); + // } + rv->set_valid (true); + //display_region (vrv); + + return 0; } - (*i)->set_valid (true); - display_region (arv); - - return 0; } - } - region_view = new AutomationRegionView ( - _canvas_group, _automation_view, region, - _automation_view.parameter (), list, - _samples_per_pixel, region_color - ); + region_view = new VelocityRegionView (_canvas_group, *(dynamic_cast(&_automation_view)), region, list, _samples_per_pixel, region_color); + + } else { + + for (auto const & rv : region_views) { + if (rv->region() == region) { + + /* great. we already have an AutomationRegionView for this Region. use it again. */ + AutomationRegionView* arv = dynamic_cast(rv);; + + if (arv->line()) { + arv->line()->set_list (list); + } + rv->set_valid (true); + display_region (arv); + + return 0; + } + } + + region_view = new AutomationRegionView ( + _canvas_group, _automation_view, region, + _automation_view.parameter (), list, + _samples_per_pixel, region_color + ); + } region_view->init (false); region_views.push_front (region_view); @@ -128,9 +152,11 @@ AutomationStreamView::add_region_view_internal (std::shared_ptr region, region->DropReferences.connect (*this, invalidator (*this), boost::bind (&AutomationStreamView::remove_region_view, this, std::weak_ptr(region)), gui_context()); /* setup automation state for this region */ - std::shared_ptr line = region_view->line (); - if (line && line->the_list()) { - line->the_list()->set_automation_state (automation_state ()); + if (_automation_view.parameter().type() != MidiVelocityAutomation) { + std::shared_ptr line = dynamic_cast(region_view)->line (); + if (line && line->the_list()) { + line->the_list()->set_automation_state (automation_state ()); + } } RegionViewAdded (region_view); @@ -139,9 +165,11 @@ AutomationStreamView::add_region_view_internal (std::shared_ptr region, } void -AutomationStreamView::display_region(AutomationRegionView* region_view) +AutomationStreamView::display_region (RegionView* region_view) { - region_view->line().reset(); + if (_automation_view.parameter().type() != MidiVelocityAutomation) { + dynamic_cast(region_view)->line().reset(); + } } void diff --git a/gtk2_ardour/automation_streamview.h b/gtk2_ardour/automation_streamview.h index ceabe76f5b..c5265b9557 100644 --- a/gtk2_ardour/automation_streamview.h +++ b/gtk2_ardour/automation_streamview.h @@ -77,7 +77,7 @@ private: void setup_rec_box (); RegionView* add_region_view_internal (std::shared_ptr, bool wait_for_data, bool recording = false); - void display_region(AutomationRegionView* region_view); + void display_region (RegionView* region_view); void color_handler (); diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index fc8efd0b7b..d0a6b4f868 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -342,6 +342,7 @@ gtk2_ardour_sources = [ 'video_monitor.cc', 'transcode_ffmpeg.cc', 'transcode_video_dialog.cc', + 'velocity_region_view.cc', 'velocity_time_axis.cc', 'video_server_dialog.cc', 'utils_videotl.cc',