summaryrefslogtreecommitdiff
path: root/src/wx
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-06-01 11:28:48 +0200
committerCarl Hetherington <cth@carlh.net>2021-06-01 14:25:17 +0200
commitddd767fd647b2fd585d75ada000d3d01c4c43cb2 (patch)
treea8807a0e60aac0cf39adee3a7a2d7c5c37cb94ad /src/wx
parent8a0ab373363c34daf5d926e951ee79fc422fdb3d (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')
-rw-r--r--src/wx/audio_panel.cc44
-rw-r--r--src/wx/audio_panel.h4
-rw-r--r--src/wx/dcp_panel.cc55
-rw-r--r--src/wx/dcp_panel.h6
4 files changed, 60 insertions, 49 deletions
diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc
index ff710b1d1..a77922ed2 100644
--- a/src/wx/audio_panel.cc
+++ b/src/wx/audio_panel.cc
@@ -26,7 +26,6 @@
#include "content_panel.h"
#include "dcpomatic_button.h"
#include "gain_calculator_dialog.h"
-#include "language_tag_widget.h"
#include "static_text.h"
#include "wx_util.h"
#include "lib/config.h"
@@ -95,9 +94,6 @@ AudioPanel::AudioPanel (ContentPanel* p)
/// TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
_delay_ms_label = create_label (this, _("ms"), false);
- _enable_language = new wxCheckBox (this, wxID_ANY, _("Language"));
- _language = new LanguageTagWidget (this, _("Language used for the dialogue in this content"), boost::none);
-
_mapping = new AudioMappingView (this, _("Content"), _("content"), _("DCP"), _("DCP"));
_sizer->Add (_mapping, 1, wxEXPAND | wxALL, 6);
@@ -118,8 +114,6 @@ AudioPanel::AudioPanel (ContentPanel* p)
_reference->Bind (wxEVT_CHECKBOX, boost::bind (&AudioPanel::reference_clicked, this));
_show->Bind (wxEVT_BUTTON, boost::bind (&AudioPanel::show_clicked, this));
_gain_calculate_button->Bind (wxEVT_BUTTON, boost::bind (&AudioPanel::gain_calculate_button_clicked, this));
- _enable_language->Bind (wxEVT_CHECKBOX, boost::bind (&AudioPanel::enable_language_clicked, this));
- _language->Changed.connect (boost::bind(&AudioPanel::language_changed, this));
_mapping_connection = _mapping->Changed.connect (boost::bind (&AudioPanel::mapping_changed, this, _1));
_active_jobs_connection = JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&AudioPanel::active_jobs_changed, this, _1, _2));
@@ -159,12 +153,6 @@ AudioPanel::add_to_grid ()
s->Add (_delay_ms_label, 0, wxALIGN_CENTER_VERTICAL);
_grid->Add (s, wxGBPosition(r, 1));
++r;
-
- s = new wxBoxSizer (wxHORIZONTAL);
- s->Add (_enable_language, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, DCPOMATIC_SIZER_GAP);
- s->Add (_language->sizer(), 1, wxALIGN_CENTER_VERTICAL | wxRIGHT);
- _grid->Add (s, wxGBPosition(r, 0), wxGBSpan(1, 2), wxEXPAND);
- ++r;
}
AudioPanel::~AudioPanel ()
@@ -244,14 +232,6 @@ AudioPanel::film_content_changed (int property)
setup_sensitivity ();
} else if (property == ContentProperty::VIDEO_FRAME_RATE) {
setup_description ();
- } else if (property == AudioContentProperty::LANGUAGE) {
- if (ac.size() == 1 && ac.front()->audio->language()) {
- _enable_language->SetValue (true);
- _language->set (ac.front()->audio->language());
- } else {
- _enable_language->SetValue (false);
- _language->set (boost::none);
- }
}
}
@@ -317,7 +297,6 @@ AudioPanel::content_selection_changed ()
film_content_changed (AudioContentProperty::STREAMS);
film_content_changed (AudioContentProperty::GAIN);
- film_content_changed (AudioContentProperty::LANGUAGE);
film_content_changed (DCPContentProperty::REFERENCE_AUDIO);
setup_sensitivity ();
@@ -353,8 +332,6 @@ AudioPanel::setup_sensitivity ()
_delay->wrapped()->Enable (!ref);
_mapping->Enable (!ref && single);
_description->Enable (!ref && single);
- _enable_language->Enable (!ref && single);
- _language->enable (!ref && single && _enable_language->GetValue());
}
void
@@ -460,24 +437,3 @@ AudioPanel::set_film (shared_ptr<Film>)
}
}
-
-void
-AudioPanel::enable_language_clicked ()
-{
- setup_sensitivity ();
- auto sel = _parent->selected_audio ();
- if (sel.size() == 1) {
- sel.front()->audio->set_language (_enable_language->GetValue() ? _language->get() : boost::none);
- }
-}
-
-
-void
-AudioPanel::language_changed ()
-{
- auto sel = _parent->selected_audio ();
- if (sel.size() == 1) {
- sel.front()->audio->set_language (_language->get());
- }
-}
-
diff --git a/src/wx/audio_panel.h b/src/wx/audio_panel.h
index aef2f76ad..0ae9da88e 100644
--- a/src/wx/audio_panel.h
+++ b/src/wx/audio_panel.h
@@ -54,8 +54,6 @@ private:
void setup_sensitivity ();
void reference_clicked ();
void add_to_grid ();
- void enable_language_clicked ();
- void language_changed ();
boost::optional<float> peak () const;
wxCheckBox* _reference;
@@ -69,8 +67,6 @@ private:
wxStaticText* _delay_label;
wxStaticText* _delay_ms_label;
ContentSpinCtrl<AudioContent>* _delay;
- wxCheckBox* _enable_language = nullptr;
- LanguageTagWidget* _language = nullptr;
AudioMappingView* _mapping;
wxStaticText* _description;
AudioDialog* _audio_dialog;
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 ();
+}
+
diff --git a/src/wx/dcp_panel.h b/src/wx/dcp_panel.h
index dc5e9bcbf..9da7a6929 100644
--- a/src/wx/dcp_panel.h
+++ b/src/wx/dcp_panel.h
@@ -23,6 +23,7 @@
#include "lib/film.h"
+class Button;
class wxNotebook;
class wxPanel;
class wxBoxSizer;
@@ -85,6 +86,8 @@ private:
void markers_clicked ();
void metadata_clicked ();
void reencode_j2k_changed ();
+ void enable_audio_language_toggled ();
+ void edit_audio_language_clicked ();
void setup_frame_rate_widget ();
void setup_container ();
@@ -115,6 +118,9 @@ private:
wxTextCtrl* _name;
wxStaticText* _dcp_name;
wxCheckBox* _use_isdcf_name;
+ wxCheckBox* _enable_audio_language = nullptr;
+ wxStaticText* _audio_language = nullptr;
+ Button* _edit_audio_language = nullptr;
wxStaticText* _container_label;
wxChoice* _container;
wxStaticText* _container_size;