Add default release territory configuration (#2375).
authorCarl Hetherington <cth@carlh.net>
Mon, 28 Nov 2022 23:06:29 +0000 (00:06 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 28 Nov 2022 23:15:02 +0000 (00:15 +0100)
src/lib/config.cc
src/lib/config.h
src/lib/film.cc
src/wx/full_config_dialog.cc

index d44abdfbf7685dc0d2641cc0ad105ef5c8854ab7..4bc4f60f2f5640d6fa264fc9055d55a1e0e9b1b0 100644 (file)
@@ -357,6 +357,7 @@ 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) {
@@ -364,6 +365,13 @@ try
                }
        } catch (std::runtime_error&) {}
 
+       try {
+               auto te = f.optional_string_child("DefaultTerritory");
+               if (te) {
+                       _default_territory = dcp::LanguageTag::RegionSubtag(*te);
+               }
+       } catch (std::runtime_error&) {}
+
        for (auto const& i: f.node_children("DefaultMetadata")) {
                _default_metadata[i->string_attribute("key")] = i->content();
        }
@@ -765,6 +773,10 @@ Config::write_config () const
                /* [XML] DefaultAudioLanguage Default audio language to use for new films */
                root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string());
        }
+       if (_default_territory) {
+               /* [XML] DefaultTerritory Default territory to use for new films */
+               root->add_child("DefaultTerritory")->add_child_text(_default_territory->subtag());
+       }
        for (auto const& i: _default_metadata) {
                auto c = root->add_child("DefaultMetadata");
                c->set_attribute("key", i.first);
index c6bf5986bc7626de1bbbf37aec4ec26755b9d645..62a36f084a64fa0444a19b71af143cb104f62904 100644 (file)
@@ -242,6 +242,10 @@ public:
                return _default_audio_language;
        }
 
+       boost::optional<dcp::LanguageTag::RegionSubtag> default_territory() const {
+               return _default_territory;
+       }
+
        std::map<std::string, std::string> default_metadata () const {
                return _default_metadata;
        }
@@ -774,6 +778,14 @@ public:
                maybe_set(_default_audio_language, boost::optional<dcp::LanguageTag>());
        }
 
+       void set_default_territory(dcp::LanguageTag::RegionSubtag tag) {
+               maybe_set(_default_territory, tag);
+       }
+
+       void unset_default_territory() {
+               maybe_set(_default_territory, boost::optional<dcp::LanguageTag::RegionSubtag>());
+       }
+
        void set_default_metadata (std::map<std::string, std::string> const& metadata) {
                maybe_set (_default_metadata, metadata);
        }
@@ -1305,6 +1317,7 @@ private:
        int _default_audio_delay;
        bool _default_interop;
        boost::optional<dcp::LanguageTag> _default_audio_language;
+       boost::optional<dcp::LanguageTag::RegionSubtag> _default_territory;
        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.
index e021c0aa91801949a980d85242b7b2af96f7e8bd..8b1442849488de289d226c2ee2dbc98d0e3dad85 100644 (file)
@@ -174,6 +174,7 @@ Film::Film (optional<boost::filesystem::path> dir)
        , _user_explicit_container (false)
        , _user_explicit_resolution (false)
        , _name_language (dcp::LanguageTag("en-US"))
+       , _release_territory(Config::instance()->default_territory())
        , _version_number (1)
        , _status (dcp::Status::FINAL)
        , _audio_language(Config::instance()->default_audio_language())
index 899445d4219867d3108c9bde63ee7e6565ea2114..19fc2917160ea27a302d39a876c4eb396696e63f 100644 (file)
@@ -40,6 +40,7 @@
 #include "nag_dialog.h"
 #include "name_format_editor.h"
 #include "password_entry.h"
+#include "region_subtag_widget.h"
 #include "send_test_email_dialog.h"
 #include "server_dialog.h"
 #include "static_text.h"
@@ -321,6 +322,11 @@ private:
                _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());
 
+               _enable_territory = new CheckBox(_panel, _("Default territory"));
+               table->Add(_enable_territory, 1, wxEXPAND | wxALIGN_CENTRE_VERTICAL);
+               _territory = new RegionSubtagWidget(_panel, _("Default territory to use for new DCPs"), Config::instance()->default_territory(), wxString("cmnr-Hant-"));
+               table->Add(_territory->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);
 
@@ -400,6 +406,9 @@ private:
 
                _enable_audio_language->bind(&DefaultsPage::enable_audio_language_toggled, this);
                _audio_language->Changed.connect(boost::bind(&DefaultsPage::audio_language_changed, this));
+
+               _enable_territory->bind(&DefaultsPage::enable_territory_toggled, this);
+               _territory->Changed.connect(boost::bind(&DefaultsPage::territory_changed, this));
        }
 
        void config_changed () override
@@ -426,6 +435,9 @@ private:
                auto dal = config->default_audio_language();
                checked_set(_enable_audio_language, static_cast<bool>(dal));
                checked_set(_audio_language, dal ? dal : boost::none);
+               auto dt = config->default_territory();
+               checked_set(_enable_territory, static_cast<bool>(dt));
+               checked_set(_territory, dt ? dt : boost::none);
 
                auto metadata = config->default_metadata();
 
@@ -574,9 +586,25 @@ private:
                }
        }
 
+       void enable_territory_toggled()
+       {
+               setup_sensitivity();
+               territory_changed();
+       }
+
+       void territory_changed()
+       {
+               if (_enable_territory->get()) {
+                       Config::instance()->set_default_territory(_territory->get().get_value_or(dcp::LanguageTag::RegionSubtag("US")));
+               } else {
+                       Config::instance()->unset_default_territory();
+               }
+       }
+
        void setup_sensitivity ()
        {
                _audio_language->enable(_enable_audio_language->get());
+               _territory->enable(_enable_territory->get());
                for (auto const& i: _enable_metadata) {
                        _metadata[i.first]->Enable(i.second->GetValue());
                }
@@ -601,6 +629,8 @@ private:
        wxChoice* _standard;
        CheckBox* _enable_audio_language;
        LanguageTagWidget* _audio_language;
+       CheckBox* _enable_territory;
+       RegionSubtagWidget* _territory;
        map<string, CheckBox*> _enable_metadata;
        map<string, wxTextCtrl*> _metadata;
 };