Accessor for ClosedCaptionsDialog.
[dcpomatic.git] / src / wx / dcp_panel.cc
index 314081d3d35ec717f2791f0e29199336687304a4..c4a14a58b3a118bec1c36c4356aea4a1d1c84632 100644 (file)
@@ -29,6 +29,7 @@
 #include "check_box.h"
 #include "dcpomatic_button.h"
 #include "markers_dialog.h"
+#include "metadata_dialog.h"
 #include "lib/ratio.h"
 #include "lib/config.h"
 #include "lib/dcp_content_type.h"
@@ -65,6 +66,7 @@ using dcp::locale_convert;
 DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> viewer)
        : _audio_dialog (0)
        , _markers_dialog (0)
+       , _metadata_dialog (0)
        , _film (film)
        , _viewer (viewer)
        , _generally_sensitive (true)
@@ -119,6 +121,7 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v
        _upload_after_make_dcp = new CheckBox (_panel, _("Upload DCP to TMS after it is made"));
 
        _markers = new Button (_panel, _("Markers..."));
+       _metadata = new Button (_panel, _("Metadata..."));
 
        _notebook = new wxNotebook (_panel, wxID_ANY);
        _sizer->Add (_notebook, 1, wxEXPAND | wxTOP, 6);
@@ -139,6 +142,7 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v
        _standard->Bind              (wxEVT_CHOICE,   boost::bind (&DCPPanel::standard_changed, this));
        _upload_after_make_dcp->Bind (wxEVT_CHECKBOX, boost::bind (&DCPPanel::upload_after_make_dcp_changed, this));
        _markers->Bind               (wxEVT_BUTTON,   boost::bind (&DCPPanel::markers_clicked, this));
+       _metadata->Bind              (wxEVT_BUTTON,   boost::bind (&DCPPanel::metadata_clicked, this));
 
        BOOST_FOREACH (DCPContentType const * i, DCPContentType::all()) {
                _dcp_content_type->Append (std_to_wx (i->pretty_name ()));
@@ -221,6 +225,7 @@ DCPPanel::add_to_grid ()
        _standard->Show (full);
        _upload_after_make_dcp->Show (full);
        _markers->Show (full);
+       _metadata->Show (full);
        _reencode_j2k->Show (full);
        _encrypted->Show (full);
 
@@ -254,7 +259,10 @@ DCPPanel::add_to_grid ()
                _grid->Add (_upload_after_make_dcp, wxGBPosition (r, 0), wxGBSpan (1, 2));
                ++r;
 
-               _grid->Add (_markers, wxGBPosition(r, 0), wxGBSpan(1, 2));
+               wxBoxSizer* extra = new wxBoxSizer (wxHORIZONTAL);
+               extra->Add (_markers, 1, wxRIGHT, DCPOMATIC_SIZER_X_GAP);
+               extra->Add (_metadata, 1, wxRIGHT, DCPOMATIC_SIZER_X_GAP);
+               _grid->Add (extra, wxGBPosition(r, 0), wxGBSpan(1, 2));
                ++r;
        }
 }
@@ -388,6 +396,18 @@ DCPPanel::markers_clicked ()
        _markers_dialog->Show();
 }
 
