diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-06-01 11:28:48 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-06-01 14:25:17 +0200 |
| commit | ddd767fd647b2fd585d75ada000d3d01c4c43cb2 (patch) | |
| tree | a8807a0e60aac0cf39adee3a7a2d7c5c37cb94ad /src/wx/dcp_panel.cc | |
| parent | 8a0ab373363c34daf5d926e951ee79fc422fdb3d (diff) | |
Put audio language back in the Film.
It feels neat to have audio language in the audio tab, to match
the subtitle language in the subtitle tab. It also avoids the potential
confusion of there being an audio language setting in the DCP metadata
but no subtitle language setting. However:
- I am yet to find a need to describe multiple audio languages in the
same DCP (all previous users of Film::audio_languages() were just taking
the first language off the list).
- As Carsten points out it's fiddly to have to set the audio language
for 5 separate-channel WAV files, for example (you wouldn't actually
have had to do this, but it would have felt like you did).
I think subtitle language remains neater where it is (per-content)
as there is this additional subtitle language metadata and it makes
much more sense (and is much more likely) that there are multiple
subtitle languages in a DCP than it does multiple audio languages.
Diffstat (limited to 'src/wx/dcp_panel.cc')
| -rw-r--r-- | src/wx/dcp_panel.cc | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 3ea347985..54db2632f 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -27,6 +27,7 @@ #include "dcpomatic_spin_ctrl.h" #include "focus_manager.h" #include "interop_metadata_dialog.h" +#include "language_tag_dialog.h" #include "markers_dialog.h" #include "smpte_metadata_dialog.h" #include "static_text.h" @@ -94,6 +95,10 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v wxALIGN_CENTRE_HORIZONTAL | wxST_NO_AUTORESIZE | wxST_ELLIPSIZE_MIDDLE ); + _enable_audio_language = new wxCheckBox (_panel, wxID_ANY, _("Audio language")); + _audio_language = new wxStaticText (_panel, wxID_ANY, wxT("")); + _edit_audio_language = new Button (_panel, _("Edit...")); + _dcp_content_type_label = create_label (_panel, _("Content Type"), true); _dcp_content_type = new wxChoice (_panel, wxID_ANY); @@ -132,6 +137,8 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v _standard->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::standard_changed, this)); _markers->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::markers_clicked, this)); _metadata->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::metadata_clicked, this)); + _enable_audio_language->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::enable_audio_language_toggled, this)); + _edit_audio_language->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::edit_audio_language_clicked, this)); for (auto i: DCPContentType::all()) { _dcp_content_type->Append (std_to_wx(i->pretty_name())); @@ -179,6 +186,15 @@ DCPPanel::add_to_grid () _grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan(1, 2), wxALIGN_CENTER_VERTICAL | wxEXPAND); ++r; + { + auto s = new wxBoxSizer (wxHORIZONTAL); + s->Add (_enable_audio_language, 0, wxALIGN_CENTER_VERTICAL); + s->Add (_audio_language, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, DCPOMATIC_SIZER_GAP); + s->Add (_edit_audio_language, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, DCPOMATIC_SIZER_GAP); + _grid->Add (s, wxGBPosition(r, 0), wxGBSpan(1, 2), wxEXPAND | wxALIGN_CENTER_VERTICAL); + } + ++r; + add_label_to_sizer (_grid, _dcp_content_type_label, true, wxGBPosition(r, 0)); _grid->Add (_dcp_content_type, wxGBPosition(r, 1)); ++r; @@ -453,6 +469,15 @@ DCPPanel::film_changed (Film::Property p) setup_dcp_name (); setup_sensitivity (); break; + case Film::Property::AUDIO_LANGUAGE: + { + auto al = _film->audio_language(); + checked_set (_enable_audio_language, static_cast<bool>(al)); + checked_set (_audio_language, al ? std_to_wx(al->to_string()) : wxT("")); + setup_dcp_name (); + setup_sensitivity (); + break; + } case Film::Property::CONTENT_VERSIONS: case Film::Property::VERSION_NUMBER: case Film::Property::RELEASE_TERRITORY: @@ -477,7 +502,6 @@ void DCPPanel::film_content_changed (int property) { if (property == AudioContentProperty::STREAMS || - property == AudioContentProperty::LANGUAGE || property == TextContentProperty::USE || property == TextContentProperty::BURN || property == TextContentProperty::LANGUAGE || @@ -597,6 +621,7 @@ DCPPanel::set_film (shared_ptr<Film> film) film_changed (Film::Property::REEL_TYPE); film_changed (Film::Property::REEL_LENGTH); film_changed (Film::Property::REENCODE_J2K); + film_changed (Film::Property::AUDIO_LANGUAGE); set_general_sensitivity(static_cast<bool>(_film)); } @@ -617,6 +642,9 @@ DCPPanel::setup_sensitivity () _use_isdcf_name->Enable (_generally_sensitive); _dcp_content_type->Enable (_generally_sensitive); _copy_isdcf_name_button->Enable (_generally_sensitive); + _enable_audio_language->Enable (_generally_sensitive); + _audio_language->Enable (_enable_audio_language->GetValue()); + _edit_audio_language->Enable (_enable_audio_language->GetValue()); _encrypted->Enable (_generally_sensitive); _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); @@ -964,3 +992,28 @@ DCPPanel::add_audio_processors () } _audio_panel_sizer->Layout(); } + + +void +DCPPanel::enable_audio_language_toggled () +{ + setup_sensitivity (); + if (_enable_audio_language->GetValue()) { + auto al = wx_to_std (_audio_language->GetLabel()); + _film->set_audio_language (al.empty() ? dcp::LanguageTag("en-US") : dcp::LanguageTag(al)); + } else { + _film->set_audio_language (boost::none); + } +} + + +void +DCPPanel::edit_audio_language_clicked () +{ + DCPOMATIC_ASSERT (_film->audio_language()); + auto d = new LanguageTagDialog (_panel, *_film->audio_language()); + d->ShowModal (); + _film->set_audio_language(d->get()); + d->Destroy (); +} + |
