From 8f3743d18026b59b1ecd8e8f4d12cc59273eb1ed Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 19 Aug 2017 23:57:24 +0100 Subject: [PATCH] Cope nicely if the user has a configured default container ratio which is now disallowed. --- ChangeLog | 5 +++++ src/lib/config.cc | 12 +++++++++--- src/lib/config.h | 2 ++ src/lib/ratio.h | 4 ++++ src/tools/dcpomatic.cc | 6 ++++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa717f3b0..2ebc966a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-08-19 Carl Hetherington + + * Deal with newly-invalid configured default container ratios + gracefully. + 2017-08-18 Carl Hetherington * Version 2.11.18 released. diff --git a/src/lib/config.cc b/src/lib/config.cc index f7456e269..f595b960a 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -64,6 +64,7 @@ using dcp::raw_convert; Config* Config::_instance = 0; boost::signals2::signal Config::FailedToLoad; +boost::signals2::signal Config::Warning; /** Construct default configuration */ Config::Config () @@ -225,6 +226,11 @@ try _default_container = Ratio::from_id (c.get ()); } + if (_default_container && !_default_container->used_for_container()) { + Warning (_("Your default container is not valid and has been changed to Flat (1.85:1)")); + _default_container = Ratio::from_id ("185"); + } + c = f.optional_string_child ("DefaultScaleTo"); if (c) { _default_scale_to = Ratio::from_id (c.get ()); @@ -475,9 +481,9 @@ Config::write_config () const root->add_child("Language")->add_child_text (_language.get()); } if (_default_container) { - /* [XML:opt] DefaultContainer ID of default container to use when creating new films (119, 133, - 138, 143, 166, 178, 185, 235, - 239 or full-frame). + /* [XML:opt] DefaultContainer ID of default container + * to use when creating new films (185,239 or + * full-frame). */ root->add_child("DefaultContainer")->add_child_text (_default_container->id ()); } diff --git a/src/lib/config.h b/src/lib/config.h index b850e99a7..0a81dee51 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -625,6 +625,8 @@ public: a listener can do about it: this is just for information. */ static boost::signals2::signal FailedToLoad; + /** Emitted if read() issued a warning which the user might want to know about */ + static boost::signals2::signal Warning; void write () const; void write_config () const; diff --git a/src/lib/ratio.h b/src/lib/ratio.h index 42f29458a..a6f2bbd73 100644 --- a/src/lib/ratio.h +++ b/src/lib/ratio.h @@ -46,6 +46,10 @@ public: std::string container_nickname () const; + bool used_for_container () const { + return static_cast (_container_nickname); + } + std::string isdcf_name () const { return _isdcf_name; } diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 0da3faa5b..f90f27c30 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -1166,6 +1166,7 @@ private: wxInitAllImageHandlers (); Config::FailedToLoad.connect (boost::bind (&App::config_failed_to_load, this)); + Config::Warning.connect (boost::bind (&App::config_warning, this, _1)); wxSplashScreen* splash = 0; try { @@ -1351,6 +1352,11 @@ private: message_dialog (_frame, _("The existing configuration failed to load. Default values will be used instead. These may take a short time to create.")); } + void config_warning (string m) + { + message_dialog (_frame, std_to_wx (m)); + } + DOMFrame* _frame; shared_ptr _timer; string _film_to_load; -- 2.30.2