Fix some typos in comments.
[dcpomatic.git] / src / lib / config.cc
index 81d4ab16038ac1261f9e47630ef5e6c244aec686..6a61aae46318b8376fe3b738bee31eacc168418a 100644 (file)
@@ -33,7 +33,6 @@
 #include "filter.h"
 #include "log.h"
 #include "ratio.h"
-#include "types.h"
 #include "zipper.h"
 #include <dcp/certificate_chain.h>
 #include <dcp/name_format.h>
@@ -141,9 +140,9 @@ Config::set_defaults ()
        _dkdm_recipients_file = read_path ("dkdm_recipients.xml");
        _show_hints_before_make_dcp = true;
        _confirm_kdm_email = true;
-       _kdm_container_name_format = dcp::NameFormat ("KDM %f %c");
-       _kdm_filename_format = dcp::NameFormat ("KDM %f %c %s");
-       _dkdm_filename_format = dcp::NameFormat ("DKDM %f %c %s");
+       _kdm_container_name_format = dcp::NameFormat("KDM_%f_%c");
+       _kdm_filename_format = dcp::NameFormat("KDM_%f_%c_%s");
+       _dkdm_filename_format = dcp::NameFormat("DKDM_%f_%c_%s");
        _dcp_metadata_filename_format = dcp::NameFormat ("%t");
        _dcp_asset_filename_format = dcp::NameFormat ("%t");
        _jump_to_selected = true;
@@ -154,6 +153,7 @@ Config::set_defaults ()
        _sound_output = optional<string> ();
        _last_kdm_write_type = KDM_WRITE_FLAT;
        _last_dkdm_write_type = DKDM_WRITE_INTERNAL;
+       _default_add_file_location = DefaultAddFileLocation::SAME_AS_LAST_TIME;
 
        /* I think the scaling factor here should be the ratio of the longest frame
           encode time to the shortest; if the thread count is T, longest time is L
@@ -186,7 +186,11 @@ Config::set_defaults ()
        _player_kdm_directory = boost::none;
        _audio_mapping = boost::none;
        _custom_languages.clear ();
-       _add_files_path = boost::none;
+       _initial_paths.clear();
+       _initial_paths["AddFilesPath"] = boost::none;
+       _initial_paths["AddDKDMPath"] = boost::none;
+       _initial_paths["SelectCertificatePath"] = boost::none;
+       _initial_paths["AddCombinerInputPath"] = boost::none;
        _use_isdcf_name_by_default = true;
        _write_kdms_to_disk = true;
        _email_kdms = false;
@@ -194,6 +198,7 @@ Config::set_defaults ()
        _default_kdm_duration = RoughDuration(1, RoughDuration::Unit::WEEKS);
        _auto_crop_threshold = 0.1;
        _last_release_notes_version = boost::none;
+       _allow_smpte_bv20 = false;
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -600,7 +605,9 @@ try
                } catch (std::runtime_error& e) {}
        }
 
-       _add_files_path = f.optional_string_child("AddFilesPath");
+       for (auto& initial: _initial_paths) {
+               initial.second = f.optional_string_child(initial.first);
+       }
        _use_isdcf_name_by_default = f.optional_bool_child("UseISDCFNameByDefault").get_value_or(true);
        _write_kdms_to_disk = f.optional_bool_child("WriteKDMsToDisk").get_value_or(true);
        _email_kdms = f.optional_bool_child("EmailKDMs").get_value_or(false);
@@ -615,6 +622,16 @@ try
        _main_divider_sash_position = f.optional_number_child<int>("MainDividerSashPosition");
        _main_content_divider_sash_position = f.optional_number_child<int>("MainContentDividerSashPosition");
 
+       if (auto loc = f.optional_string_child("DefaultAddFileLocation")) {
+               if (*loc == "last") {
+                       _default_add_file_location = DefaultAddFileLocation::SAME_AS_LAST_TIME;
+               } else if (*loc == "project") {
+                       _default_add_file_location = DefaultAddFileLocation::SAME_AS_PROJECT;
+               }
+       }
+
+       _allow_smpte_bv20 = f.optional_bool_child("AllowSMPTEBv20").get_value_or(false);
+
        _export.read(f.optional_node_child("Export"));
 }
 catch (...) {
@@ -1072,9 +1089,10 @@ Config::write_config () const
        for (auto const& i: _custom_languages) {
                root->add_child("CustomLanguage")->add_child_text(i.to_string());
        }
-       if (_add_files_path) {
-               /* [XML] AddFilesPath The default path that will be offered in the picker when adding files to a film. */
-               root->add_child("AddFilesPath")->add_child_text(_add_files_path->string());
+       for (auto const& initial: _initial_paths) {
+               if (initial.second) {
+                       root->add_child(initial.first)->add_child_text(initial.second->string());
+               }
        }
        root->add_child("UseISDCFNameByDefault")->add_child_text(_use_isdcf_name_by_default ? "1" : "0");
        root->add_child("WriteKDMsToDisk")->add_child_text(_write_kdms_to_disk ? "1" : "0");
@@ -1091,6 +1109,13 @@ Config::write_config () const
                root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert<string>(*_main_content_divider_sash_position));
        }
 
+       root->add_child("DefaultAddFileLocation")->add_child_text(
+               _default_add_file_location == DefaultAddFileLocation::SAME_AS_LAST_TIME ? "last" : "project"
+               );
+
+       /* [XML] AllowSMPTEBv20 1 to allow the user to choose SMPTE (Bv2.0 only) as a standard, otherwise 0 */
+       root->add_child("AllowSMPTEBv20")->add_child_text(_allow_smpte_bv20 ? "1" : "0");
+
        _export.write(root->add_child("Export"));
 
        auto target = config_write_file();
@@ -1267,7 +1292,7 @@ Config::add_to_player_history (boost::filesystem::path p)
        add_to_history_internal (_player_history, p);
 }
 
-/** Remove non-existant items from the player history */
+/** Remove non-existent items from the player history */
 void
 Config::clean_player_history ()
 {
@@ -1592,3 +1617,22 @@ save_all_config_as_zip (boost::filesystem::path zip_file)
        zipper.close ();
 }
 
+
+void
+Config::set_initial_path(string id, boost::filesystem::path path)
+{
+       auto iter = _initial_paths.find(id);
+       DCPOMATIC_ASSERT(iter != _initial_paths.end());
+       iter->second = path;
+       changed();
+}
+
+
+optional<boost::filesystem::path>
+Config::initial_path(string id) const
+{
+       auto iter = _initial_paths.find(id);
+       DCPOMATIC_ASSERT(iter != _initial_paths.end());
+       return iter->second;
+}
+