diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-12-15 00:47:53 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-12-15 00:47:53 +0100 |
| commit | 3dfe3b92df03eee932f3c92336197559c11a5913 (patch) | |
| tree | 6e746f0abe0b7867974d20bc6a80d012518e9b3d | |
| parent | d6e899f5f9e3f3db10dbe17cf68508556ad5a83c (diff) | |
Support content version metadata (#782).
| -rw-r--r-- | src/lib/film.cc | 10 | ||||
| -rw-r--r-- | src/lib/film.h | 9 | ||||
| -rw-r--r-- | src/lib/writer.cc | 1 | ||||
| -rw-r--r-- | src/wx/metadata_dialog.cc | 18 | ||||
| -rw-r--r-- | src/wx/metadata_dialog.h | 2 |
5 files changed, 39 insertions, 1 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index f7fd96a01..2a50e8c81 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -427,6 +427,7 @@ Film::metadata (bool with_content_paths) const BOOST_FOREACH (dcp::Rating i, _ratings) { i.as_xml (root->add_child("Rating")); } + root->add_child("ContentVersion")->add_child_text(_content_version); _playlist->as_xml (root->add_child ("Playlist"), with_content_paths); return doc; @@ -570,6 +571,8 @@ Film::read_metadata (optional<boost::filesystem::path> path) _ratings.push_back (dcp::Rating(i)); } + _content_version = f.optional_string_child("ContentVersion").get_value_or(""); + list<string> notes; _playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist"), _state_version, notes); @@ -1763,6 +1766,13 @@ Film::set_ratings (vector<dcp::Rating> r) _ratings = r; } +void +Film::set_content_version (string v) +{ + ChangeSignaller<Film> ch (this, CONTENT_VERSION); + _content_version = v; +} + optional<DCPTime> Film::marker (dcp::Marker type) const { diff --git a/src/lib/film.h b/src/lib/film.h index 4c45c4ffc..68f8b5334 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -239,7 +239,8 @@ public: UPLOAD_AFTER_MAKE_DCP, REENCODE_J2K, MARKERS, - RATINGS + RATINGS, + CONTENT_VERSION }; @@ -344,6 +345,10 @@ public: return _ratings; } + std::string content_version () const { + return _content_version; + } + /* SET */ void set_directory (boost::filesystem::path); @@ -377,6 +382,7 @@ public: void set_marker (dcp::Marker type, dcpomatic::DCPTime time); void unset_marker (dcp::Marker type); void set_ratings (std::vector<dcp::Rating> r); + void set_content_version (std::string v); /** Emitted when some property has of the Film is about to change or has changed */ mutable boost::signals2::signal<void (ChangeType, Property)> Change; @@ -461,6 +467,7 @@ private: bool _user_explicit_video_frame_rate; std::map<dcp::Marker, dcpomatic::DCPTime> _markers; std::vector<dcp::Rating> _ratings; + std::string _content_version; int _state_version; diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 48f40334a..cc645c8b0 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -561,6 +561,7 @@ Writer::finish () cpl->set_metadata (meta); cpl->set_ratings (vector_to_list(_film->ratings())); + cpl->set_content_version_label_text (_film->content_version()); shared_ptr<const dcp::CertificateChain> signer; if (_film->is_signed ()) { diff --git a/src/wx/metadata_dialog.cc b/src/wx/metadata_dialog.cc index 339ff869c..5462db6a4 100644 --- a/src/wx/metadata_dialog.cc +++ b/src/wx/metadata_dialog.cc @@ -73,6 +73,14 @@ MetadataDialog::MetadataDialog (wxWindow* parent, weak_ptr<Film> film) ); sizer->Add (_ratings, 1, wxEXPAND); + add_label_to_sizer (sizer, this, _("Content version"), true); + _content_version = new wxTextCtrl (this, wxID_ANY); + sizer->Add (_content_version, 1, wxEXPAND); + + shared_ptr<Film> f = _film.lock(); + DCPOMATIC_ASSERT (f); + _content_version->SetValue (std_to_wx(f->content_version())); + overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); wxSizer* buttons = CreateSeparatedButtonSizer (wxCLOSE); @@ -82,6 +90,8 @@ MetadataDialog::MetadataDialog (wxWindow* parent, weak_ptr<Film> film) overall_sizer->Layout (); overall_sizer->SetSizeHints (this); + + _content_version->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::content_version_changed, this)); } vector<dcp::Rating> @@ -99,3 +109,11 @@ MetadataDialog::set_ratings (vector<dcp::Rating> r) DCPOMATIC_ASSERT (film); film->set_ratings (r); } + +void +MetadataDialog::content_version_changed () +{ + shared_ptr<Film> film = _film.lock (); + DCPOMATIC_ASSERT (film); + film->set_content_version (wx_to_std(_content_version->GetValue())); +} diff --git a/src/wx/metadata_dialog.h b/src/wx/metadata_dialog.h index 5c574a32b..892aa89df 100644 --- a/src/wx/metadata_dialog.h +++ b/src/wx/metadata_dialog.h @@ -36,7 +36,9 @@ public: private: std::vector<dcp::Rating> ratings () const; void set_ratings (std::vector<dcp::Rating> r); + void content_version_changed (); boost::weak_ptr<Film> _film; EditableList<dcp::Rating, RatingDialog>* _ratings; + wxTextCtrl* _content_version; }; |
