X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fmetadata_dialog.cc;h=644c0546b0de6681dab0d4ea1ec7c6461216062b;hb=7ec6c86c913fba820870565ee757fdf43ae47433;hp=75b2eff6996af8329e31a6773388ab58a6351f39;hpb=8d9e73b753ed51067d93aa377bb24400ff22936e;p=dcpomatic.git diff --git a/src/wx/metadata_dialog.cc b/src/wx/metadata_dialog.cc index 75b2eff69..644c0546b 100644 --- a/src/wx/metadata_dialog.cc +++ b/src/wx/metadata_dialog.cc @@ -21,13 +21,18 @@ #include "dcpomatic_button.h" #include "full_language_tag_dialog.h" +#include "language_tag_widget.h" #include "metadata_dialog.h" #include "wx_util.h" #include "lib/film.h" -#include -#include +#include +LIBDCP_DISABLE_WARNINGS #include +#include #include +LIBDCP_ENABLE_WARNINGS +#include +#include using std::weak_ptr; @@ -72,26 +77,35 @@ MetadataDialog::setup () overall_sizer->Layout (); overall_sizer->SetSizeHints (this); + _sign_language_video_language->Changed.connect (boost::bind(&MetadataDialog::sign_language_video_language_changed, this)); _edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&MetadataDialog::edit_release_territory, this)); _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_release_territory_changed, this)); _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_facility_changed, this)); _facility->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::facility_changed, this)); _enable_studio->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_studio_changed, this)); _studio->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::studio_changed, this)); + _enable_chain->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_chain_changed, this)); + _chain->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::chain_changed, this)); _temp_version->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::temp_version_changed, this)); _pre_release->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::pre_release_changed, this)); _red_band->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::red_band_changed, this)); _two_d_version_of_three_d->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::two_d_version_of_three_d_changed, this)); + _enable_luminance->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_luminance_changed, this)); + _luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&MetadataDialog::luminance_changed, this)); + _luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&MetadataDialog::luminance_changed, this)); _film_changed_connection = film()->Change.connect(boost::bind(&MetadataDialog::film_changed, this, _1, _2)); film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY); + film_changed (ChangeType::DONE, Film::Property::SIGN_LANGUAGE_VIDEO_LANGUAGE); film_changed (ChangeType::DONE, Film::Property::FACILITY); film_changed (ChangeType::DONE, Film::Property::STUDIO); film_changed (ChangeType::DONE, Film::Property::TEMP_VERSION); film_changed (ChangeType::DONE, Film::Property::PRE_RELEASE); film_changed (ChangeType::DONE, Film::Property::RED_BAND); film_changed (ChangeType::DONE, Film::Property::TWO_D_VERSION_OF_THREE_D); + film_changed (ChangeType::DONE, Film::Property::CHAIN); + film_changed (ChangeType::DONE, Film::Property::LUMINANCE); setup_sensitivity (); } @@ -104,7 +118,9 @@ MetadataDialog::film_changed (ChangeType type, Film::Property property) return; } - if (property == Film::Property::RELEASE_TERRITORY) { + if (property == Film::Property::SIGN_LANGUAGE_VIDEO_LANGUAGE) { + _sign_language_video_language->set (film()->sign_language_video_language()); + } else if (property == Film::Property::RELEASE_TERRITORY) { auto rt = film()->release_territory(); checked_set (_enable_release_territory, static_cast(rt)); if (rt) { @@ -121,6 +137,11 @@ MetadataDialog::film_changed (ChangeType type, Film::Property property) if (film()->studio()) { checked_set (_studio, *film()->studio()); } + } else if (property == Film::Property::CHAIN) { + checked_set (_enable_chain, static_cast(film()->chain())); + if (film()->chain()) { + checked_set (_chain, *film()->chain()); + } } else if (property == Film::Property::TEMP_VERSION) { checked_set (_temp_version, film()->temp_version()); } else if (property == Film::Property::PRE_RELEASE) { @@ -129,6 +150,22 @@ MetadataDialog::film_changed (ChangeType type, Film::Property property) checked_set (_red_band, film()->red_band()); } else if (property == Film::Property::TWO_D_VERSION_OF_THREE_D) { checked_set (_two_d_version_of_three_d, film()->two_d_version_of_three_d()); + } else if (property == Film::Property::LUMINANCE) { + auto lum = film()->luminance(); + checked_set (_enable_luminance, static_cast(lum)); + if (lum) { + checked_set (_luminance_value, lum->value()); + switch (lum->unit()) { + case dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE: + checked_set (_luminance_unit, 0); + break; + case dcp::Luminance::Unit::FOOT_LAMBERT: + checked_set (_luminance_unit, 1); + break; + } + } else { + checked_set (_luminance_unit, 1); + } } } @@ -167,11 +204,15 @@ MetadataDialog::edit_release_territory () void MetadataDialog::setup_sensitivity () { + _sign_language_video_language->enable (film()->has_sign_language_video_channel()); auto const enabled = _enable_release_territory->GetValue(); _release_territory_text->Enable (enabled); _edit_release_territory->Enable (enabled); _facility->Enable (_enable_facility->GetValue()); + _chain->Enable (_enable_chain->GetValue()); _studio->Enable (_enable_studio->GetValue()); + _luminance_value->Enable (_enable_luminance->GetValue()); + _luminance_unit->Enable (_enable_luminance->GetValue()); } @@ -190,6 +231,10 @@ MetadataDialog::enable_release_territory_changed () void MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) { + add_label_to_sizer (sizer, panel, _("Sign language video language"), true, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT); + _sign_language_video_language = new LanguageTagWidget (panel, _("Language used for any sign language video track"), {}, {}); + sizer->Add (_sign_language_video_language->sizer(), 1, wxEXPAND); + _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility")); sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); _facility = new wxTextCtrl (panel, wxID_ANY); @@ -200,6 +245,11 @@ MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) _studio = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_studio, 1, wxEXPAND); + _enable_chain = new wxCheckBox (panel, wxID_ANY, _("Chain")); + sizer->Add (_enable_chain, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _chain = new wxTextCtrl (panel, wxID_ANY); + sizer->Add (_chain, 1, wxEXPAND); + _temp_version = new wxCheckBox (panel, wxID_ANY, _("Temporary version")); sizer->Add (_temp_version, 0, wxALIGN_CENTER_VERTICAL); sizer->AddSpacer (0); @@ -215,6 +265,24 @@ MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) _two_d_version_of_three_d = new wxCheckBox (panel, wxID_ANY, _("2D version of 3D DCP")); sizer->Add (_two_d_version_of_three_d, 0, wxALIGN_CENTER_VERTICAL); sizer->AddSpacer (0); + + _enable_luminance = new wxCheckBox (panel, wxID_ANY, _("Luminance")); + sizer->Add (_enable_luminance, 0, wxALIGN_CENTER_VERTICAL); + { + auto s = new wxBoxSizer (wxHORIZONTAL); + _luminance_value = new wxSpinCtrlDouble (panel, wxID_ANY); + _luminance_value->SetRange (0.1, 32.0); + _luminance_value->SetDigits (1); + _luminance_value->SetIncrement (0.1); + s->Add (_luminance_value, 0); + _luminance_unit = new wxChoice (panel, wxID_ANY); + s->Add (_luminance_unit, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); + sizer->Add (s, 1, wxEXPAND); + } + + _luminance_unit->Append (wxString::FromUTF8(_("candela per m²"))); + _luminance_unit->Append (_("foot lambert")); + } @@ -283,3 +351,60 @@ MetadataDialog::two_d_version_of_three_d_changed () film()->set_two_d_version_of_three_d(_two_d_version_of_three_d->GetValue()); } + +void +MetadataDialog::chain_changed () +{ + film()->set_chain (wx_to_std(_chain->GetValue())); +} + + +void +MetadataDialog::enable_chain_changed () +{ + setup_sensitivity (); + if (_enable_chain->GetValue()) { + chain_changed (); + } else { + film()->set_chain (); + } +} + + +void +MetadataDialog::enable_luminance_changed () +{ + setup_sensitivity (); + if (_enable_luminance->GetValue()) { + luminance_changed (); + } else { + film()->set_luminance (); + } +} + + +void +MetadataDialog::luminance_changed () +{ + dcp::Luminance::Unit unit; + switch (_luminance_unit->GetSelection()) { + case 0: + unit = dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE; + break; + case 1: + unit = dcp::Luminance::Unit::FOOT_LAMBERT; + break; + default: + DCPOMATIC_ASSERT (false); + } + + film()->set_luminance (dcp::Luminance(_luminance_value->GetValue(), unit)); +} + + +void +MetadataDialog::sign_language_video_language_changed () +{ + film()->set_sign_language_video_language(_sign_language_video_language->get()); +} +