Tidy up creation of analysis a bit.
[dcpomatic.git] / src / wx / film_editor.cc
index 634e417df4ccf01c14c02f783f4b5eb2abfa4a27..c9f83677c6da5db1cf7ef2168890538d4d810e5b 100644 (file)
@@ -45,6 +45,7 @@
 #include "sound_processor.h"
 #include "dci_metadata_dialog.h"
 #include "scaler.h"
+#include "audio_dialog.h"
 
 using std::string;
 using std::cout;
@@ -62,6 +63,7 @@ FilmEditor::FilmEditor (shared_ptr<Film> f, wxWindow* parent)
        : wxPanel (parent)
        , _film (f)
        , _generally_sensitive (true)
+       , _audio_dialog (0)
 {
        wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
        SetSizer (s);
@@ -124,7 +126,7 @@ FilmEditor::make_film_panel ()
        _dcp_content_type = new wxChoice (_film_panel, wxID_ANY);
        grid->Add (_dcp_content_type);
 
-       video_control (add_label_to_sizer (grid, _film_panel, _("Frames Per Second")));
+       video_control (add_label_to_sizer (grid, _film_panel, _("Original Frame Rate")));
        _frames_per_second = new wxStaticText (_film_panel, wxID_ANY, wxT (""));
        grid->Add (video_control (_frames_per_second), 1, wxALIGN_CENTER_VERTICAL);
        
@@ -204,6 +206,7 @@ FilmEditor::connect_to_widgets ()
        _audio_gain_calculate_button->Connect (
                wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::audio_gain_calculate_button_clicked), 0, this
                );
+       _show_audio->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::show_audio_clicked), 0, this);
        _audio_delay->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::audio_delay_changed), 0, this);
        _use_content_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
        _use_external_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
@@ -228,28 +231,21 @@ FilmEditor::make_video_panel ()
        _format = new wxChoice (_video_panel, wxID_ANY);
        grid->Add (_format);
 
-       {
-               add_label_to_sizer (grid, _video_panel, _("Crop"));
-               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+       add_label_to_sizer (grid, _video_panel, _("Left crop"));
+       _left_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
+       grid->Add (_left_crop);
 
-               /* TRANSLATORS: L, R, T and B are abbreviations for Left, Right, Top, Bottom, the four edges
-                  of the picture frame.
-               */
-               add_label_to_sizer (s, _video_panel, _("L"));
-               _left_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
-               s->Add (_left_crop, 0);
-               add_label_to_sizer (s, _video_panel, _("R"));
-               _right_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
-               s->Add (_right_crop, 0);
-               add_label_to_sizer (s, _video_panel, _("T"));
-               _top_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
-               s->Add (_top_crop, 0);
-               add_label_to_sizer (s, _video_panel, _("B"));
-               _bottom_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
-               s->Add (_bottom_crop, 0);
-
-               grid->Add (s);
-       }
+       add_label_to_sizer (grid, _video_panel, _("Right crop"));
+       _right_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
+       grid->Add (_right_crop);
+       
+       add_label_to_sizer (grid, _video_panel, _("Top crop"));
+       _top_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
+       grid->Add (_top_crop);
+       
+       add_label_to_sizer (grid, _video_panel, _("Bottom crop"));
+       _bottom_crop = new wxSpinCtrl (_video_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (64, -1));
+       grid->Add (_bottom_crop);
 
        /* VIDEO-only stuff */
        {
@@ -310,6 +306,10 @@ FilmEditor::make_audio_panel ()
        wxFlexGridSizer* grid = new wxFlexGridSizer (2, 4, 4);
        _audio_sizer->Add (grid, 0, wxALL, 8);
 
+       _show_audio = new wxButton (_audio_panel, wxID_ANY, _("Show Audio..."));
+       grid->Add (_show_audio, 1);
+       grid->AddSpacer (0);
+
        {
                video_control (add_label_to_sizer (grid, _audio_panel, _("Audio Gain")));
                wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
@@ -347,22 +347,8 @@ FilmEditor::make_audio_panel ()
        grid->Add (_use_external_audio);
        grid->AddSpacer (0);
 
-       assert (MAX_AUDIO_CHANNELS == 6);
-
-       /* TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
-          enhancement channel (sub-woofer)./
-       */
-       wxString const channels[] = {
-               _("Left"),
-               _("Right"),
-               _("Centre"),
-               _("Lfe (sub)"),
-               _("Left surround"),
-               _("Right surround"),
-       };
-
        for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) {
-               add_label_to_sizer (grid, _audio_panel, channels[i]);
+               add_label_to_sizer (grid, _audio_panel, audio_channel_name (i));
                _external_audio[i] = new wxFilePickerCtrl (_audio_panel, wxID_ANY, wxT (""), _("Select Audio File"), wxT ("*.wav"));
                grid->Add (_external_audio[i], 1, wxEXPAND);
        }
@@ -585,7 +571,7 @@ FilmEditor::film_changed (Film::Property p)
                } else {
                        checked_set (_format, n);
                }
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        }
        case Film::CROP:
