From 8aad90382e725c1ace8807106fcbfad572213d1c Mon Sep 17 00:00:00 2001 From: GZharun Date: Thu, 25 Dec 2014 14:32:40 +0200 Subject: [PATCH] [Summary] Added support for showing sample rate label on region when session sample rate differs. --- gtk2_ardour/audio_region_view.cc | 61 ++++++++++++++++++++++++++++++ gtk2_ardour/audio_region_view.h | 3 ++ gtk2_ardour/audio_streamview.cc | 7 ---- gtk2_ardour/time_axis_view_item.cc | 32 ---------------- gtk2_ardour/time_axis_view_item.h | 8 ++-- 5 files changed, 67 insertions(+), 44 deletions(-) diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index 33d80924a1..dc8f58c529 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -32,6 +32,7 @@ #include "ardour/audiosource.h" #include "ardour/profile.h" #include "ardour/session.h" +#include "ardour/engine_state_controller.h" #include "pbd/memento_command.h" #include "pbd/stacktrace.h" @@ -216,6 +217,13 @@ AudioRegionView::init (bool wfd) } /* XXX sync mark drag? */ + + update_ioconfig_label (); + update_sample_rate_label (); + + EngineStateController::instance()->EngineRunning.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::update_sample_rate_label, this), gui_context() ); + + EngineStateController::instance()->SampleRateChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::update_sample_rate_label, this), gui_context() ); } AudioRegionView::~AudioRegionView () @@ -336,6 +344,59 @@ AudioRegionView::region_renamed () set_name_text (str); } +void +AudioRegionView::update_sample_rate_label () +{ + boost::shared_ptr aregion = audio_region(); + + if (!aregion) { + set_sr_text(""); + return; + } + + framecnt_t region_sr = aregion->audio_source()->sample_rate(); + framecnt_t system_sr = EngineStateController::instance()->get_current_sample_rate(); + + if (region_sr != system_sr) { + std::ostringstream ss; + ss << (float)region_sr/1000.0; + std::string sample_rate_str(ss.str() ); + set_sr_text(sample_rate_str); + } else { + set_sr_text(""); + } +} + +void +AudioRegionView::update_ioconfig_label () +{ + boost::shared_ptr aregion = audio_region(); + + if (!aregion) { + set_sr_text(""); + return; + } + + uint32_t chan_count = aregion->get_related_audio_file_channel_count(); + std::string label; + + switch (chan_count ) { + case 1: + label = "M"; + break; + case 2: + label = "ST"; + break; + default: + std::ostringstream ss; + ss << chan_count; + label = ss.str(); + break; + } + + set_ioconfig_text (label); +} + void AudioRegionView::region_resized (const PropertyChange& what_changed) { diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index 0aab4b4a1d..28aefc28ac 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -184,6 +184,9 @@ class AudioRegionView : public RegionView void region_scale_amplitude_changed (); void region_renamed (); + void update_sample_rate_label (); + void update_ioconfig_label (); + void create_one_wave (uint32_t, bool); void peaks_ready_handler (uint32_t); diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index ab86fdfcbc..842274746d 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -121,13 +121,6 @@ AudioStreamView::create_region_view (boost::shared_ptr r, bool wait_for_ region_view->init (wait_for_waves); region_view->set_amplitude_above_axis(_amplitude_above_axis); region_view->set_height (child_height ()); - - region_view->set_io_channels_config_for_label (region->get_related_audio_file_channel_count() ); - region_view->set_sample_rate_for_label(region->audio_source()->sample_rate() ); - - /* if its the special single-sample length that we use for rec-regions, make it - insensitive to events - */ if (region->length() == 1) { region_view->set_sensitive (false); diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index e99a4d8592..b060181fda 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -649,38 +649,6 @@ TimeAxisViewItem::set_name_text(const string& new_name) manage_name_highlight(); } -void -TimeAxisViewItem::set_io_channels_config_for_label (uint32_t chan_count) -{ - std::string label; - - switch (chan_count ) { - case 1: - label = "M"; - break; - case 2: - label = "ST"; - break; - default: - std::ostringstream ss; - ss << chan_count; - label = ss.str(); - break; - } - - set_ioconfig_text (label); -} - -void -TimeAxisViewItem::set_sample_rate_for_label (framecnt_t sr) -{ - std::ostringstream ss; - ss << (float)sr/1000.0; - std::string sample_rate_str(ss.str()); - set_sr_text(sample_rate_str); -} - - void TimeAxisViewItem::set_ioconfig_text(const string& new_io_text) { diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h index 0da10d6477..c3fc296014 100644 --- a/gtk2_ardour/time_axis_view_item.h +++ b/gtk2_ardour/time_axis_view_item.h @@ -70,8 +70,6 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList bool sensitive () const { return _sensitive; } TimeAxisView& get_time_axis_view () const; void set_name_text(const std::string&); - void set_io_channels_config_for_label (uint32_t); - void set_sample_rate_for_label (framecnt_t); virtual void set_height(double h); virtual double height() const { return _height; } void set_y (double); @@ -195,6 +193,9 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList virtual void set_frame_gradient (); void set_trim_handle_colors(); + void set_ioconfig_text(const std::string&); + void set_sr_text(const std::string&s); + virtual void reset_width_dependent_items (double); static gint idle_remove_this_item(TimeAxisViewItem*, void*); @@ -293,9 +294,6 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList private: double _width; - - void set_ioconfig_text(const std::string&); - void set_sr_text(const std::string&s); void parameter_changed (std::string); void manage_name_highlight ();