some fixes/improvements for track selection; add upload target to manual makefile...
[ardour.git] / gtk2_ardour / audio_region_view.cc
index 9892eb47cc1726211f393d299189dc4ffc783782..ba5b9a1ce115f9cc38a470e3686f2afb54f2a377 100644 (file)
@@ -31,6 +31,7 @@
 #include <ardour/audiosource.h>
 #include <ardour/audio_diskstream.h>
 #include <pbd/memento_command.h>
+#include <pbd/stacktrace.h>
 
 #include "streamview.h"
 #include "audio_region_view.h"
@@ -161,8 +162,6 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
                gain_line->show ();
        }
 
-       reset_width_dependent_items ((double) _region->length() / samples_per_unit);
-
        gain_line->reset ();
 
        set_height (trackview.height);
@@ -250,19 +249,6 @@ AudioRegionView::fade_out_changed ()
 {
        reset_fade_out_shape ();
 }
-
-void
-AudioRegionView::set_fade_in_active (bool yn)
-{
-       audio_region()->set_fade_in_active (yn);
-}
-
-void
-AudioRegionView::set_fade_out_active (bool yn)
-{
-       audio_region()->set_fade_out_active (yn);
-}
-
 void
 AudioRegionView::fade_in_active_changed ()
 {
@@ -680,8 +666,8 @@ AudioRegionView::show_region_editor ()
                // trackview.editor.ensure_float (*editor);
        } 
 
-       editor->show_all ();
-       editor->get_window()->raise();
+       editor->present ();
+       editor->show_all();
 }
 
 void
@@ -751,7 +737,7 @@ AudioRegionView::create_waves ()
        for (uint32_t n = 0; n < nchans; ++n) {
                tmp_waves.push_back (0);
        }
-       
+
        for (uint32_t n = 0; n < nchans; ++n) {
                
                if (n >= audio_region()->n_channels()) {
@@ -816,6 +802,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();
@@ -840,7 +828,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
                        break;
                }
        }
-       
+
        if (n == nwaves && waves.empty()) {
                /* all waves are ready */
                tmp_waves.resize(nwaves);
@@ -848,6 +836,9 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
                waves = tmp_waves;
                tmp_waves.clear ();
 
+               /* all waves created, don't hook into peaks ready anymore */
+               data_ready_connection.disconnect ();            
+
                if (!zero_line) {
                        zero_line = new ArdourCanvas::SimpleLine (*group);
                        zero_line->property_x1() = (gdouble) 1.0;
@@ -862,11 +853,6 @@ void
 AudioRegionView::peaks_ready_handler (uint32_t which)
 {
        Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &AudioRegionView::create_one_wave), which, false));
-
-       if (!waves.empty()) {
-               /* all waves created, don't hook into peaks ready anymore */
-               data_ready_connection.disconnect ();            
-       }
 }
 
 void
@@ -904,12 +890,11 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
        trackview.session().begin_reversible_command (_("add gain control point"));
        XMLNode &before = audio_region()->envelope().get_state();
 
-
        if (!audio_region()->envelope_active()) {
-               XMLNode &before = audio_region()->get_state();
+               XMLNode &region_before = audio_region()->get_state();
                audio_region()->set_envelope_active(true);
-               XMLNode &after = audio_region()->get_state();
-               trackview.session().add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &before, &after));
+               XMLNode &region_after = audio_region()->get_state();
+               trackview.session().add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after));
        }
 
        audio_region()->envelope().add (fx, y);
@@ -933,6 +918,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);
 }
@@ -953,6 +940,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
@@ -992,9 +991,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)
 {