summaryrefslogtreecommitdiff
path: root/src/lib/film.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-12-22 17:02:43 +0100
committerCarl Hetherington <cth@carlh.net>2024-01-28 02:01:58 +0100
commit1889bd28b5e5fcef7607b26f184ceba3f3076b2c (patch)
treef659b81b5eac00138c035fb2f8621ac7aa882b2c /src/lib/film.cc
parente9285246f543248eec88627ce61a3ccafd6f3ac2 (diff)
Remember whether Content or DCP is selected in a new ui.xml state file.
Diffstat (limited to 'src/lib/film.cc')
-rw-r--r--src/lib/film.cc51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 871ec76b8..c56cd36df 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -114,6 +114,7 @@ using namespace dcpomatic;
static constexpr char metadata_file[] = "metadata.xml";
+static constexpr char ui_state_file[] = "ui.xml";
/* 5 -> 6
@@ -2231,3 +2232,53 @@ Film::set_territory_type(TerritoryType type)
_territory_type = type;
}
+
+void
+Film::set_ui_state(string key, string value)
+{
+ _ui_state[key] = value;
+ write_ui_state();
+}
+
+
+boost::optional<std::string>
+Film::ui_state(string key) const
+{
+ auto iter = _ui_state.find(key);
+ if (iter == _ui_state.end()) {
+ return {};
+ }
+
+ return iter->second;
+}
+
+
+void
+Film::write_ui_state() const
+{
+ auto doc = make_shared<xmlpp::Document>();
+ auto root = doc->create_root_node("UI");
+
+ for (auto state: _ui_state) {
+ root->add_child(state.first)->add_child_text(state.second);
+ }
+
+ try {
+ doc->write_to_file_formatted(dcp::filesystem::fix_long_path(file(ui_state_file)).string());
+ } catch (...) {}
+}
+
+
+void
+Film::read_ui_state()
+{
+ try {
+ cxml::Document xml("UI");
+ xml.read_file(dcp::filesystem::fix_long_path(file(ui_state_file)));
+ for (auto node: xml.node_children()) {
+ if (!node->is_text()) {
+ _ui_state[node->name()] = node->content();
+ }
+ }
+ } catch (...) {}
+}