summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-06-17 11:48:51 +0000
committerCarl Hetherington <carl@carlh.net>2012-06-17 11:48:51 +0000
commit0c714fe3de350d2aed77f445d718e95ba9065b57 (patch)
tree18fcc54013d3ee00f53bccf073f0403ba29b2f84
parent00f51c6abfeb4aa35b4df5a280e6b07a4004957e (diff)
Simplify management of waveform visibility / shape / scale;
fixes #4727, I think. git-svn-id: svn://localhost/ardour2/branches/3.0@12743 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/audio_region_view.cc155
-rw-r--r--gtk2_ardour/audio_region_view.h15
-rw-r--r--gtk2_ardour/audio_streamview.cc51
-rw-r--r--gtk2_ardour/audio_streamview.h6
4 files changed, 47 insertions, 180 deletions
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index cb40dd8f9c..c3fc279991 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -83,9 +83,9 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
, end_xfade_out (0)
, end_xfade_rect (0)
, _amplitude_above_axis(1.0)
- , _flags(0)
, fade_color(0)
{
+ Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
}
AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
@@ -104,9 +104,9 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
, end_xfade_out (0)
, end_xfade_rect (0)
, _amplitude_above_axis(1.0)
- , _flags(0)
, fade_color(0)
{
+ Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
}
AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_ptr<AudioRegion> other_region)
@@ -123,7 +123,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
, end_xfade_out (0)
, end_xfade_rect (0)
, _amplitude_above_axis (other._amplitude_above_axis)
- , _flags (other._flags)
, fade_color(0)
{
Gdk::Color c;
@@ -133,6 +132,8 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
c.set_rgb_p (r/255.0, g/255.0, b/255.0);
init (c, true);
+
+ Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
}
void
@@ -143,17 +144,7 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
RegionView::init (basic_color, wfd);
- XMLNode *node;
-
_amplitude_above_axis = 1.0;
- _flags = 0;
-
- if ((node = _region->extra_xml ("GUI")) != 0) {
- set_flags (node);
- } else {
- _flags = WaveformVisible;
- store_flags ();
- }
compute_colors (basic_color);
@@ -230,6 +221,10 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
set_colors ();
+ setup_waveform_visibility ();
+ setup_waveform_shape ();
+ setup_waveform_scale ();
+
/* XXX sync mark drag? */
}
@@ -765,8 +760,8 @@ AudioRegionView::set_samples_per_unit (gdouble spu)
{
RegionView::set_samples_per_unit (spu);
- if (_flags & WaveformVisible) {
- for (uint32_t n=0; n < waves.size(); ++n) {
+ if (Config->get_show_waveforms ()) {
+ for (uint32_t n = 0; n < waves.size(); ++n) {
waves[n]->property_samples_per_unit() = spu;
}
}
@@ -818,25 +813,20 @@ AudioRegionView::set_colors ()
}
void
-AudioRegionView::set_waveform_visible (bool yn)
+AudioRegionView::setup_waveform_visibility ()
{
- if (((_flags & WaveformVisible) != yn)) {
- if (yn) {
- for (uint32_t n=0; n < waves.size(); ++n) {
- /* make sure the zoom level is correct, since we don't update
- this when waveforms are hidden.
- */
- waves[n]->property_samples_per_unit() = samples_per_unit;
- waves[n]->show();
- }
- _flags |= WaveformVisible;
- } else {
- for (uint32_t n=0; n < waves.size(); ++n) {
- waves[n]->hide();
- }
- _flags &= ~WaveformVisible;
+ if (Config->get_show_waveforms ()) {
+ for (uint32_t n = 0; n < waves.size(); ++n) {
+ /* make sure the zoom level is correct, since we don't update
+ this when waveforms are hidden.
+ */
+ waves[n]->property_samples_per_unit() = samples_per_unit;
+ waves[n]->show();
+ }
+ } else {
+ for (uint32_t n = 0; n < waves.size(); ++n) {
+ waves[n]->hide();
}
- store_flags ();
}
}
@@ -971,10 +961,10 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/)
wave->property_zero_color() = ARDOUR_UI::config()->canvasvar_ZeroLine.get();
wave->property_zero_line() = true;
wave->property_region_start() = _region->start();
- wave->property_rectified() = (bool) (_flags & WaveformRectified);
- wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
+ wave->property_rectified() = Config->get_waveform_shape() == Rectified;
+ wave->property_logscaled() = Config->get_waveform_scale() == Logarithmic;
- if (!(_flags & WaveformVisible)) {
+ if (!Config->get_show_waveforms ()) {
wave->hide();
}
@@ -1079,90 +1069,18 @@ AudioRegionView::remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent */*
}
void
-AudioRegionView::store_flags()
-{
- XMLNode *node = new XMLNode ("GUI");
-
- node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
- node->add_property ("waveform-rectified", (_flags & WaveformRectified) ? "yes" : "no");
- node->add_property ("waveform-logscaled", (_flags & WaveformLogScaled) ? "yes" : "no");
-
- _region->add_extra_xml (*node);
-}
-
-void
-AudioRegionView::set_flags (XMLNode* node)
-{
- XMLProperty *prop;
-
- if ((prop = node->property ("waveform-visible")) != 0) {
- if (string_is_affirmative (prop->value())) {
- _flags |= WaveformVisible;
- }
- }
-
- if ((prop = node->property ("waveform-rectified")) != 0) {
- if (string_is_affirmative (prop->value())) {
- _flags |= WaveformRectified;
- }
- }
-
- if ((prop = node->property ("waveform-logscaled")) != 0) {
- if (string_is_affirmative (prop->value())) {
- _flags |= WaveformLogScaled;
- }
- }
-}
-
-void
-AudioRegionView::set_waveform_shape (WaveformShape shape)
+AudioRegionView::setup_waveform_shape ()
{
- bool yn;
-
- /* this slightly odd approach is to leave the door open to
- other "shapes" such as spectral displays, etc.
- */
-
- switch (shape) {
- case Rectified:
- yn = true;
- break;
-
- default:
- yn = false;
- break;
- }
-
- if (yn != (bool) (_flags & WaveformRectified)) {
- for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
- (*wave)->property_rectified() = yn;
- }
-
- if (yn) {
- _flags |= WaveformRectified;
- } else {
- _flags &= ~WaveformRectified;
- }
- store_flags ();
+ for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
+ (*wave)->property_rectified() = Config->get_waveform_shape() == Rectified;
}
}
void
-AudioRegionView::set_waveform_scale (WaveformScale scale)
+AudioRegionView::setup_waveform_scale ()
{
- bool yn = (scale == Logarithmic);
-
- if (yn != (bool) (_flags & WaveformLogScaled)) {
- for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
- (*wave)->property_logscaled() = yn;
- }
-
- if (yn) {
- _flags |= WaveformLogScaled;
- } else {
- _flags &= ~WaveformLogScaled;
- }
- store_flags ();
+ for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
+ (*wave)->property_logscaled() = Config->get_waveform_scale() == Logarithmic;
}
}
@@ -1811,3 +1729,14 @@ AudioRegionView::drag_end ()
_hidden_xfades.clear ();
}
+void
+AudioRegionView::parameter_changed (string const & p)
+{
+ if (p == "show-waveforms") {
+ setup_waveform_visibility ();
+ } else if (p == "waveform-scale") {
+ setup_waveform_scale ();
+ } else if (p == "waveform-shape") {
+ setup_waveform_shape ();
+ }
+}
diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h
index ad5107c953..ee03fdbc80 100644
--- a/gtk2_ardour/audio_region_view.h
+++ b/gtk2_ardour/audio_region_view.h
@@ -80,13 +80,6 @@ class AudioRegionView : public RegionView
void unhide_envelope (); ///< Dangerous!
void update_envelope_visibility ();
- void set_waveform_visible (bool yn);
- void set_waveform_shape (ARDOUR::WaveformShape);
- void set_waveform_scale (ARDOUR::WaveformScale);
-
- bool waveform_rectified() const { return _flags & WaveformRectified; }
- bool waveform_logscaled() const { return _flags & WaveformLogScaled; }
- bool waveform_visible() const { return _flags & WaveformVisible; }
void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
@@ -165,7 +158,6 @@ class AudioRegionView : public RegionView
double _amplitude_above_axis;
- uint32_t _flags;
uint32_t fade_color;
void reset_fade_shapes ();
@@ -183,8 +175,6 @@ class AudioRegionView : public RegionView
void create_one_wave (uint32_t, bool);
void peaks_ready_handler (uint32_t);
- void set_flags (XMLNode *);
- void store_flags ();
void set_colors ();
void compute_colors (Gdk::Color const &);
@@ -203,6 +193,11 @@ class AudioRegionView : public RegionView
private:
void setup_fade_handle_positions ();
+ void parameter_changed (std::string const &);
+ void setup_waveform_visibility ();
+ void setup_waveform_shape ();
+ void setup_waveform_scale ();
+
/** A ScopedConnection for each PeaksReady callback (one per channel). Each member
* may be 0 if no connection exists.
*/
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 123cb5eb64..80ed198ab1 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -60,8 +60,6 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
{
color_handler ();
_amplitude_above_axis = 1.0;
-
- Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::parameter_changed, this, _1), gui_context());
}
int
@@ -132,10 +130,6 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
region_view->set_sensitive (false);
}
- region_view->set_waveform_scale (Config->get_waveform_scale ());
- region_view->set_waveform_shape (Config->get_waveform_shape ());
- region_view->set_waveform_visible (Config->get_show_waveforms ());
-
return region_view;
}
@@ -209,38 +203,6 @@ AudioStreamView::redisplay_track ()
}
void
-AudioStreamView::set_show_waveforms (bool yn)
-{
- for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
- if (arv) {
- arv->set_waveform_visible (yn);
- }
- }
-}
-
-void
-AudioStreamView::set_waveform_shape (WaveformShape shape)
-{
- for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
- if (arv)
- arv->set_waveform_shape (shape);
- }
-}
-
-void
-AudioStreamView::set_waveform_scale (WaveformScale scale)
-{
- for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
- if (arv) {
- arv->set_waveform_scale (scale);
- }
- }
-}
-
-void
AudioStreamView::setup_rec_box ()
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
@@ -572,16 +534,3 @@ AudioStreamView::color_handler ()
}
}
}
-
-void
-AudioStreamView::parameter_changed (string const & p)
-{
- if (p == "show-waveforms") {
- set_show_waveforms (Config->get_show_waveforms ());
- } else if (p == "waveform-scale") {
- set_waveform_scale (Config->get_waveform_scale ());
- } else if (p == "waveform-shape") {
- set_waveform_shape (Config->get_waveform_shape ());
- }
-}
-
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 18bc703650..a36c57b552 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -56,8 +56,6 @@ class AudioStreamView : public StreamView
int set_amplitude_above_axis (gdouble app);
gdouble get_amplitude_above_axis () { return _amplitude_above_axis; }
- void set_show_waveforms (bool yn);
-
void show_all_fades ();
void hide_all_fades ();
@@ -77,10 +75,6 @@ class AudioStreamView : public StreamView
void color_handler ();
- void parameter_changed (std::string const &);
- void set_waveform_shape (ARDOUR::WaveformShape);
- void set_waveform_scale (ARDOUR::WaveformScale);
-
double _amplitude_above_axis;
std::map<boost::shared_ptr<ARDOUR::Source>, bool> rec_data_ready_map;