X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fsmpte_metadata_dialog.cc;h=857be282c8ba75a0917d11185047672c89f6d81a;hb=f188fc8d92eaba89aaa63cfd7f5a2fc9836e94b6;hp=64afcac5c2240e6548b6c1a7da08c3042ed69219;hpb=e0255a64d22440d718e5512f34a4f21f0d37a21b;p=dcpomatic.git diff --git a/src/wx/smpte_metadata_dialog.cc b/src/wx/smpte_metadata_dialog.cc index 64afcac5c..857be282c 100644 --- a/src/wx/smpte_metadata_dialog.cc +++ b/src/wx/smpte_metadata_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2019-2020 Carl Hetherington + Copyright (C) 2019-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ + #include "content_version_dialog.h" #include "editable_list.h" #include "language_tag_dialog.h" @@ -29,6 +30,7 @@ #include #include + using std::string; using std::vector; using boost::optional; @@ -39,13 +41,6 @@ using namespace boost::placeholders; #endif -static string -additional_subtitle_language_column (dcp::LanguageTag r, int) -{ - return r.to_string(); -} - - static string ratings_column (dcp::Rating r, int c) { @@ -64,143 +59,97 @@ content_versions_column (string v, int) } -SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_film) - : wxDialog (parent, wxID_ANY, _("Metadata")) - , WeakFilm (weak_film) +void +SMPTEMetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer) { - wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); - SetSizer (overall_sizer); + MetadataDialog::setup_standard (panel, sizer); - wxFlexGridSizer* sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); - sizer->AddGrowableCol (1, 1); - - add_label_to_sizer (sizer, this, _("Title language"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Title language"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); _name_language = new LanguageTagWidget( - this, + panel, wxString::Format(_("The language that the film's title (\"%s\") is in"), std_to_wx(film()->name())), film()->name_language() ); sizer->Add (_name_language->sizer(), 0, wxEXPAND); - add_label_to_sizer (sizer, this, _("Audio language"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _audio_language = new LanguageTagWidget( - this, - _("The main language that is spoken in the film's soundtrack"), - film()->audio_language() - ); - sizer->Add (_audio_language->sizer(), 0, wxEXPAND); - - _enable_main_subtitle_language = new wxCheckBox (this, wxID_ANY, _("Main subtitle language")); - sizer->Add (_enable_main_subtitle_language, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); - vector subtitle_languages = film()->subtitle_languages(); - _main_subtitle_language = new LanguageTagWidget( - this, - _("The main language that is displayed in the film's subtitles"), - subtitle_languages.empty() ? dcp::LanguageTag("en-US") : subtitle_languages.front() - ); - sizer->Add (_main_subtitle_language->sizer(), 0, wxEXPAND); - { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; + int flags = wxALIGN_TOP | wxRIGHT | wxTOP; #ifdef __WXOSX__ flags |= wxALIGN_RIGHT; #endif - wxStaticText* m = create_label (this, _("Additional subtitle languages"), true); + auto m = create_label (panel, _("Ratings"), true); sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); } vector columns; - columns.push_back (EditableListColumn("Language", 250, true)); - _additional_subtitle_languages = new EditableList ( - this, + columns.push_back (EditableListColumn("Agency", 200, true)); + columns.push_back (EditableListColumn("Label", 50, true)); + _ratings = new EditableList ( + panel, columns, - boost::bind(&SMPTEMetadataDialog::additional_subtitle_languages, this), - boost::bind(&SMPTEMetadataDialog::set_additional_subtitle_languages, this, _1), - boost::bind(&additional_subtitle_language_column, _1, _2), + boost::bind(&SMPTEMetadataDialog::ratings, this), + boost::bind(&SMPTEMetadataDialog::set_ratings, this, _1), + boost::bind(&ratings_column, _1, _2), true, false ); - sizer->Add (_additional_subtitle_languages, 1, wxEXPAND); + sizer->Add (_ratings, 1, wxEXPAND); +} - Button* edit_release_territory = 0; - add_label_to_sizer (sizer, this, _("Release territory"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - { - wxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _release_territory = new wxStaticText (this, wxID_ANY, wxT("")); - s->Add (_release_territory, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP); - edit_release_territory = new Button (this, _("Edit...")); - s->Add (edit_release_territory, 0, wxLEFT, DCPOMATIC_SIZER_GAP); - sizer->Add (s, 0, wxEXPAND); - } - add_label_to_sizer (sizer, this, _("Version number"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _version_number = new wxSpinCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 1000); +void +SMPTEMetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) +{ + MetadataDialog::setup_advanced (panel, sizer); + + add_label_to_sizer (sizer, panel, _("Version number"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _version_number = new wxSpinCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 1000); sizer->Add (_version_number, 0); - add_label_to_sizer (sizer, this, _("Status"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _status = new wxChoice (this, wxID_ANY); + add_label_to_sizer (sizer, panel, _("Status"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _status = new wxChoice (panel, wxID_ANY); sizer->Add (_status, 0); - add_label_to_sizer (sizer, this, _("Chain"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _chain = new wxTextCtrl (this, wxID_ANY); + _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); - add_label_to_sizer (sizer, this, _("Distributor"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _distributor = new wxTextCtrl (this, wxID_ANY); + _enable_distributor = new wxCheckBox (panel, wxID_ANY, _("Distributor")); + sizer->Add (_enable_distributor, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _distributor = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_distributor, 1, wxEXPAND); - add_label_to_sizer (sizer, this, _("Facility"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _facility = new wxTextCtrl (this, wxID_ANY); + _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility")); + sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _facility = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_facility, 1, wxEXPAND); - add_label_to_sizer (sizer, this, _("Luminance"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Luminance"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); { - wxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _luminance_value = new wxSpinCtrlDouble (this, wxID_ANY); + auto s = new wxBoxSizer (wxHORIZONTAL); + _luminance_value = new wxSpinCtrlDouble (panel, wxID_ANY); _luminance_value->SetDigits (1); _luminance_value->SetIncrement (0.1); s->Add (_luminance_value, 0); - _luminance_unit = new wxChoice (this, wxID_ANY); + _luminance_unit = new wxChoice (panel, wxID_ANY); s->Add (_luminance_unit, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); sizer->Add (s, 1, wxEXPAND); } { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; -#ifdef __WXOSX__ - flags |= wxALIGN_RIGHT; -#endif - wxStaticText* m = create_label (this, _("Ratings"), true); - sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); - } - - columns.clear (); - columns.push_back (EditableListColumn("Agency", 200, true)); - columns.push_back (EditableListColumn("Label", 50, true)); - _ratings = new EditableList ( - this, - columns, - boost::bind(&SMPTEMetadataDialog::ratings, this), - boost::bind(&SMPTEMetadataDialog::set_ratings, this, _1), - boost::bind(&ratings_column, _1, _2), - true, - false - ); - sizer->Add (_ratings, 1, wxEXPAND); - - { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; + int flags = wxALIGN_TOP | wxRIGHT | wxTOP; #ifdef __WXOSX__ flags |= wxALIGN_RIGHT; #endif - wxStaticText* m = create_label (this, _("Content versions"), true); + auto m = create_label (panel, _("Content versions"), true); sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); } - columns.clear (); + vector columns; columns.push_back (EditableListColumn("Version", 350, true)); _content_versions = new EditableList ( - this, + panel, columns, boost::bind(&SMPTEMetadataDialog::content_versions, this), boost::bind(&SMPTEMetadataDialog::set_content_versions, this, _1), @@ -209,43 +158,41 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ false ); sizer->Add (_content_versions, 1, wxEXPAND); +} - overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); - wxSizer* buttons = CreateSeparatedButtonSizer (wxCLOSE); - if (buttons) { - overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); - } +SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_film) + : MetadataDialog (parent, weak_film) +{ + +} + - overall_sizer->Layout (); - overall_sizer->SetSizeHints (this); +void +SMPTEMetadataDialog::setup () +{ + MetadataDialog::setup (); _status->Append (_("Temporary")); _status->Append (_("Pre-release")); _status->Append (_("Final")); - _luminance_unit->Append (_("candela per m²")); + _luminance_unit->Append (wxString::FromUTF8(_("candela per m²"))); _luminance_unit->Append (_("foot lambert")); _name_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::name_language_changed, this, _1)); - _audio_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::audio_language_changed, this, _1)); - _enable_main_subtitle_language->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_main_subtitle_changed, this)); - _main_subtitle_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::main_subtitle_language_changed, this, _1)); - edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&SMPTEMetadataDialog::edit_release_territory, this)); _version_number->Bind (wxEVT_SPINCTRL, boost::bind(&SMPTEMetadataDialog::version_number_changed, this)); _status->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::status_changed, this)); + _enable_chain->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_chain_changed, this)); _chain->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::chain_changed, this)); + _enable_distributor->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_distributor_changed, this)); _distributor->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::distributor_changed, this)); + _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_facility_changed, this)); _facility->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::facility_changed, this)); _luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this)); _luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this)); - _version_number->SetFocus (); - - _film_changed_connection = film()->Change.connect(boost::bind(&SMPTEMetadataDialog::film_changed, this, _1, _2)); - film_changed (ChangeType::DONE, Film::Property::NAME_LANGUAGE); - film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY); film_changed (ChangeType::DONE, Film::Property::VERSION_NUMBER); film_changed (ChangeType::DONE, Film::Property::STATUS); film_changed (ChangeType::DONE, Film::Property::CHAIN); @@ -253,7 +200,6 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ film_changed (ChangeType::DONE, Film::Property::FACILITY); film_changed (ChangeType::DONE, Film::Property::CONTENT_VERSIONS); film_changed (ChangeType::DONE, Film::Property::LUMINANCE); - film_changed (ChangeType::DONE, Film::Property::SUBTITLE_LANGUAGES); setup_sensitivity (); } @@ -262,14 +208,14 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ void SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property) { + MetadataDialog::film_changed (type, property); + if (type != ChangeType::DONE || film()->interop()) { return; } if (property == Film::Property::NAME_LANGUAGE) { _name_language->set (film()->name_language()); - } else if (property == Film::Property::RELEASE_TERRITORY) { - checked_set (_release_territory, std_to_wx(*dcp::LanguageTag::get_subtag_description(dcp::LanguageTag::SubtagType::REGION, film()->release_territory().subtag()))); } else if (property == Film::Property::VERSION_NUMBER) { checked_set (_version_number, film()->version_number()); } else if (property == Film::Property::STATUS) { @@ -285,28 +231,35 @@ SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property) break; } } else if (property == Film::Property::CHAIN) { - checked_set (_chain, film()->chain()); + checked_set (_enable_chain, static_cast(film()->chain())); + if (film()->chain()) { + checked_set (_chain, *film()->chain()); + } } else if (property == Film::Property::DISTRIBUTOR) { - checked_set (_distributor, film()->distributor()); + checked_set (_enable_distributor, static_cast(film()->distributor())); + if (film()->distributor()) { + checked_set (_distributor, *film()->distributor()); + } } else if (property == Film::Property::FACILITY) { - checked_set (_facility, film()->facility()); - } else if (property == Film::Property::LUMINANCE) { - checked_set (_luminance_value, film()->luminance().value()); - switch (film()->luminance().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; + checked_set (_enable_facility, static_cast(film()->facility())); + if (film()->facility()) { + checked_set (_facility, *film()->facility()); } - } else if (property == Film::Property::SUBTITLE_LANGUAGES) { - vector languages = film()->subtitle_languages(); - checked_set (_enable_main_subtitle_language, !languages.empty()); - if (!languages.empty()) { - _main_subtitle_language->set (languages.front()); + } else if (property == Film::Property::LUMINANCE) { + auto lum = film()->luminance(); + 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 { - _main_subtitle_language->set (dcp::LanguageTag("en-US")); + checked_set (_luminance_value, 4.5); + checked_set (_luminance_unit, 1); } } } @@ -347,26 +300,6 @@ SMPTEMetadataDialog::name_language_changed (dcp::LanguageTag tag) } -void -SMPTEMetadataDialog::audio_language_changed (dcp::LanguageTag tag) -{ - film()->set_audio_language (tag); -} - - -void -SMPTEMetadataDialog::edit_release_territory () -{ - auto d = new RegionSubtagDialog(this, film()->release_territory()); - d->ShowModal (); - auto tag = d->get(); - if (tag) { - film()->set_release_territory(*tag); - } - d->Destroy (); -} - - void SMPTEMetadataDialog::version_number_changed () { @@ -431,63 +364,50 @@ SMPTEMetadataDialog::luminance_changed () } -void -SMPTEMetadataDialog::enable_main_subtitle_changed () -{ - setup_sensitivity (); - bool enabled = _enable_main_subtitle_language->GetValue (); - if (enabled) { - film()->set_subtitle_language (_main_subtitle_language->get()); - } else { - set_additional_subtitle_languages (vector()); - _additional_subtitle_languages->refresh (); - film()->unset_subtitle_language (); - } -} - - void SMPTEMetadataDialog::setup_sensitivity () { - bool const enabled = _enable_main_subtitle_language->GetValue (); - _main_subtitle_language->enable (enabled); - _additional_subtitle_languages->Enable (enabled); + MetadataDialog::setup_sensitivity (); + + _chain->Enable (_enable_chain->GetValue()); + _distributor->Enable (_enable_distributor->GetValue()); + _facility->Enable (_enable_facility->GetValue()); } void -SMPTEMetadataDialog::main_subtitle_language_changed (dcp::LanguageTag tag) +SMPTEMetadataDialog::enable_chain_changed () { - vector existing = film()->subtitle_languages(); - if (existing.empty()) { - existing.push_back (tag); + setup_sensitivity (); + if (_enable_chain->GetValue()) { + film()->set_chain (wx_to_std(_chain->GetValue())); } else { - existing[0] = tag; + film()->set_chain (); } - - film()->set_subtitle_languages (existing); } -vector -SMPTEMetadataDialog::additional_subtitle_languages () +void +SMPTEMetadataDialog::enable_distributor_changed () { - vector all = film()->subtitle_languages(); - if (all.empty()) { - return all; + setup_sensitivity (); + if (_enable_distributor->GetValue()) { + film()->set_distributor (wx_to_std(_distributor->GetValue())); + } else { + film()->set_distributor (); } - - return vector(all.begin() + 1, all.end()); } void -SMPTEMetadataDialog::set_additional_subtitle_languages (vector languages) +SMPTEMetadataDialog::enable_facility_changed () { - vector all = film()->subtitle_languages(); - DCPOMATIC_ASSERT (!all.empty()); - all.resize (1); - copy (languages.begin(), languages.end(), back_inserter(all)); - film()->set_subtitle_languages (all); + setup_sensitivity (); + if (_enable_facility->GetValue()) { + film()->set_facility (wx_to_std(_facility->GetValue())); + } else { + film()->set_facility (); + } } +