Tweak label as suggested by Carsten.
[dcpomatic.git] / src / wx / audio_panel.cc
index fa086b8e35ce7f026901035b00852e695b6a5b00..fd63abf6ca050b9624e799db0438abb3d4be2dab 100644 (file)
@@ -53,8 +53,8 @@ AudioPanel::AudioPanel (ContentPanel* p)
 
        int r = 0;
 
-       _reference = new wxCheckBox (this, wxID_ANY, _("Refer to existing DCP"));
-       grid->Add (_reference, wxGBPosition (r, 0), wxGBSpan (1, 2));
+       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's audio as OV and make VF"));
+       grid->Add (_reference, wxGBPosition (r, 0), wxGBSpan (1, 3));
        ++r;
 
        _show = new wxButton (this, wxID_ANY, _("Show graph of audio levels..."));
@@ -111,9 +111,9 @@ AudioPanel::AudioPanel (ContentPanel* p)
        _gain->wrapped()->SetIncrement (0.5);
        _delay->wrapped()->SetRange (-1000, 1000);
 
-       _reference->Bind             (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AudioPanel::reference_clicked, this));
-       _show->Bind                  (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&AudioPanel::show_clicked, this));
-       _gain_calculate_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&AudioPanel::gain_calculate_button_clicked, this));
+       _reference->Bind             (wxEVT_CHECKBOX, boost::bind (&AudioPanel::reference_clicked, this));
+       _show->Bind                  (wxEVT_BUTTON,   boost::bind (&AudioPanel::show_clicked, this));
+       _gain_calculate_button->Bind (wxEVT_BUTTON,   boost::bind (&AudioPanel::gain_calculate_button_clicked, this));
 
        _mapping_connection = _mapping->Changed.connect (boost::bind (&AudioPanel::mapping_changed, this, _1));
 
@@ -141,7 +141,9 @@ AudioPanel::film_changed (Film::Property property)
                setup_description ();
                break;
        case Film::REEL_TYPE:
+       case Film::INTEROP:
                setup_sensitivity ();
+               break;
        default:
                break;
        }
@@ -160,7 +162,14 @@ AudioPanel::film_content_changed (int property)
                        int c = 0;
                        BOOST_FOREACH (shared_ptr<const AudioStream> i, ac.front()->audio->streams()) {
                                shared_ptr<const FFmpegAudioStream> f = dynamic_pointer_cast<const FFmpegAudioStream> (i);
-                               groups.push_back (AudioMappingView::Group (c, c + i->channels() - 1, f ? f->name : ""));
+                               string name = "";
+                               if (f) {
+                                       name = f->name;
+                                       if (f->codec_name) {
+                                               name += " (" + f->codec_name.get() + ")";
+                                       }
+                               }
+                               groups.push_back (AudioMappingView::Group (c, c + i->channels() - 1, name));
                                c += i->channels ();
                        }
                        _mapping->set_input_groups (groups);
@@ -265,17 +274,19 @@ AudioPanel::setup_sensitivity ()
        if (_reference->GetValue ()) {
                _gain->wrapped()->Enable (false);
                _gain_calculate_button->Enable (false);
+               _show->Enable (true);
                _peak->Enable (false);
                _delay->wrapped()->Enable (false);
                _mapping->Enable (false);
                _description->Enable (false);
        } else {
-               _gain->wrapped()->Enable (true);
+               _gain->wrapped()->Enable (sel.size() == 1);
                _gain_calculate_button->Enable (sel.size() == 1);
-               _peak->Enable (true);
-               _delay->wrapped()->Enable (true);
+               _show->Enable (sel.size() == 1);
+               _peak->Enable (sel.size() == 1);
+               _delay->wrapped()->Enable (sel.size() == 1);
                _mapping->Enable (sel.size() == 1);
-               _description->Enable (true);
+               _description->Enable (sel.size() == 1);
        }
 }
 
@@ -300,7 +311,7 @@ void
 AudioPanel::setup_peak ()
 {
        ContentList sel = _parent->selected_audio ();
-       bool alert = false;
+       optional<float> peak_dB;
 
        if (sel.size() != 1) {
                _peak->SetLabel (wxT (""));
@@ -309,15 +320,8 @@ AudioPanel::setup_peak ()
                playlist->add (sel.front ());
                try {
                        shared_ptr<AudioAnalysis> analysis (new AudioAnalysis (_parent->film()->audio_analysis_path (playlist)));
-                       if (analysis->sample_peak ()) {
-                               float const peak_dB = 20 * log10 (analysis->sample_peak().get()) + analysis->gain_correction (playlist);
-                               if (peak_dB > -3) {
-                                       alert = true;
-                               }
-                               _peak->SetLabel (wxString::Format (_("Peak: %.2fdB"), peak_dB));
-                       } else {
-                               _peak->SetLabel (_("Peak: unknown"));
-                       }
+                       peak_dB = 20 * log10 (analysis->overall_sample_peak().first.peak) + analysis->gain_correction (playlist);
+                       _peak->SetLabel (wxString::Format (_("Peak: %.2fdB"), *peak_dB));
                } catch (...) {
                        _peak->SetLabel (_("Peak: unknown"));
                }
@@ -325,8 +329,10 @@ AudioPanel::setup_peak ()
 
        static wxColour normal = _peak->GetForegroundColour ();
 
-       if (alert) {
+       if (peak_dB && *peak_dB > -0.5) {
                _peak->SetForegroundColour (wxColour (255, 0, 0));
+       } else if (peak_dB && *peak_dB > -3) {
+               _peak->SetForegroundColour (wxColour (186, 120, 0));
        } else {
                _peak->SetForegroundColour (normal);
        }
@@ -355,3 +361,13 @@ AudioPanel::reference_clicked ()
 
        d->set_reference_audio (_reference->GetValue ());
 }
+
+void
+AudioPanel::set_film (shared_ptr<Film>)
+{
+       /* We are changing film, so destroy any audio dialog for the old one */
+       if (_audio_dialog) {
+               _audio_dialog->Destroy ();
+               _audio_dialog = 0;
+       }
+}