X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_advanced_dialog.cc;h=5b4650141697e2172dee10866bc64534f93d1086;hb=60874f7b18adfc95493e94f6f8cd44773f7afe7b;hp=d170032a4798be99b6bd47da71419dfc29624994;hpb=bd7f4bbde17d2087ba4c4bddf6439b3df869b1db;p=dcpomatic.git diff --git a/src/wx/content_advanced_dialog.cc b/src/wx/content_advanced_dialog.cc index d170032a4..5b4650141 100644 --- a/src/wx/content_advanced_dialog.cc +++ b/src/wx/content_advanced_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2020 Carl Hetherington + Copyright (C) 2020-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -22,6 +22,7 @@ #include "content_advanced_dialog.h" #include "dcpomatic_button.h" #include "filter_dialog.h" +#include "language_tag_widget.h" #include "static_text.h" #include "wx_util.h" #include "lib/content.h" @@ -42,9 +43,9 @@ DCPOMATIC_ENABLE_WARNINGS using std::string; using std::vector; using boost::bind; -using boost::dynamic_pointer_cast; +using std::dynamic_pointer_cast; using boost::optional; -using boost::shared_ptr; +using std::shared_ptr; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif @@ -56,12 +57,12 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrAdd (_filters, 1, wxALL | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); filters->Add (_filters_button, 0, wxALL, DCPOMATIC_SIZER_GAP); sizer->Add (filters, wxGBPosition(r, 1), wxGBSpan(1, 2)); @@ -89,13 +90,21 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrAdd (_set_video_frame_rate, wxGBPosition(r, 2)); ++r; - wxCheckBox* ignore_video = new wxCheckBox (this, wxID_ANY, _("Ignore this content's video and use only audio, subtitles and closed captions")); + /// TRANSLATORS: next to this control is a language selector, so together they will read, for example + /// "Video has burnt-in subtitles in the language fr-FR" + _burnt_subtitle = new wxCheckBox (this, wxID_ANY, _("Video has burnt-in subtitles in the language")); + sizer->Add (_burnt_subtitle, wxGBPosition(r, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + _burnt_subtitle_language = new LanguageTagWidget (this, _("Language of burnt-in subtitles in this content"), content->video ? content->video->burnt_subtitle_language() : boost::none); + sizer->Add (_burnt_subtitle_language->sizer(), wxGBPosition(r, 1), wxGBSpan(1, 2), wxEXPAND); + ++r; + + auto ignore_video = new wxCheckBox (this, wxID_ANY, _("Ignore this content's video and use only audio, subtitles and closed captions")); sizer->Add (ignore_video, wxGBPosition(r, 0), wxGBSpan(1, 3)); ++r; - wxSizer* overall = new wxBoxSizer (wxVERTICAL); + auto overall = new wxBoxSizer (wxVERTICAL); overall->Add (sizer, 1, wxALL, DCPOMATIC_DIALOG_BORDER); - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); + auto buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); if (buttons) { overall->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } @@ -110,15 +119,22 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrEnable (!single_frame_image_content); _video_frame_rate->Enable (!single_frame_image_content); - optional vfr = _content->video_frame_rate (); + auto vfr = _content->video_frame_rate (); if (vfr) { _video_frame_rate->SetValue (std_to_wx(locale_convert(*vfr))); } + _burnt_subtitle->SetValue (_content->video && static_cast(_content->video->burnt_subtitle_language())); + _burnt_subtitle_language->set (_content->video ? _content->video->burnt_subtitle_language() : boost::none); + ignore_video->Bind (wxEVT_CHECKBOX, bind(&ContentAdvancedDialog::ignore_video_changed, this, _1)); _filters_button->Bind (wxEVT_BUTTON, bind(&ContentAdvancedDialog::edit_filters, this)); _set_video_frame_rate->Bind (wxEVT_BUTTON, bind(&ContentAdvancedDialog::set_video_frame_rate, this)); _video_frame_rate->Bind (wxEVT_TEXT, boost::bind(&ContentAdvancedDialog::video_frame_rate_changed, this)); + _burnt_subtitle->Bind (wxEVT_CHECKBOX, boost::bind(&ContentAdvancedDialog::burnt_subtitle_changed, this)); + _burnt_subtitle_language->Changed.connect (boost::bind(&ContentAdvancedDialog::burnt_subtitle_language_changed, this)); + + setup_sensitivity (); } @@ -134,7 +150,7 @@ ContentAdvancedDialog::ignore_video_changed (wxCommandEvent& ev) void ContentAdvancedDialog::setup_filters () { - shared_ptr fcs = dynamic_pointer_cast(_content); + auto fcs = dynamic_pointer_cast(_content); if (!fcs) { checked_set (_filters, _("None")); _filters->Enable (false); @@ -142,7 +158,7 @@ ContentAdvancedDialog::setup_filters () return; } - string p = Filter::ffmpeg_string (fcs->filters()); + auto p = Filter::ffmpeg_string (fcs->filters()); if (p.empty()) { checked_set (_filters, _("None")); } else { @@ -157,12 +173,12 @@ ContentAdvancedDialog::setup_filters () void ContentAdvancedDialog::edit_filters () { - shared_ptr fcs = dynamic_pointer_cast(_content); + auto fcs = dynamic_pointer_cast(_content); if (!fcs) { return; } - FilterDialog* d = new FilterDialog (this, fcs->filters()); + auto d = new FilterDialog (this, fcs->filters()); d->ActiveChanged.connect (bind(&ContentAdvancedDialog::filters_changed, this, _1)); d->ShowModal (); d->Destroy (); @@ -172,7 +188,7 @@ ContentAdvancedDialog::edit_filters () void ContentAdvancedDialog::filters_changed (vector filters) { - shared_ptr fcs = dynamic_pointer_cast(_content); + auto fcs = dynamic_pointer_cast(_content); if (!fcs) { return; } @@ -209,3 +225,26 @@ ContentAdvancedDialog::video_frame_rate_changed () _set_video_frame_rate->Enable (enable); } + +void +ContentAdvancedDialog::setup_sensitivity () +{ + _burnt_subtitle->Enable (static_cast(_content->video)); + _burnt_subtitle_language->enable (_content->video && _burnt_subtitle->GetValue()); +} + + +void +ContentAdvancedDialog::burnt_subtitle_changed () +{ + setup_sensitivity (); +} + + +void +ContentAdvancedDialog::burnt_subtitle_language_changed () +{ + DCPOMATIC_ASSERT (_content->video); + _content->video->set_burnt_subtitle_language (_burnt_subtitle_language->get()); +} +