diff options
Diffstat (limited to 'src/wx/audio_dialog.cc')
| -rw-r--r-- | src/wx/audio_dialog.cc | 62 |
1 files changed, 46 insertions, 16 deletions
diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 32864ca15..89b04409a 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -17,6 +17,7 @@ */ +#include <boost/filesystem.hpp> #include "audio_dialog.h" #include "audio_plot.h" #include "audio_analysis.h" @@ -24,8 +25,9 @@ #include "wx_util.h" using boost::shared_ptr; +using boost::bind; -AudioDialog::AudioDialog (wxWindow* parent, boost::shared_ptr<Film> film) +AudioDialog::AudioDialog (wxWindow* parent) : wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) , _plot (0) { @@ -42,8 +44,6 @@ AudioDialog::AudioDialog (wxWindow* parent, boost::shared_ptr<Film> film) sizer->Add (table); - set_film (film); - SetSizer (sizer); sizer->Layout (); sizer->SetSizeHints (this); @@ -54,27 +54,48 @@ AudioDialog::AudioDialog (wxWindow* parent, boost::shared_ptr<Film> film) void AudioDialog::set_film (boost::shared_ptr<Film> f) { - _film_connection.disconnect (); - _film = f; + _film_changed_connection.disconnect (); + _film_audio_analysis_finished_connection.disconnect (); - shared_ptr<AudioAnalysis> a; + _film = f; - try { - a.reset (new AudioAnalysis (f->audio_analysis_path ())); - } catch (...) { + try_to_load_analysis (); + setup_channels (); - } - - _plot->set_analysis (a); + _channel->SetSelection (0); + _film_changed_connection = _film->Changed.connect (bind (&AudioDialog::film_changed, this, _1)); + _film_audio_analysis_finished_connection = _film->AudioAnalysisFinished.connect (bind (&AudioDialog::try_to_load_analysis, this)); +} + +void +AudioDialog::setup_channels () +{ _channel->Clear (); - for (int i = 0; i < f->audio_stream()->channels(); ++i) { + + if (!_film->audio_stream()) { + return; + } + + for (int i = 0; i < _film->audio_stream()->channels(); ++i) { _channel->Append (audio_channel_name (i)); } +} - _channel->SetSelection (0); +void +AudioDialog::try_to_load_analysis () +{ + shared_ptr<AudioAnalysis> a; - _film_connection = f->Changed.connect (bind (&AudioDialog::film_changed, this, _1)); + if (boost::filesystem::exists (_film->audio_analysis_path())) { + a.reset (new AudioAnalysis (_film->audio_analysis_path ())); + } else { + if (IsShown ()) { + _film->analyse_audio (); + } + } + + _plot->set_analysis (a); } void @@ -86,7 +107,16 @@ AudioDialog::channel_changed (wxCommandEvent &) void AudioDialog::film_changed (Film::Property p) { - if (p == Film::AUDIO_GAIN) { + switch (p) { + case Film::AUDIO_GAIN: _plot->set_gain (_film->audio_gain ()); + break; + case Film::CONTENT_AUDIO_STREAM: + case Film::EXTERNAL_AUDIO: + case Film::USE_CONTENT_AUDIO: + setup_channels (); + break; + default: + break; } } |
