Another stab at the logic for selecting regions for operations, to ensure that edit...
[ardour.git] / gtk2_ardour / normalize_dialog.cc
index 088c12343308813dbce99ae6481ee72a30389739..12cc84a7f161efa04685c81e03e1d2a066018d39 100644 (file)
@@ -27,6 +27,7 @@
 using namespace Gtk;
 
 double NormalizeDialog::_last_normalization_value = 0;
+bool NormalizeDialog::_last_normalize_individually = true;
 
 NormalizeDialog::NormalizeDialog (bool more_than_one)
        : ArdourDialog (more_than_one ? _("Normalize regions") : _("Normalize region"))
@@ -55,23 +56,28 @@ NormalizeDialog::NormalizeDialog (bool more_than_one)
                RadioButton* b = manage (new RadioButton (group, _("Normalize each region using the peak value of all regions")));
                vbox->pack_start (*b);
 
-               get_vbox()->pack_start (*vbox);
+               _normalize_individually->set_active (_last_normalize_individually);
+               b->set_active (!_last_normalize_individually);
 
-               _progress_bar = manage (new ProgressBar);
-               get_vbox()->pack_start (*_progress_bar);
+               get_vbox()->pack_start (*vbox);
        }
 
+       _progress_bar = manage (new ProgressBar);
+       get_vbox()->pack_start (*_progress_bar);
+
        show_all ();
        
        add_button (Stock::CANCEL, RESPONSE_CANCEL);
        add_button (_("Normalize"), RESPONSE_ACCEPT);
+
+       signal_response().connect (sigc::mem_fun (*this, &NormalizeDialog::button_clicked));
 }
 
 bool
 NormalizeDialog::normalize_individually () const
 {
        if (_normalize_individually == 0) {
-               return false;
+               return true;
        }
 
        return _normalize_individually->get_active ();
@@ -84,11 +90,26 @@ NormalizeDialog::target () const
 }
 
 void
-NormalizeDialog::set_progress (double p)
+NormalizeDialog::update_progress_gui (float p)
 {
        _progress_bar->set_fraction (p);
+}
 
-       while (gtk_events_pending()) {
-               gtk_main_iteration ();
+int
+NormalizeDialog::run ()
+{
+       int const r = ArdourDialog::run ();
+       _last_normalization_value = target ();
+       if (_normalize_individually) {
+               _last_normalize_individually = _normalize_individually->get_active ();
+       }
+       return r;
+}
+
+void
+NormalizeDialog::button_clicked (int r)
+{
+       if (r == RESPONSE_CANCEL) {
+               cancel ();
        }
 }