+void
+DCPPanel::metadata_clicked ()
+{
+       if (_metadata_dialog) {
+               _metadata_dialog->Destroy ();
+               _metadata_dialog = 0;
+       }
+
+       _metadata_dialog = new MetadataDialog (_panel, _film);
+       _metadata_dialog->Show ();
+}
+
 void
 DCPPanel::film_changed (int p)
 {
@@ -435,6 +455,16 @@ DCPPanel::film_changed (int p)
        case Film::USE_ISDCF_NAME:
        {
                checked_set (_use_isdcf_name, _film->use_isdcf_name ());
+               if (_film->use_isdcf_name()) {
+                       /* We are going back to using an ISDCF name.  Remove anything after a _ in the current name,
+                          in case the user has clicked 'Copy as name' then re-ticked 'Use ISDCF name' (#1513).
+                       */
+                       string const name = _film->name ();
+                       string::size_type const u = name.find("_");
+                       if (u != string::npos) {
+                               _film->set_name (name.substr(0, u));
+                       }
+               }
                setup_dcp_name ();
                _edit_isdcf_button->Enable (_film->use_isdcf_name ());
                break;
@@ -591,6 +621,10 @@ DCPPanel::set_film (shared_ptr<Film> film)
                _markers_dialog->Destroy ();
                _markers_dialog = 0;
        }
+       if (_metadata_dialog) {
+               _metadata_dialog->Destroy ();
+               _metadata_dialog = 0;
+       }
 
        _film = film;
 
@@ -654,7 +688,8 @@ DCPPanel::setup_sensitivity ()
        _reel_type->Enable              (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->references_dcp_audio());
        _reel_length->Enable            (_generally_sensitive && _film && _film->reel_type() == REELTYPE_BY_LENGTH);
        _upload_after_make_dcp->Enable  (_generally_sensitive);
-       _markers->Enable                (_generally_sensitive);
+       _markers->Enable                (_generally_sensitive && _film && !_film->interop());
+       _metadata->Enable               (_generally_sensitive);
        _frame_rate_choice->Enable      (_generally_sensitive && _film && !_film->references_dcp_video());
        _frame_rate_spin->Enable        (_generally_sensitive && _film && !_film->references_dcp_video());
        _audio_channels->Enable         (_generally_sensitive && _film && !_film->references_dcp_audio());
@@ -748,6 +783,12 @@ DCPPanel::config_changed (Config::Property p)
                _audio_grid->Clear ();
                add_audio_panel_to_grid ();
                _audio_grid->Layout ();
+       } else if (p == Config::SHOW_EXPERIMENTAL_AUDIO_PROCESSORS) {
+               _audio_processor->Clear ();
+               add_audio_processors ();
+               if (_film) {
+                       film_changed (Film::AUDIO_PROCESSOR);
+               }
        }
 }
 
@@ -896,10 +937,10 @@ wxPanel *
 DCPPanel::make_audio_panel ()
 {
        wxPanel* panel = new wxPanel (_notebook);
-       wxSizer* sizer = new wxBoxSizer (wxVERTICAL);
+       _audio_panel_sizer = new wxBoxSizer (wxVERTICAL);
        _audio_grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
-       sizer->Add (_audio_grid, 0, wxALL, 8);
-       panel->SetSizer (sizer);
+       _audio_panel_sizer->Add (_audio_grid, 0, wxALL, 8);
+       panel->SetSizer (_audio_panel_sizer);
 
        _channels_label = create_label (panel, _("Channels"), true);
        _audio_channels = new wxChoice (panel, wxID_ANY);
@@ -907,10 +948,7 @@ DCPPanel::make_audio_panel ()
 
        _processor_label = create_label (panel, _("Processor"), true);
        _audio_processor = new wxChoice (panel, wxID_ANY);
-       _audio_processor->Append (_("None"), new wxStringClientData (N_("none")));
-       BOOST_FOREACH (AudioProcessor const * ap, AudioProcessor::all ()) {
-               _audio_processor->Append (std_to_wx (ap->name ()), new wxStringClientData (std_to_wx (ap->id ())));
-       }
+       add_audio_processors ();
 
        _show_audio = new Button (panel, _("Show audio..."));
 
@@ -1005,3 +1043,13 @@ DCPPanel::reel_length_changed ()
 
        _film->set_reel_length (_reel_length->GetValue() * 1000000000LL);
 }
+
+void
+DCPPanel::add_audio_processors ()
+{
+       _audio_processor->Append (_("None"), new wxStringClientData (N_("none")));
+       BOOST_FOREACH (AudioProcessor const * ap, AudioProcessor::visible()) {
+               _audio_processor->Append (std_to_wx(ap->name()), new wxStringClientData(std_to_wx(ap->id())));
+       }
+       _audio_panel_sizer->Layout();
+}