summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-11-23 01:05:41 +0100
committerCarl Hetherington <cth@carlh.net>2022-11-29 00:15:02 +0100
commit4d879e836147720bed8208f92d8d39bcbd661221 (patch)
tree8a61c5ca3b39c1cdb60aa81128942ca32d1b2784 /src
parentda822af56c5e4acab361b8531fb75a1dcb4b110e (diff)
Add default audio language configuration (#2375).
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc10
-rw-r--r--src/lib/config.h13
-rw-r--r--src/lib/film.cc1
-rw-r--r--src/wx/full_config_dialog.cc30
-rw-r--r--src/wx/wx_util.cc19
-rw-r--r--src/wx/wx_util.h3
6 files changed, 76 insertions, 0 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 235bace7b..d44abdfbf 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -357,6 +357,12 @@ try
_default_j2k_bandwidth = f.optional_number_child<int>("DefaultJ2KBandwidth").get_value_or (200000000);
_default_audio_delay = f.optional_number_child<int>("DefaultAudioDelay").get_value_or (0);
_default_interop = f.optional_bool_child("DefaultInterop").get_value_or (false);
+ try {
+ auto al = f.optional_string_child("DefaultAudioLanguage");
+ if (al) {
+ _default_audio_language = dcp::LanguageTag(*al);
+ }
+ } catch (std::runtime_error&) {}
for (auto const& i: f.node_children("DefaultMetadata")) {
_default_metadata[i->string_attribute("key")] = i->content();
@@ -755,6 +761,10 @@ Config::write_config () const
root->add_child("DefaultAudioDelay")->add_child_text (raw_convert<string> (_default_audio_delay));
/* [XML] DefaultInterop 1 to default new films to Interop, 0 for SMPTE. */
root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0");
+ if (_default_audio_language) {
+ /* [XML] DefaultAudioLanguage Default audio language to use for new films */
+ root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string());
+ }
for (auto const& i: _default_metadata) {
auto c = root->add_child("DefaultMetadata");
c->set_attribute("key", i.first);
diff --git a/src/lib/config.h b/src/lib/config.h
index c86622427..c6bf5986b 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -238,6 +238,10 @@ public:
return _default_interop;
}
+ boost::optional<dcp::LanguageTag> default_audio_language() const {
+ return _default_audio_language;
+ }
+
std::map<std::string, std::string> default_metadata () const {
return _default_metadata;
}
@@ -762,6 +766,14 @@ public:
maybe_set (_default_interop, i);
}
+ void set_default_audio_language(dcp::LanguageTag tag) {
+ maybe_set(_default_audio_language, tag);
+ }
+
+ void unset_default_audio_language() {
+ maybe_set(_default_audio_language, boost::optional<dcp::LanguageTag>());
+ }
+
void set_default_metadata (std::map<std::string, std::string> const& metadata) {
maybe_set (_default_metadata, metadata);
}
@@ -1292,6 +1304,7 @@ private:
int _default_j2k_bandwidth;
int _default_audio_delay;
bool _default_interop;
+ boost::optional<dcp::LanguageTag> _default_audio_language;
std::map<std::string, std::string> _default_metadata;
/** Default directory to offer to write KDMs to; if it's not set,
the home directory will be offered.
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 7d713c041..e021c0aa9 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -176,6 +176,7 @@ Film::Film (optional<boost::filesystem::path> dir)
, _name_language (dcp::LanguageTag("en-US"))
, _version_number (1)
, _status (dcp::Status::FINAL)
+ , _audio_language(Config::instance()->default_audio_language())
, _state_version (current_state_version)
, _dirty (false)
, _tolerant (false)
diff --git a/src/wx/full_config_dialog.cc b/src/wx/full_config_dialog.cc
index ba596162e..899445d42 100644
--- a/src/wx/full_config_dialog.cc
+++ b/src/wx/full_config_dialog.cc
@@ -35,6 +35,7 @@
#include "filter_dialog.h"
#include "full_config_dialog.h"
#include "kdm_choice.h"
+#include "language_tag_widget.h"
#include "make_chain_dialog.h"
#include "nag_dialog.h"
#include "name_format_editor.h"
@@ -315,6 +316,11 @@ private:
_standard = new wxChoice (_panel, wxID_ANY);
table->Add (_standard);
+ _enable_audio_language = new CheckBox(_panel, _("Default audio language"));
+ table->Add(_enable_audio_language, 1, wxEXPAND | wxALIGN_CENTRE_VERTICAL);
+ _audio_language = new LanguageTagWidget(_panel, _("Default audio language to use for new DCPs"), Config::instance()->default_audio_language(), wxString("cmnr-Hant-"));
+ table->Add(_audio_language->sizer());
+
table->Add (_enable_metadata["facility"] = new CheckBox (_panel, _("Default facility")), 0, wxALIGN_CENTRE_VERTICAL);
table->Add (_metadata["facility"] = new wxTextCtrl (_panel, wxID_ANY, wxT("")), 0, wxEXPAND);
@@ -391,6 +397,9 @@ private:
for (auto const& i: _metadata) {
i.second->Bind (wxEVT_TEXT, boost::bind(&DefaultsPage::metadata_changed, this));
}
+
+ _enable_audio_language->bind(&DefaultsPage::enable_audio_language_toggled, this);
+ _audio_language->Changed.connect(boost::bind(&DefaultsPage::audio_language_changed, this));
}
void config_changed () override
@@ -414,6 +423,9 @@ private:
checked_set (_dcp_audio_channels, locale_convert<string> (config->default_dcp_audio_channels()));
checked_set (_audio_delay, config->default_audio_delay ());
checked_set (_standard, config->default_interop() ? 1 : 0);
+ auto dal = config->default_audio_language();
+ checked_set(_enable_audio_language, static_cast<bool>(dal));
+ checked_set(_audio_language, dal ? dal : boost::none);
auto metadata = config->default_metadata();
@@ -547,8 +559,24 @@ private:
setup_sensitivity ();
}
+ void enable_audio_language_toggled()
+ {
+ setup_sensitivity();
+ audio_language_changed();
+ }
+
+ void audio_language_changed()
+ {
+ if (_enable_audio_language->get()) {
+ Config::instance()->set_default_audio_language(_audio_language->get().get_value_or(dcp::LanguageTag("en-US")));
+ } else {
+ Config::instance()->unset_default_audio_language();
+ }
+ }
+
void setup_sensitivity ()
{
+ _audio_language->enable(_enable_audio_language->get());
for (auto const& i: _enable_metadata) {
_metadata[i.first]->Enable(i.second->GetValue());
}
@@ -571,6 +599,8 @@ private:
wxChoice* _dcp_content_type;
wxChoice* _dcp_audio_channels;
wxChoice* _standard;
+ CheckBox* _enable_audio_language;
+ LanguageTagWidget* _audio_language;
map<string, CheckBox*> _enable_metadata;
map<string, wxTextCtrl*> _metadata;
};
diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc
index 074f47d61..ee6663101 100644
--- a/src/wx/wx_util.cc
+++ b/src/wx/wx_util.cc
@@ -25,6 +25,7 @@
#include "file_picker_ctrl.h"
+#include "language_tag_widget.h"
#include "password_entry.h"
#include "static_text.h"
#include "wx_util.h"
@@ -384,6 +385,24 @@ checked_set (wxRadioButton* widget, bool value)
void
+checked_set(LanguageTagWidget* widget, dcp::LanguageTag value)
+{
+ if (widget->get() != value) {
+ widget->set(value);
+ }
+}
+
+
+void
+checked_set(LanguageTagWidget* widget, optional<dcp::LanguageTag> value)
+{
+ if (widget->get() != value) {
+ widget->set(value);
+ }
+}
+
+
+void
dcpomatic_setup_i18n ()
{
int language = wxLANGUAGE_DEFAULT;
diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h
index 50fb7268f..fd87e04d9 100644
--- a/src/wx/wx_util.h
+++ b/src/wx/wx_util.h
@@ -40,6 +40,7 @@ LIBDCP_ENABLE_WARNINGS
class FilePickerCtrl;
+class LanguageTagWidget;
class wxDirPickerCtrl;
class wxSpinCtrl;
class wxSpinCtrlDouble;
@@ -156,6 +157,8 @@ extern void checked_set (wxCheckBox* widget, bool value);
extern void checked_set (wxRadioButton* widget, bool value);
extern void checked_set (wxStaticText* widget, std::string value);
extern void checked_set (wxStaticText* widget, wxString value);
+extern void checked_set(LanguageTagWidget* widget, dcp::LanguageTag value);
+extern void checked_set(LanguageTagWidget* widget, boost::optional<dcp::LanguageTag> value);
extern int wx_get (wxChoice* widget);
extern int wx_get (wxSpinCtrl* widget);