summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-10-27 14:22:24 +0000
committerCarl Hetherington <carl@carlh.net>2010-10-27 14:22:24 +0000
commit935aeb55dd5fbce9fb9b1dd7770834b3b684a6d1 (patch)
tree7542f39e75c0f2acf614ba8a6ad5656cd74b5f7a /gtk2_ardour
parent8f448a78cd4263b5b9e55a2c2a8858e8cb6488b4 (diff)
Use ProgressReporter class for normalization. Report progress for individual regions. Fix crash on normalising a single region (#3510).
git-svn-id: svn://localhost/ardour2/branches/3.0@7924 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_ops.cc23
-rw-r--r--gtk2_ardour/normalize_dialog.cc14
-rw-r--r--gtk2_ardour/normalize_dialog.h6
-rw-r--r--gtk2_ardour/progress_reporter.h5
4 files changed, 31 insertions, 17 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index f84f8f5d34..a07f1dccec 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -4509,12 +4509,14 @@ Editor::normalize_region ()
set_canvas_cursor (wait_cursor);
gdk_flush ();
+ /* XXX: this should really count only audio regions */
+
int tasks = rs.size ();
if (!dialog.normalize_individually()) {
tasks *= 2;
}
- int n = 0;
+ int n = 1;
double maxamp = 0;
if (!dialog.normalize_individually()) {
@@ -4523,8 +4525,12 @@ Editor::normalize_region ()
if (!arv) {
continue;
}
- maxamp = max (maxamp, arv->audio_region()->maximum_amplitude ());
- dialog.set_progress (double (n) / tasks);
+
+ dialog.descend (1.0 / tasks);
+ maxamp = max (maxamp, arv->audio_region()->maximum_amplitude (&dialog));
+ dialog.ascend ();
+
+ dialog.set_progress (float (n) / tasks);
++n;
}
}
@@ -4536,12 +4542,17 @@ Editor::normalize_region ()
}
arv->region()->clear_changes ();
- double const amp = dialog.normalize_individually () ? arv->audio_region()->maximum_amplitude () : maxamp;
-
+ double amp = maxamp;
+ if (dialog.normalize_individually()) {
+ dialog.descend (1.0 / tasks);
+ amp = arv->audio_region()->maximum_amplitude (&dialog);
+ dialog.ascend ();
+ }
+
arv->audio_region()->normalize (amp, dialog.target ());
_session->add_command (new StatefulDiffCommand (arv->region()));
- dialog.set_progress (double (n) / tasks);
+ dialog.set_progress (float (n) / tasks);
++n;
}
diff --git a/gtk2_ardour/normalize_dialog.cc b/gtk2_ardour/normalize_dialog.cc
index 088c123433..2c2077a085 100644
--- a/gtk2_ardour/normalize_dialog.cc
+++ b/gtk2_ardour/normalize_dialog.cc
@@ -56,11 +56,11 @@ NormalizeDialog::NormalizeDialog (bool more_than_one)
vbox->pack_start (*b);
get_vbox()->pack_start (*vbox);
-
- _progress_bar = manage (new ProgressBar);
- get_vbox()->pack_start (*_progress_bar);
}
+ _progress_bar = manage (new ProgressBar);
+ get_vbox()->pack_start (*_progress_bar);
+
show_all ();
add_button (Stock::CANCEL, RESPONSE_CANCEL);
@@ -71,7 +71,7 @@ bool
NormalizeDialog::normalize_individually () const
{
if (_normalize_individually == 0) {
- return false;
+ return true;
}
return _normalize_individually->get_active ();
@@ -84,11 +84,7 @@ 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 ();
- }
}
diff --git a/gtk2_ardour/normalize_dialog.h b/gtk2_ardour/normalize_dialog.h
index 38ad6d0bf3..26bac98003 100644
--- a/gtk2_ardour/normalize_dialog.h
+++ b/gtk2_ardour/normalize_dialog.h
@@ -18,6 +18,7 @@
*/
#include "ardour_dialog.h"
+#include "progress_reporter.h"
namespace Gtk {
class RadioButton;
@@ -25,16 +26,17 @@ namespace Gtk {
class ProgressBar;
}
-class NormalizeDialog : public ArdourDialog
+class NormalizeDialog : public ArdourDialog, public ProgressReporter
{
public:
NormalizeDialog (bool);
bool normalize_individually () const;
double target () const;
- void set_progress (double);
private:
+ void update_progress_gui (float);
+
Gtk::RadioButton* _normalize_individually;
Gtk::SpinButton* _spin;
Gtk::ProgressBar* _progress_bar;
diff --git a/gtk2_ardour/progress_reporter.h b/gtk2_ardour/progress_reporter.h
index 6426f8f1aa..0fbabf5d23 100644
--- a/gtk2_ardour/progress_reporter.h
+++ b/gtk2_ardour/progress_reporter.h
@@ -17,6 +17,9 @@
*/
+#ifndef __ardour_progress_reporter_h__
+#define __ardour_progress_reporter_h__
+
#include "ardour/progress.h"
/** A parent class for classes which can report progress on something */
@@ -34,3 +37,5 @@ private:
*/
virtual void update_progress_gui (float p) = 0;
};
+
+#endif