Make normalize cancel button work.
[ardour.git] / libs / ardour / audioregion.cc
index 4947f2ec3b5676d30b1e7fdc9dc06243b26f1523..be3b80de8717ddbc9aac5b92ddab09cdd0e4a263 100644 (file)
@@ -45,6 +45,7 @@
 #include "ardour/region_factory.h"
 #include "ardour/runtime_functions.h"
 #include "ardour/transient_detector.h"
+#include "ardour/progress.h"
 
 #include "i18n.h"
 #include <locale.h>
@@ -116,8 +117,10 @@ AudioRegion::init ()
 {
        register_properties ();
 
+       suspend_property_changes();
        set_default_fades ();
        set_default_envelope ();
+       resume_property_changes();
 
        listen_to_my_curves ();
        connect_to_analysis_changed ();
@@ -736,12 +739,12 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
        _fade_in->clear ();
 
        switch (shape) {
-       case Linear:
+       case FadeLinear:
                _fade_in->fast_simple_add (0.0, 0.0);
                _fade_in->fast_simple_add (len, 1.0);
                break;
 
-       case Fast:
+       case FadeFast:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.389401, 0.0333333);
                _fade_in->fast_simple_add (len * 0.629032, 0.0861111);
@@ -751,7 +754,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case Slow:
+       case FadeSlow:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.0207373, 0.197222);
                _fade_in->fast_simple_add (len * 0.0645161, 0.525);
@@ -762,7 +765,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case LogA:
+       case FadeLogA:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.0737327, 0.308333);
                _fade_in->fast_simple_add (len * 0.246544, 0.658333);
@@ -772,7 +775,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case LogB:
+       case FadeLogB:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.304147, 0.0694444);
                _fade_in->fast_simple_add (len * 0.529954, 0.152778);
@@ -784,6 +787,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
        }
 
         _fade_in->thaw ();
+       send_change (PropertyChange (Properties::fade_in));
 }
 
 void
@@ -803,7 +807,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
        _fade_out->clear ();
 
        switch (shape) {
-       case Fast:
+       case FadeFast:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.023041, 0.697222);
                _fade_out->fast_simple_add (len * 0.0553,   0.483333);
@@ -813,7 +817,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case LogA:
+       case FadeLogA:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.228111, 0.988889);
                _fade_out->fast_simple_add (len * 0.347926, 0.972222);
@@ -823,7 +827,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case Slow:
+       case FadeSlow:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.305556, 1);
                _fade_out->fast_simple_add (len * 0.548611, 0.991736);
@@ -833,7 +837,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case LogB:
+       case FadeLogB:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.080645, 0.730556);
                _fade_out->fast_simple_add (len * 0.277778, 0.289256);
@@ -842,13 +846,14 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case Linear:
+       case FadeLinear:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 1, 0);
                break;
        }
 
         _fade_out->thaw ();
+       send_change (PropertyChange (Properties::fade_in));
 }
 
 void
@@ -918,14 +923,14 @@ void
 AudioRegion::set_default_fade_in ()
 {
        _fade_in_suspended = 0;
-       set_fade_in (Linear, 64);
+       set_fade_in (FadeLinear, 64);
 }
 
 void
 AudioRegion::set_default_fade_out ()
 {
        _fade_out_suspended = 0;
-       set_fade_out (Linear, 64);
+       set_fade_out (FadeLinear, 64);
 }
 
 void
@@ -956,6 +961,8 @@ AudioRegion::recompute_at_end ()
        _envelope->truncate_end (_length);
        _envelope->set_max_xval (_length);
         _envelope->thaw ();
+       
+       suspend_property_changes();
 
         if (_left_of_split) {
                 set_default_fade_out ();
@@ -969,6 +976,8 @@ AudioRegion::recompute_at_end ()
                _fade_in->extend_to (_length);
                send_change (PropertyChange (Properties::fade_in));
        }
+       
+       resume_property_changes();
 }
 
 void
@@ -977,6 +986,8 @@ AudioRegion::recompute_at_start ()
        /* as above, but the shift was from the front */
 
        _envelope->truncate_start (_length);
+       
+       suspend_property_changes();
 
         if (_right_of_split) {
                 set_default_fade_in ();
@@ -990,6 +1001,8 @@ AudioRegion::recompute_at_start ()
                _fade_out->extend_to (_length);
                send_change (PropertyChange (Properties::fade_out));
        }
+       
+       resume_property_changes();
 }
 
 int
@@ -1130,9 +1143,11 @@ AudioRegion::set_scale_amplitude (gain_t g)
        send_change (PropertyChange (Properties::scale_amplitude));
 }
 
-/** @return the maximum (linear) amplitude of the region */
+/** @return the maximum (linear) amplitude of the region, or a -ve
+ *  number if the Progress object reports that the process was cancelled.
+ */
 double
-AudioRegion::maximum_amplitude () const
+AudioRegion::maximum_amplitude (Progress* p) const
 {
        framepos_t fpos = _start;
        framepos_t const fend = _start + _length;
@@ -1159,6 +1174,10 @@ AudioRegion::maximum_amplitude () const
                }
 
                fpos += to_read;
+               p->set_progress (float (fpos - _start) / _length);
+               if (p->cancelled ()) {
+                       return -1;
+               }
        }
 
        return maxamp;