@@ -608,8 +594,7 @@ FilmEditor::film_changed (Film::Property p)
        }
        case Film::NAME:
                checked_set (_name, _film->name());
-               _film->set_dci_date_today ();
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        case Film::FRAMES_PER_SECOND:
                s << fixed << setprecision(2) << _film->frames_per_second();
@@ -639,7 +624,7 @@ FilmEditor::film_changed (Film::Property p)
                break;
        case Film::DCP_CONTENT_TYPE:
                checked_set (_dcp_content_type, DCPContentType::as_index (_film->dcp_content_type ()));
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        case Film::DCP_AB:
                checked_set (_dcp_ab, _film->dcp_ab ());
@@ -665,7 +650,7 @@ FilmEditor::film_changed (Film::Property p)
        case Film::WITH_SUBTITLES:
                checked_set (_with_subtitles, _film->with_subtitles ());
                setup_subtitle_control_sensitivity ();
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        case Film::SUBTITLE_OFFSET:
                checked_set (_subtitle_offset, _film->subtitle_offset ());
@@ -681,23 +666,23 @@ FilmEditor::film_changed (Film::Property p)
                break;
        case Film::USE_DCI_NAME:
                checked_set (_use_dci_name, _film->use_dci_name ());
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        case Film::DCI_METADATA:
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                break;
        case Film::CONTENT_AUDIO_STREAM:
                if (_film->content_audio_stream()) {
                        checked_set (_audio_stream, _film->content_audio_stream()->to_string());
                }
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                setup_audio_details ();
                setup_audio_control_sensitivity ();
                break;
        case Film::USE_CONTENT_AUDIO:
                checked_set (_use_content_audio, _film->use_content_audio());
                checked_set (_use_external_audio, !_film->use_content_audio());
-               _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+               setup_dcp_name ();
                setup_audio_details ();
                setup_audio_control_sensitivity ();
                break;
@@ -764,6 +749,10 @@ FilmEditor::set_film (shared_ptr<Film> f)
        } else {
                FileChanged ("");
        }
+
+       if (_audio_dialog) {
+               _audio_dialog->set_film (_film);
+       }
        
        film_changed (Film::NAME);
        film_changed (Film::USE_DCI_NAME);
@@ -825,6 +814,7 @@ FilmEditor::set_things_sensitive (bool s)
        _j2k_bandwidth->Enable (s);
        _audio_gain->Enable (s);
        _audio_gain_calculate_button->Enable (s);
+       _show_audio->Enable (s);
        _audio_delay->Enable (s);
        _still_duration->Enable (s);
 
@@ -1171,3 +1161,28 @@ FilmEditor::external_audio_changed (wxCommandEvent &)
 
        _film->set_external_audio (a);
 }
+
+void
+FilmEditor::setup_dcp_name ()
+{
+       string s = _film->dcp_name (true);
+       if (s.length() > 28) {
+               _dcp_name->SetLabel (std_to_wx (s.substr (0, 28) + "..."));
+               _dcp_name->SetToolTip (std_to_wx (s));
+       } else {
+               _dcp_name->SetLabel (std_to_wx (s));
+       }
+}
+
+void
+FilmEditor::show_audio_clicked (wxCommandEvent &)
+{
+       if (_audio_dialog) {
+               _audio_dialog->Destroy ();
+               _audio_dialog = 0;
+       }
+       
+       _audio_dialog = new AudioDialog (this);
+       _audio_dialog->Show ();
+       _audio_dialog->set_film (_film);
+}