added logarithmic option for waveform scaling. added save/restore of rectified and...
[ardour.git] / gtk2_ardour / audio_region_view.cc
index dd2f972970081081ff14d6d9b5902455506bc834..02debbaf8abf02bf9a121504a654962819a7c531 100644 (file)
@@ -851,6 +851,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
        wave->property_amplitude_above_axis() =  _amplitude_above_axis;
        wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
        wave->property_region_start() = _region->start();
+       wave->property_rectified() = (bool) (_flags & WaveformRectified);
+       wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
 
        if (!(_flags & WaveformVisible)) {
                wave->hide();
@@ -965,6 +967,8 @@ AudioRegionView::store_flags()
 
        node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
        node->add_property ("envelope-visible", (_flags & EnvelopeVisible) ? "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);
 }
@@ -985,6 +989,18 @@ AudioRegionView::set_flags (XMLNode* node)
                        _flags |= EnvelopeVisible;
                }
        }
+
+       if ((prop = node->property ("waveform-rectified")) != 0) {
+               if (prop->value() == "yes") {
+                       _flags |= WaveformRectified;
+               }
+       }
+
+       if ((prop = node->property ("waveform-logscaled")) != 0) {
+               if (prop->value() == "yes") {
+                       _flags |= WaveformLogScaled;
+               }
+       }
 }
        
 void
@@ -1024,9 +1040,30 @@ AudioRegionView::set_waveform_shape (WaveformShape shape)
                } else {
                        _flags &= ~WaveformRectified;
                }
+               store_flags ();
+       }
+}
+
+void
+AudioRegionView::set_waveform_scale (WaveformScale scale)
+{
+       bool yn = (scale == LogWaveform);
+
+       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 ();
        }
 }
 
+
 GhostRegion*
 AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
 {