More GL build fixes.
[dcpomatic.git] / src / wx / dcp_panel.cc
index ded073152e40e1a14fe9e4e66729f82a16d4e33c..b938ed87dd83322b096bd47a809641bf10bc41ff 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -27,6 +27,9 @@
 #include "check_box.h"
 #include "static_text.h"
 #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"
@@ -57,11 +60,15 @@ using std::max;
 using std::make_pair;
 using boost::lexical_cast;
 using boost::shared_ptr;
+using boost::weak_ptr;
 using dcp::locale_convert;
 
-DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
+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)
 {
        _panel = new wxPanel (n);
@@ -76,8 +83,8 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
        FocusManager::instance()->add(_name);
 
        _use_isdcf_name = new CheckBox (_panel, _("Use ISDCF name"));
-       _edit_isdcf_button = new wxButton (_panel, wxID_ANY, _("Details..."));
-       _copy_isdcf_name_button = new wxButton (_panel, wxID_ANY, _("Copy as name"));
+       _edit_isdcf_button = new Button (_panel, _("Details..."));
+       _copy_isdcf_name_button = new Button (_panel, _("Copy as name"));
 
        /* wxST_ELLIPSIZE_MIDDLE works around a bug in GTK2 and/or wxWidgets, see
           http://trac.wxwidgets.org/ticket/12539
@@ -99,7 +106,7 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
 
        _key_label = create_label (_panel, _("Key"), true);
        _key = new StaticText (_panel, "", wxDefaultPosition, size);
-       _edit_key = new wxButton (_panel, wxID_ANY, _("Edit..."));
+       _edit_key = new Button (_panel, _("Edit..."));
 
        _reels_label = create_label (_panel, _("Reels"), true);
        _reel_type = new wxChoice (_panel, wxID_ANY);
@@ -113,6 +120,9 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
 
        _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);
 
@@ -131,6 +141,8 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
        _reel_length->Bind           (wxEVT_SPINCTRL, boost::bind (&DCPPanel::reel_length_changed, this));
        _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 ()));
@@ -212,6 +224,8 @@ DCPPanel::add_to_grid ()
        _standard_label->Show (full);
        _standard->Show (full);
        _upload_after_make_dcp->Show (full);
+       _markers->Show (full);
+       _metadata->Show (full);
        _reencode_j2k->Show (full);
        _encrypted->Show (full);
 
@@ -244,6 +258,12 @@ DCPPanel::add_to_grid ()
 
                _grid->Add (_upload_after_make_dcp, wxGBPosition (r, 0), wxGBSpan (1, 2));
                ++r;
+
+               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;
        }
 }
 
@@ -306,9 +326,10 @@ DCPPanel::frame_rate_choice_changed ()
        }
 
        _film->set_video_frame_rate (
-               boost::lexical_cast<int> (
-                       wx_to_std (_frame_rate_choice->GetString (_frame_rate_choice->GetSelection ()))
-                       )
+               boost::lexical_cast<int>(
+                       wx_to_std(_frame_rate_choice->GetString(_frame_rate_choice->GetSelection()))
+                       ),
+               true
                );
 }
 
@@ -363,6 +384,30 @@ DCPPanel::upload_after_make_dcp_changed ()
        _film->set_upload_after_make_dcp (_upload_after_make_dcp->GetValue ());
 }
 
+void
+DCPPanel::markers_clicked ()
+{
+       if (_markers_dialog) {
+               _markers_dialog->Destroy ();
+               _markers_dialog = 0;
+       }
+
+       _markers_dialog = new MarkersDialog (_panel, _film, _viewer);
+       _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)
 {
@@ -456,6 +501,7 @@ DCPPanel::film_changed (int p)
        case Film::INTEROP:
                checked_set (_standard, _film->interop() ? 1 : 0);
                setup_dcp_name ();
+               _markers->Enable (!_film->interop());
                break;
        case Film::AUDIO_PROCESSOR:
                if (_film->audio_processor ()) {
@@ -556,14 +602,29 @@ DCPPanel::dcp_content_type_changed ()
 void
 DCPPanel::set_film (shared_ptr<Film> film)
 {
-       /* We are changing film, so destroy any audio dialog for the old one */
+       /* We are changing film, so destroy any dialogs for the old one */
        if (_audio_dialog) {
                _audio_dialog->Destroy ();
                _audio_dialog = 0;
        }
+       if (_markers_dialog) {
+               _markers_dialog->Destroy ();
+               _markers_dialog = 0;
+       }
+       if (_metadata_dialog) {
+               _metadata_dialog->Destroy ();
+               _metadata_dialog = 0;
+       }
 
        _film = film;
 
+       if (!_film) {
+               /* Really should all the film_changed below but this might be enough */
+               checked_set (_dcp_name, wxT(""));
+               set_general_sensitivity (false);
+               return;
+       }
+
        film_changed (Film::NAME);
        film_changed (Film::USE_ISDCF_NAME);
        film_changed (Film::CONTENT);
@@ -617,6 +678,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 && _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());
@@ -627,6 +690,8 @@ DCPPanel::setup_sensitivity ()
        _resolution->Enable             (_generally_sensitive && _film && !_film->references_dcp_video());
        _three_d->Enable                (_generally_sensitive && _film && !_film->references_dcp_video());
        _standard->Enable               (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->references_dcp_audio());
+       _reencode_j2k->Enable           (_generally_sensitive && _film);
+       _show_audio->Enable             (_generally_sensitive && _film);
 }
 
 void
@@ -748,7 +813,7 @@ DCPPanel::make_video_panel ()
        _frame_rate_spin = new wxSpinCtrl (panel, wxID_ANY);
        _frame_rate_sizer->Add (_frame_rate_spin, 1, wxALIGN_CENTER_VERTICAL);
        setup_frame_rate_widget ();
-       _best_frame_rate = new wxButton (panel, wxID_ANY, _("Use best"));
+       _best_frame_rate = new Button (panel, _("Use best"));
        _frame_rate_sizer->Add (_best_frame_rate, 1, wxALIGN_CENTER_VERTICAL);
 
        _three_d = new CheckBox (panel, _("3D"));
@@ -872,7 +937,7 @@ DCPPanel::make_audio_panel ()
                _audio_processor->Append (std_to_wx (ap->name ()), new wxStringClientData (std_to_wx (ap->id ())));
        }
 
-       _show_audio = new wxButton (panel, wxID_ANY, _("Show audio..."));
+       _show_audio = new Button (panel, _("Show audio..."));
 
        _audio_channels->Bind (wxEVT_CHOICE, boost::bind (&DCPPanel::audio_channels_changed, this));
        _audio_processor->Bind (wxEVT_CHOICE, boost::bind (&DCPPanel::audio_processor_changed, this));