Remove the ISDCF metadata dialogue box (#1929).
authorCarl Hetherington <cth@carlh.net>
Sun, 4 Apr 2021 18:55:08 +0000 (20:55 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 4 Apr 2021 18:55:08 +0000 (20:55 +0200)
We obtain its information from elsewhere: mostly the Interop/SMPTE
metadata dialogue box.

27 files changed:
cscript
src/lib/config.cc
src/lib/config.h
src/lib/film.cc
src/lib/film.h
src/lib/isdcf_metadata.cc [deleted file]
src/lib/isdcf_metadata.h [deleted file]
src/lib/util.cc
src/lib/util.h
src/lib/wscript
src/wx/dcp_panel.cc
src/wx/dcp_panel.h
src/wx/full_config_dialog.cc
src/wx/full_language_tag_dialog.cc
src/wx/interop_metadata_dialog.cc
src/wx/interop_metadata_dialog.h
src/wx/isdcf_metadata_dialog.cc [deleted file]
src/wx/isdcf_metadata_dialog.h [deleted file]
src/wx/language_tag_dialog.cc
src/wx/metadata_dialog.cc [new file with mode: 0644]
src/wx/metadata_dialog.h [new file with mode: 0644]
src/wx/player_config_dialog.cc
src/wx/smpte_metadata_dialog.cc
src/wx/smpte_metadata_dialog.h
src/wx/wscript
test/isdcf_name_test.cc
test/test.cc

diff --git a/cscript b/cscript
index befe51b6cfca9edf6895010afeb885a5a137175e..dcb3278a7d278cb6b9d4f19bef484cdae73d04c9 100644 (file)
--- a/cscript
+++ b/cscript
@@ -385,8 +385,8 @@ def dependencies(target, options):
         # Use distro-provided FFmpeg on Arch
         deps = []
 
-    deps.append(('libdcp', 'b9c5e3f'))
-    deps.append(('libsub', '4a1de69'))
+    deps.append(('libdcp', '127b57a'))
+    deps.append(('libsub', '44e3032'))
     deps.append(('leqm-nrt', '131f971'))
     deps.append(('rtaudio', 'f619b76'))
     # We get our OpenSSL libraries from the environment, but we
index 0dcc8411775f5f6e138a4055fa0604cf13b239e5..6ec3b0588fcfcd0c47a22b4fd2099fe18c00e630 100644 (file)
@@ -309,12 +309,6 @@ try
        _dcp_product_version = f.optional_string_child("DCPProductVersion").get_value_or("");
        _dcp_j2k_comment = f.optional_string_child("DCPJ2KComment").get_value_or("");
 
-       if (version && version.get() >= 2) {
-               _default_isdcf_metadata = ISDCFMetadata (f.node_child ("ISDCFMetadata"));
-       } else {
-               _default_isdcf_metadata = ISDCFMetadata (f.node_child ("DCIMetadata"));
-       }
-
        _default_still_length = f.optional_number_child<int>("DefaultStillLength").get_value_or (10);
        _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);
@@ -688,14 +682,6 @@ Config::write_config () const
        /* [XML] UploadAfterMakeDCP 1 to upload to a TMS after making a DCP, 0 for no upload. */
        root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0");
 
-       /* [XML] ISDCFMetadata Default ISDCF metadata to use for new films; child tags are <code>&lt;ContentVersion&gt;</code>,
-          <code>&lt;AudioLanguage&gt;</code>, <code>&lt;SubtitleLanguage&gt;</code>, <code>&lt;Territory&gt;</code>,
-          <code>&lt;Rating&gt;</code>, <code>&lt;Studio&gt;</code>, <code>&lt;Facility&gt;</code>, <code>&lt;TempVersion&gt;</code>,
-          <code>&lt;PreRelease&gt;</code>, <code>&lt;RedBand&gt;</code>, <code>&lt;Chain&gt;</code>, <code>&lt;TwoDVersionOFThreeD&gt;</code>,
-          <code>&lt;MasteredLuminance&gt;</code>.
-       */
-       _default_isdcf_metadata.as_xml (root->add_child ("ISDCFMetadata"));
-
        /* [XML] DefaultStillLength Default length (in seconds) for still images in new films. */
        root->add_child("DefaultStillLength")->add_child_text (raw_convert<string> (_default_still_length));
        /* [XML] DefaultJ2KBandwidth Default bitrate (in bits per second) for JPEG2000 data in new films. */
index 0a48a00e1dfc8a71ac66e77ca26a07d73610e2c4..eb8f88da9566f061e70ccf5e87ebbcfd11ab5279 100644 (file)
@@ -25,7 +25,6 @@
 #ifndef DCPOMATIC_CONFIG_H
 #define DCPOMATIC_CONFIG_H
 
-#include "isdcf_metadata.h"
 #include "types.h"
 #include "state.h"
 #include "edid.h"
@@ -166,10 +165,6 @@ public:
                return _show_experimental_audio_processors;
        }
 
-       ISDCFMetadata default_isdcf_metadata () const {
-               return _default_isdcf_metadata;
-       }
-
        boost::optional<std::string> language () const {
                return _language;
        }
@@ -636,10 +631,6 @@ public:
                maybe_set (_show_experimental_audio_processors, e, SHOW_EXPERIMENTAL_AUDIO_PROCESSORS);
        }
 
-       void set_default_isdcf_metadata (ISDCFMetadata d) {
-               maybe_set (_default_isdcf_metadata, d);
-       }
-
        void set_language (std::string l) {
                if (_language && _language.get() == l) {
                        return;
@@ -1174,8 +1165,6 @@ private:
        bool _allow_any_container;
        /** Offer the upmixers in the audio processor settings */
        bool _show_experimental_audio_processors;
-       /** Default ISDCF metadata for newly-created Films */
-       ISDCFMetadata _default_isdcf_metadata;
        boost::optional<std::string> _language;
        /** Default length of still image content (seconds) */
        int _default_still_length;
index 7dd0ff6f158273fbceca4f204fbdffc04c19d29f..a9ac82b5a227224a1a01ea97c074f4028ac94a67 100644 (file)
@@ -155,7 +155,6 @@ Film::Film (optional<boost::filesystem::path> dir)
        , _encrypted (false)
        , _context_id (dcp::make_uuid ())
        , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ())
-       , _isdcf_metadata (Config::instance()->default_isdcf_metadata ())
        , _video_frame_rate (24)
        , _audio_channels (Config::instance()->default_dcp_audio_channels ())
        , _three_d (false)
@@ -446,7 +445,6 @@ Film::metadata (bool with_content_paths) const
 
        root->add_child("Resolution")->add_child_text (resolution_to_string (_resolution));
        root->add_child("J2KBandwidth")->add_child_text (raw_convert<string> (_j2k_bandwidth));
-       _isdcf_metadata.as_xml (root->add_child ("ISDCFMetadata"));
        root->add_child("VideoFrameRate")->add_child_text (raw_convert<string> (_video_frame_rate));
        root->add_child("ISDCFDate")->add_child_text (boost::gregorian::to_iso_string (_isdcf_date));
        root->add_child("AudioChannels")->add_child_text (raw_convert<string> (_audio_channels));
@@ -490,6 +488,13 @@ Film::metadata (bool with_content_paths) const
        if (_facility) {
                root->add_child("Facility")->add_child_text(*_facility);
        }
+       if (_studio) {
+               root->add_child("Studio")->add_child_text(*_studio);
+       }
+       root->add_child("TempVersion")->add_child_text(_temp_version ? "1" : "0");
+       root->add_child("PreRelease")->add_child_text(_pre_release ? "1" : "0");
+       root->add_child("RedBand")->add_child_text(_red_band ? "1" : "0");
+       root->add_child("TwoDVersionOfThreeD")->add_child_text(_two_d_version_of_three_d ? "1" : "0");
        if (_luminance) {
                root->add_child("LuminanceValue")->add_child_text(raw_convert<string>(_luminance->value()));
                root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance->unit()));
@@ -565,11 +570,9 @@ Film::read_metadata (optional<boost::filesystem::path> path)
        _name = f.string_child ("Name");
        if (_state_version >= 9) {
                _use_isdcf_name = f.bool_child ("UseISDCFName");
-               _isdcf_metadata = ISDCFMetadata (f.node_child ("ISDCFMetadata"));
                _isdcf_date = boost::gregorian::from_undelimited_string (f.string_child ("ISDCFDate"));
        } else {
                _use_isdcf_name = f.bool_child ("UseDCIName");
-               _isdcf_metadata = ISDCFMetadata (f.node_child ("DCIMetadata"));
                _isdcf_date = boost::gregorian::from_undelimited_string (f.string_child ("DCIDate"));
        }
 
@@ -666,6 +669,11 @@ Film::read_metadata (optional<boost::filesystem::path> path)
        _chain = f.optional_string_child("Chain");
        _distributor = f.optional_string_child("Distributor");
        _facility = f.optional_string_child("Facility");
+       _studio = f.optional_string_child("Studio");
+       _temp_version = f.optional_bool_child("TempVersion").get_value_or(false);
+       _pre_release = f.optional_bool_child("PreRelease").get_value_or(false);
+       _red_band = f.optional_bool_child("RedBand").get_value_or(false);
+       _two_d_version_of_three_d = f.optional_bool_child("TwoDVersionOfThreeD").get_value_or(false);
 
        auto value = f.optional_number_child<float>("LuminanceValue");
        auto unit = f.optional_string_child("LuminanceUnit");
@@ -846,37 +854,49 @@ Film::isdcf_name (bool if_created_now) const
 
        if (dcp_content_type()) {
                d += "_" + dcp_content_type()->isdcf_name();
-               d += "-" + raw_convert<string>(isdcf_metadata().content_version);
+               string version = "1";
+               if (_interop) {
+                       if (!_content_versions.empty()) {
+                               auto cv = _content_versions[0];
+                               if (!cv.empty() && std::all_of(cv.begin(), cv.end(), isdigit)) {
+                                       version = cv;
+                               }
+                       }
+               } else {
+                       version = dcp::raw_convert<string>(_version_number);
+               }
+               d += "-" + version;
        }
 
-       auto const dm = isdcf_metadata ();
-
-       if (dm.temp_version) {
+       if (_temp_version) {
                d += "-Temp";
        }
 
-       if (dm.pre_release) {
+       if (_pre_release) {
                d += "-Pre";
        }
 
-       if (dm.red_band) {
+       if (_red_band) {
                d += "-RedBand";
        }
 
-       if (!dm.chain.empty ()) {
-               d += "-" + dm.chain;
+       if (_chain && !_chain->empty()) {
+               d += "-" + *_chain;
        }
 
        if (three_d ()) {
                d += "-3D";
        }
 
-       if (dm.two_d_version_of_three_d) {
+       if (_two_d_version_of_three_d) {
                d += "-2D";
        }
 
-       if (!dm.mastered_luminance.empty ()) {
-               d += "-" + dm.mastered_luminance;
+       if (_luminance) {
+               auto fl = _luminance->value_in_foot_lamberts();
+               char buffer[64];
+               snprintf (buffer, sizeof(buffer), "%.1f", fl);
+               d += String::compose("-%1fl", buffer);
        }
 
        if (video_frame_rate() != 24) {
@@ -908,9 +928,8 @@ Film::isdcf_name (bool if_created_now) const
 
        auto audio_langs = audio_languages();
        auto audio_language = (audio_langs.empty() || !audio_langs.front().language()) ? "XX" : audio_langs.front().language()->subtag();
-       transform (audio_language.begin(), audio_language.end(), audio_language.begin(), ::toupper);
 
-       d += "_" + audio_language;
+       d += "_" + to_upper (audio_language);
 
        /* I'm not clear on the precise details of the convention for CCAP labelling;
           for now I'm just appending -CCAP if we have any closed captions.
@@ -934,7 +953,7 @@ Film::isdcf_name (bool if_created_now) const
                if (burnt_in) {
                        transform (lang.begin(), lang.end(), lang.begin(), ::tolower);
                } else {
-                       transform (lang.begin(), lang.end(), lang.begin(), ::toupper);
+                       lang = to_upper (lang);
                }
 
                d += "-" + lang;
@@ -946,12 +965,13 @@ Film::isdcf_name (bool if_created_now) const
                d += "-XX";
        }
 
-       if (!dm.territory.empty ()) {
-               d += "_" + dm.territory;
-               if (dm.rating.empty ()) {
+       if (_release_territory) {
+               auto territory = _release_territory->subtag();
+               d += "_" + to_upper (territory);
+               if (_ratings.empty ()) {
                        d += "-NR";
                } else {
-                       d += "-" + dm.rating;
+                       d += "-" + _ratings[0].label;
                }
        }
 
@@ -975,8 +995,8 @@ Film::isdcf_name (bool if_created_now) const
 
        d += "_" + resolution_to_string (_resolution);
 
-       if (!dm.studio.empty ()) {
-               d += "_" + dm.studio;
+       if (_studio && _studio->length() >= 2) {
+               d += "_" + to_upper (_studio->substr(0, 4));
        }
 
        if (if_created_now) {
@@ -985,8 +1005,8 @@ Film::isdcf_name (bool if_created_now) const
                d += "_" + boost::gregorian::to_iso_string (_isdcf_date);
        }
 
-       if (!dm.facility.empty ()) {
-               d += "_" + dm.facility;
+       if (_facility && _facility->length() >= 3) {
+               d += "_" + to_upper(_facility->substr(0, 3));
        }
 
        if (_interop) {
@@ -1106,13 +1126,6 @@ Film::set_j2k_bandwidth (int b)
        _j2k_bandwidth = b;
 }
 
-void
-Film::set_isdcf_metadata (ISDCFMetadata m)
-{
-       FilmChangeSignaller ch (this, Property::ISDCF_METADATA);
-       _isdcf_metadata = m;
-}
-
 /** @param f New frame rate.
  *  @param user_explicit true if this comes from a direct user instruction, false if it is from
  *  DCP-o-matic being helpful.
@@ -1140,9 +1153,8 @@ Film::set_three_d (bool t)
        FilmChangeSignaller ch (this, Property::THREE_D);
        _three_d = t;
 
-       if (_three_d && _isdcf_metadata.two_d_version_of_three_d) {
-               FilmChangeSignaller ch (this, Property::ISDCF_METADATA);
-               _isdcf_metadata.two_d_version_of_three_d = false;
+       if (_three_d && _two_d_version_of_three_d) {
+               set_two_d_version_of_three_d (false);
        }
 }
 
@@ -1867,7 +1879,6 @@ Film::use_template (string name)
        _audio_processor = _template_film->_audio_processor;
        _reel_type = _template_film->_reel_type;
        _reel_length = _template_film->_reel_length;
-       _isdcf_metadata = _template_film->_isdcf_metadata;
 }
 
 pair<double, double>
@@ -2050,6 +2061,14 @@ Film::set_facility (optional<string> f)
 }
 
 
+void
+Film::set_studio (optional<string> s)
+{
+       FilmChangeSignaller ch (this, Property::STUDIO);
+       _studio = s;
+}
+
+
 optional<DCPTime>
 Film::marker (dcp::Marker type) const
 {
@@ -2107,3 +2126,36 @@ Film::add_ffoc_lfoc (Markers& markers) const
                markers[dcp::Marker::LFOC] = length() - DCPTime::from_frames(1, video_frame_rate());
        }
 }
+
+
+void
+Film::set_temp_version (bool t)
+{
+       FilmChangeSignaller ch (this, Property::TEMP_VERSION);
+       _temp_version = t;
+}
+
+
+void
+Film::set_pre_release (bool p)
+{
+       FilmChangeSignaller ch (this, Property::PRE_RELEASE);
+       _pre_release = p;
+}
+
+
+void
+Film::set_red_band (bool r)
+{
+       FilmChangeSignaller ch (this, Property::RED_BAND);
+       _red_band = r;
+}
+
+
+void
+Film::set_two_d_version_of_three_d (bool t)
+{
+       FilmChangeSignaller ch (this, Property::TWO_D_VERSION_OF_THREE_D);
+       _two_d_version_of_three_d = t;
+}
+
index 6b50bba5e9759a2ffd39e83dce4f988863bb3451..5fc56acfb0613570bc29b1067181703cc03b5319 100644 (file)
@@ -29,7 +29,6 @@
 #include "change_signaller.h"
 #include "dcp_text_track.h"
 #include "frame_rate_change.h"
-#include "isdcf_metadata.h"
 #include "signaller.h"
 #include "types.h"
 #include "util.h"
@@ -217,7 +216,6 @@ public:
                RESOLUTION,
                ENCRYPTED,
                J2K_BANDWIDTH,
-               ISDCF_METADATA,
                VIDEO_FRAME_RATE,
                AUDIO_CHANNELS,
                /** The setting of _three_d has changed */
@@ -239,6 +237,11 @@ public:
                CHAIN,
                DISTRIBUTOR,
                FACILITY,
+               STUDIO,
+               TEMP_VERSION,
+               PRE_RELEASE,
+               RED_BAND,
+               TWO_D_VERSION_OF_THREE_D,
                LUMINANCE,
        };
 
@@ -281,10 +284,6 @@ public:
                return _j2k_bandwidth;
        }
 
-       ISDCFMetadata isdcf_metadata () const {
-               return _isdcf_metadata;
-       }
-
        /** @return The frame rate of the DCP */
        int video_frame_rate () const {
                return _video_frame_rate;
@@ -373,6 +372,26 @@ public:
                return _facility;
        }
 
+       boost::optional<std::string> studio () const {
+               return _studio;
+       }
+
+       bool temp_version () const {
+               return _temp_version;
+       }
+
+       bool pre_release () const {
+               return _pre_release;
+       }
+
+       bool red_band () const {
+               return _red_band;
+       }
+
+       bool two_d_version_of_three_d () const {
+               return _two_d_version_of_three_d;
+       }
+
        boost::optional<dcp::Luminance> luminance () const {
                return _luminance;
        }
@@ -393,7 +412,6 @@ public:
        void set_resolution (Resolution, bool user_explicit = true);
        void set_encrypted (bool);
        void set_j2k_bandwidth (int);
-       void set_isdcf_metadata (ISDCFMetadata);
        void set_video_frame_rate (int rate, bool user_explicit = false);
        void set_audio_channels (int);
        void set_three_d (bool);
@@ -416,6 +434,11 @@ public:
        void set_status (dcp::Status s);
        void set_chain (boost::optional<std::string> c = boost::none);
        void set_facility (boost::optional<std::string> f = boost::none);
+       void set_studio (boost::optional<std::string> s = boost::none);
+       void set_temp_version (bool t);
+       void set_pre_release (bool p);
+       void set_red_band (bool r);
+       void set_two_d_version_of_three_d (bool t);
        void set_distributor (boost::optional<std::string> d = boost::none);
        void set_luminance (boost::optional<dcp::Luminance> l = boost::none);
 
@@ -488,8 +511,6 @@ private:
        std::string _context_id;
        /** bandwidth for J2K files in bits per second */
        int _j2k_bandwidth;
-       /** ISDCF naming stuff */
-       ISDCFMetadata _isdcf_metadata;
        /** Frames per second to run our DCP at */
        int _video_frame_rate;
        /** The date that we should use in a ISDCF name */
@@ -522,6 +543,11 @@ private:
        boost::optional<std::string> _chain;
        boost::optional<std::string> _distributor;
        boost::optional<std::string> _facility;
+       boost::optional<std::string> _studio;
+       bool _temp_version = false;
+       bool _pre_release = false;
+       bool _red_band = false;
+       bool _two_d_version_of_three_d = false;
        boost::optional<dcp::Luminance> _luminance;
 
        int _state_version;
diff --git a/src/lib/isdcf_metadata.cc b/src/lib/isdcf_metadata.cc
deleted file mode 100644 (file)
index 6adbd0f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "isdcf_metadata.h"
-#include "warnings.h"
-#include <dcp/raw_convert.h>
-#include <libcxml/cxml.h>
-DCPOMATIC_DISABLE_WARNINGS
-#include <libxml++/libxml++.h>
-DCPOMATIC_ENABLE_WARNINGS
-#include <iostream>
-
-#include "i18n.h"
-
-using std::string;
-using std::shared_ptr;
-using dcp::raw_convert;
-
-ISDCFMetadata::ISDCFMetadata (cxml::ConstNodePtr node)
-       : content_version (node->number_child<int> ("ContentVersion"))
-       , territory (node->string_child ("Territory"))
-       , rating (node->string_child ("Rating"))
-       , studio (node->string_child ("Studio"))
-       , facility (node->string_child ("Facility"))
-       /* This stuff was added later */
-       , temp_version (node->optional_bool_child ("TempVersion").get_value_or (false))
-       , pre_release (node->optional_bool_child ("PreRelease").get_value_or (false))
-       , red_band (node->optional_bool_child ("RedBand").get_value_or (false))
-       , chain (node->optional_string_child ("Chain").get_value_or (""))
-       , two_d_version_of_three_d (node->optional_bool_child ("TwoDVersionOfThreeD").get_value_or (false))
-       , mastered_luminance (node->optional_string_child ("MasteredLuminance").get_value_or (""))
-{
-
-}
-
-void
-ISDCFMetadata::as_xml (xmlpp::Node* root) const
-{
-       root->add_child("ContentVersion")->add_child_text (raw_convert<string> (content_version));
-       root->add_child("Territory")->add_child_text (territory);
-       root->add_child("Rating")->add_child_text (rating);
-       root->add_child("Studio")->add_child_text (studio);
-       root->add_child("Facility")->add_child_text (facility);
-       root->add_child("TempVersion")->add_child_text (temp_version ? "1" : "0");
-       root->add_child("PreRelease")->add_child_text (pre_release ? "1" : "0");
-       root->add_child("RedBand")->add_child_text (red_band ? "1" : "0");
-       root->add_child("Chain")->add_child_text (chain);
-       root->add_child("TwoDVersionOfThreeD")->add_child_text (two_d_version_of_three_d ? "1" : "0");
-       root->add_child("MasteredLuminance")->add_child_text (mastered_luminance);
-}
-
-bool
-operator== (ISDCFMetadata const & a, ISDCFMetadata const & b)
-{
-       return a.content_version == b.content_version &&
-               a.territory == b.territory &&
-               a.rating == b.rating &&
-               a.studio == b.studio &&
-               a.facility == b.facility &&
-               a.temp_version == b.temp_version &&
-               a.pre_release == b.pre_release &&
-               a.red_band == b.red_band &&
-               a.chain == b.chain &&
-               a.two_d_version_of_three_d == b.two_d_version_of_three_d &&
-               a.mastered_luminance == b.mastered_luminance;
-}
diff --git a/src/lib/isdcf_metadata.h b/src/lib/isdcf_metadata.h
deleted file mode 100644 (file)
index fd021b8..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#ifndef DCPOMATIC_ISDCF_METADATA_H
-#define DCPOMATIC_ISDCF_METADATA_H
-
-#include <libcxml/cxml.h>
-#include <string>
-
-namespace xmlpp {
-       class Node;
-}
-
-class ISDCFMetadata
-{
-public:
-       ISDCFMetadata ()
-               : content_version (1)
-               , temp_version (false)
-               , pre_release (false)
-               , red_band (false)
-               , two_d_version_of_three_d (false)
-       {}
-
-       explicit ISDCFMetadata (cxml::ConstNodePtr);
-
-       void as_xml (xmlpp::Node *) const;
-       void read_old_metadata (std::string, std::string);
-
-       int content_version;
-       std::string territory;
-       std::string rating;
-       std::string studio;
-       std::string facility;
-       /** true if this is a temporary version (without final picture or sound) */
-       bool temp_version;
-       /** true if this is a pre-release version (final picture and sound, but without accessibility features) */
-       bool pre_release;
-       /** true if this has adult content */
-       bool red_band;
-       /** specific theatre chain or event */
-       std::string chain;
-       /** true if this is a 2D version of content that also exists in 3D */
-       bool two_d_version_of_three_d;
-       /** mastered luminance if there are multiple versions distributed (e.g. 35, 4fl, 6fl etc.) */
-       std::string mastered_luminance;
-};
-
-bool operator== (ISDCFMetadata const & a, ISDCFMetadata const & b);
-
-#endif
index 24ea42b8f2e0e945a31488a414e42ca1f4017f57..d3511e8c7e34e0b1c5f5744147b18d83fb944837 100644 (file)
@@ -1167,3 +1167,12 @@ default_font_file ()
 
        return liberation_normal;
 }
+
+
+string
+to_upper (string s)
+{
+       transform (s.begin(), s.end(), s.begin(), ::toupper);
+       return s;
+}
+
index ceb30701c3bbb956819bd60f30f3116e67021e87..7f8106f3c543775bfb10e62a04c00af7422fa9bd 100644 (file)
@@ -122,6 +122,7 @@ extern void copy_in_bits (boost::filesystem::path from, boost::filesystem::path
 extern dcp::Size scale_for_display (dcp::Size s, dcp::Size display_container, dcp::Size film_container);
 extern dcp::DecryptedKDM decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm);
 extern boost::filesystem::path default_font_file ();
+extern std::string to_upper (std::string s);
 
 template <class T>
 std::list<T>
index 1b45152a4fd9bab8c5c781e3e998b9f25d5e41bc..7cbd85a4c2cbc66f7594cacf9630016589181e90 100644 (file)
@@ -121,7 +121,6 @@ sources = """
           image_examiner.cc
           image_filename_sorter.cc
           image_proxy.cc
-          isdcf_metadata.cc
           j2k_image_proxy.cc
           job.cc
           job_manager.cc
index 8501eae9ce8b62909297f7b0c7a4e61d6e4976df..302ed4184b8064de4bdcc356a90ae3734f7da76d 100644 (file)
@@ -20,7 +20,6 @@
 
 #include "dcp_panel.h"
 #include "wx_util.h"
-#include "isdcf_metadata_dialog.h"
 #include "audio_dialog.h"
 #include "focus_manager.h"
 #include "check_box.h"
@@ -85,7 +84,6 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v
        FocusManager::instance()->add(_name);
 
        _use_isdcf_name = new CheckBox (_panel, _("Use ISDCF name"));
-       _edit_isdcf_button = new Button (_panel, _("Details..."));
        _copy_isdcf_name_button = new Button (_panel, _("Copy as name"));
 
        /* wxST_ELLIPSIZE_MIDDLE works around a bug in GTK2 and/or wxWidgets, see
@@ -126,7 +124,6 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmViewer> v
 
        _name->Bind                  (wxEVT_TEXT,     boost::bind (&DCPPanel::name_changed, this));
        _use_isdcf_name->Bind        (wxEVT_CHECKBOX, boost::bind (&DCPPanel::use_isdcf_name_toggled, this));
-       _edit_isdcf_button->Bind     (wxEVT_BUTTON,   boost::bind (&DCPPanel::edit_isdcf_button_clicked, this));
        _copy_isdcf_name_button->Bind(wxEVT_BUTTON,   boost::bind (&DCPPanel::copy_isdcf_name_button_clicked, this));
        _dcp_content_type->Bind      (wxEVT_CHOICE,   boost::bind (&DCPPanel::dcp_content_type_changed, this));
        _encrypted->Bind             (wxEVT_CHECKBOX, boost::bind (&DCPPanel::encrypted_toggled, this));
@@ -162,8 +159,8 @@ DCPPanel::add_to_grid ()
 
        auto name_sizer = new wxBoxSizer (wxHORIZONTAL);
        name_sizer->Add (_name_label, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
-       name_sizer->Add (_name, 1, wxALIGN_CENTER_VERTICAL);
-       _grid->Add (name_sizer, wxGBPosition(r, 0), wxGBSpan(1, 2), wxEXPAND);
+       name_sizer->Add (_name, 1, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
+       _grid->Add (name_sizer, wxGBPosition(r, 0), wxGBSpan(1, 2), wxRIGHT | wxEXPAND, DCPOMATIC_DIALOG_BORDER);
        ++r;
 
        int flags = wxALIGN_CENTER_VERTICAL;
@@ -173,14 +170,13 @@ DCPPanel::add_to_grid ()
 
        _grid->Add (_use_isdcf_name, wxGBPosition (r, 0), wxDefaultSpan, flags);
        {
-               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
-               s->Add (_edit_isdcf_button, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP);
-               s->Add (_copy_isdcf_name_button, 1, wxEXPAND | wxLEFT, DCPOMATIC_SIZER_X_GAP);
+               auto s = new wxBoxSizer (wxHORIZONTAL);
+               s->Add (_copy_isdcf_name_button, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
                _grid->Add (s, wxGBPosition (r, 1), wxDefaultSpan, wxEXPAND);
        }
        ++r;
 
-       _grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan (1, 2), wxALIGN_CENTER_VERTICAL | wxEXPAND);
+       _grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan(1, 2), wxALIGN_CENTER_VERTICAL);
        ++r;
 
        add_label_to_sizer (_grid, _dcp_content_type_label, true, wxGBPosition (r, 0));
@@ -323,6 +319,7 @@ DCPPanel::metadata_clicked ()
                }
 
                _interop_metadata_dialog = new InteropMetadataDialog (_panel, _film);
+               _interop_metadata_dialog->setup ();
                _interop_metadata_dialog->Show ();
        } else {
                if (_smpte_metadata_dialog) {
@@ -331,6 +328,7 @@ DCPPanel::metadata_clicked ()
                }
 
                _smpte_metadata_dialog = new SMPTEMetadataDialog (_panel, _film);
+               _smpte_metadata_dialog->setup ();
                _smpte_metadata_dialog->Show ();
        }
 }
@@ -377,12 +375,8 @@ DCPPanel::film_changed (Film::Property p)
                        }
                }
                setup_dcp_name ();
-               _edit_isdcf_button->Enable (_film->use_isdcf_name ());
                break;
        }
-       case Film::Property::ISDCF_METADATA:
-               setup_dcp_name ();
-               break;
        case Film::Property::VIDEO_FRAME_RATE:
        {
                bool done = false;
@@ -444,6 +438,20 @@ DCPPanel::film_changed (Film::Property p)
                setup_dcp_name ();
                setup_sensitivity ();
                break;
+       case Film::Property::CONTENT_VERSIONS:
+       case Film::Property::VERSION_NUMBER:
+       case Film::Property::RELEASE_TERRITORY:
+       case Film::Property::RATINGS:
+       case Film::Property::FACILITY:
+       case Film::Property::STUDIO:
+       case Film::Property::TEMP_VERSION:
+       case Film::Property::PRE_RELEASE:
+       case Film::Property::RED_BAND:
+       case Film::Property::TWO_D_VERSION_OF_THREE_D:
+       case Film::Property::CHAIN:
+       case Film::Property::LUMINANCE:
+               setup_dcp_name ();
+               break;
        default:
                break;
        }
@@ -560,7 +568,6 @@ DCPPanel::set_film (shared_ptr<Film> film)
        film_changed (Film::Property::RESOLUTION);
        film_changed (Film::Property::ENCRYPTED);
        film_changed (Film::Property::J2K_BANDWIDTH);
-       film_changed (Film::Property::ISDCF_METADATA);
        film_changed (Film::Property::VIDEO_FRAME_RATE);
        film_changed (Film::Property::AUDIO_CHANNELS);
        film_changed (Film::Property::SEQUENCE);
@@ -586,7 +593,6 @@ DCPPanel::setup_sensitivity ()
 {
        _name->Enable                   (_generally_sensitive);
        _use_isdcf_name->Enable         (_generally_sensitive);
-       _edit_isdcf_button->Enable      (_generally_sensitive);
        _dcp_content_type->Enable       (_generally_sensitive);
        _copy_isdcf_name_button->Enable (_generally_sensitive);
        _encrypted->Enable              (_generally_sensitive);
@@ -632,19 +638,6 @@ DCPPanel::use_isdcf_name_toggled ()
        _film->set_use_isdcf_name (_use_isdcf_name->GetValue ());
 }
 
-void
-DCPPanel::edit_isdcf_button_clicked ()
-{
-       if (!_film) {
-               return;
-       }
-
-       auto d = new ISDCFMetadataDialog (_panel, _film->isdcf_metadata (), _film->three_d ());
-       d->ShowModal ();
-       _film->set_isdcf_metadata (d->isdcf_metadata ());
-       d->Destroy ();
-}
-
 void
 DCPPanel::setup_dcp_name ()
 {
index 9b362a26cd540118a433e2860dc9f64ef3649458..a076e4bb4eabd9acca21b31e1106825cb8881c0d 100644 (file)
@@ -64,7 +64,6 @@ public:
 private:
        void name_changed ();
        void use_isdcf_name_toggled ();
-       void edit_isdcf_button_clicked ();
        void copy_isdcf_name_button_clicked ();
        void container_changed ();
        void dcp_content_type_changed ();
@@ -118,7 +117,6 @@ private:
        wxStaticText* _container_label;
        wxChoice* _container;
        wxStaticText* _container_size;
-       wxButton* _edit_isdcf_button;
        wxButton* _copy_isdcf_name_button;
        wxStaticText* _j2k_bandwidth_label;
        wxStaticText* _mbits_label;
index 3b07c7765f9a0299e95da1fe234d38d996e57564..9622955282725648e2e346ef78e77f59876df11d 100644 (file)
@@ -28,7 +28,6 @@
 #include "filter_dialog.h"
 #include "dir_picker_ctrl.h"
 #include "file_picker_ctrl.h"
-#include "isdcf_metadata_dialog.h"
 #include "server_dialog.h"
 #include "make_chain_dialog.h"
 #include "email_dialog.h"
@@ -275,10 +274,6 @@ private:
 #endif
                table->Add (_directory, 1, wxEXPAND);
 
-               add_label_to_sizer (table, _panel, _("Default ISDCF name details"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL);
-               _isdcf_metadata_button = new Button (_panel, _("Edit..."));
-               table->Add (_isdcf_metadata_button);
-
                add_label_to_sizer (table, _panel, _("Default container"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL);
                _container = new wxChoice (_panel, wxID_ANY);
                table->Add (_container);
@@ -328,8 +323,6 @@ private:
                _directory->Bind (wxEVT_DIRPICKER_CHANGED, boost::bind (&DefaultsPage::directory_changed, this));
                _kdm_directory->Bind (wxEVT_DIRPICKER_CHANGED, boost::bind (&DefaultsPage::kdm_directory_changed, this));
 
-               _isdcf_metadata_button->Bind (wxEVT_BUTTON, boost::bind (&DefaultsPage::edit_isdcf_metadata_clicked, this));
-
                for (auto i: Ratio::containers()) {
                        _container->Append (std_to_wx(i->container_nickname()));
                }
@@ -414,14 +407,6 @@ private:
                Config::instance()->set_default_kdm_directory (wx_to_std (_kdm_directory->GetPath ()));
        }
 
-       void edit_isdcf_metadata_clicked ()
-       {
-               ISDCFMetadataDialog* d = new ISDCFMetadataDialog (_panel, Config::instance()->default_isdcf_metadata (), false);
-               d->ShowModal ();
-               Config::instance()->set_default_isdcf_metadata (d->isdcf_metadata ());
-               d->Destroy ();
-       }
-
        void still_length_changed ()
        {
                Config::instance()->set_default_still_length (_still_length->GetValue ());
@@ -446,7 +431,6 @@ private:
 
        wxSpinCtrl* _j2k_bandwidth;
        wxSpinCtrl* _audio_delay;
-       wxButton* _isdcf_metadata_button;
        wxSpinCtrl* _still_length;
 #ifdef DCPOMATIC_USE_OWN_PICKER
        DirPickerCtrl* _directory;
index 2b3aeb7debc87f8cbe41d2c4bce7a2a83433d832..a26dcc0bb81a2862ca77a2d612292e6d37effa1f 100644 (file)
@@ -173,7 +173,7 @@ private:
        {
                auto search = _search->GetValue();
                _list->set_search (search.ToStdString());
-               if (search.Length() > 0) {
+               if (search.Length() > 0 && _list->GetItemCount() > 0) {
                        _list->EnsureVisible (0);
                }
                SearchChanged (_search->GetValue().ToStdString());
index aa61984b36275c9d388005872167b1ed771793b2..61aa2349867426cdb6ba334d53af71bbd7b84e5a 100644 (file)
@@ -38,24 +38,22 @@ using namespace boost::placeholders;
 
 
 InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr<Film> film)
-       : wxDialog (parent, wxID_ANY, _("Metadata"))
-       , _film (film)
+       : MetadataDialog (parent, film)
 {
-       auto overall_sizer = new wxBoxSizer (wxVERTICAL);
-       SetSizer (overall_sizer);
 
-       auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
-       sizer->AddGrowableCol (1, 1);
+}
 
-       auto f = _film.lock();
-       DCPOMATIC_ASSERT (f);
+void
+InteropMetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer)
+{
+       MetadataDialog::setup_standard (panel, sizer);
 
        {
                int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP;
 #ifdef __WXOSX__
                flags |= wxALIGN_RIGHT;
 #endif
-               auto m = create_label (this, _("Ratings"), true);
+               auto m = create_label (panel, _("Ratings"), true);
                sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP);
        }
 
@@ -63,7 +61,7 @@ InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr<Film> f
        columns.push_back (EditableListColumn(_("Agency"), 200, true));
        columns.push_back (EditableListColumn(_("Label"), 50, true));
        _ratings = new EditableList<dcp::Rating, RatingDialog> (
-               this,
+               panel,
                columns,
                boost::bind(&InteropMetadataDialog::ratings, this),
                boost::bind(&InteropMetadataDialog::set_ratings, this, _1),
@@ -78,23 +76,13 @@ InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr<Film> f
                );
        sizer->Add (_ratings, 1, wxEXPAND);
 
-       add_label_to_sizer (sizer, this, _("Content version"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
-       _content_version = new wxTextCtrl (this, wxID_ANY);
+       add_label_to_sizer (sizer, panel, _("Content version"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _content_version = new wxTextCtrl (panel, wxID_ANY);
        sizer->Add (_content_version, 1, wxEXPAND);
 
-       auto cv = f->content_versions();
+       auto cv = film()->content_versions();
        _content_version->SetValue (std_to_wx(cv.empty() ? "" : cv[0]));
 
-       overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
-
-       auto buttons = CreateSeparatedButtonSizer (wxCLOSE);
-       if (buttons) {
-               overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
-       }
-
-       overall_sizer->Layout ();
-       overall_sizer->SetSizeHints (this);
-
        _content_version->Bind (wxEVT_TEXT, boost::bind(&InteropMetadataDialog::content_version_changed, this));
        _content_version->SetFocus ();
 }
@@ -103,25 +91,19 @@ InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr<Film> f
 vector<dcp::Rating>
 InteropMetadataDialog::ratings () const
 {
-       auto film = _film.lock ();
-       DCPOMATIC_ASSERT (film);
-       return film->ratings ();
+       return film()->ratings ();
 }
 
+
 void
 InteropMetadataDialog::set_ratings (vector<dcp::Rating> r)
 {
-       auto film = _film.lock ();
-       DCPOMATIC_ASSERT (film);
-       film->set_ratings (r);
+       film()->set_ratings (r);
 }
 
+
 void
 InteropMetadataDialog::content_version_changed ()
 {
-       auto film = _film.lock ();
-       DCPOMATIC_ASSERT (film);
-       vector<string> cv;
-       cv.push_back (wx_to_std(_content_version->GetValue()));
-       film->set_content_versions (cv);
+       film()->set_content_versions ({ wx_to_std(_content_version->GetValue()) });
 }
index b8a1a36e61c121d0c74e0f54b66a3c5033856805..b730c12381e85868f877fd77bb417f8884fb297e 100644 (file)
@@ -20,6 +20,7 @@
 
 
 #include "editable_list.h"
+#include "metadata_dialog.h"
 #include <dcp/language_tag.h>
 #include <dcp/types.h>
 #include <wx/wx.h>
@@ -31,17 +32,19 @@ class LanguageTagWidget;
 class RatingDialog;
 
 
-class InteropMetadataDialog : public wxDialog
+class InteropMetadataDialog : public MetadataDialog
 {
 public:
        InteropMetadataDialog (wxWindow* parent, std::weak_ptr<Film> film);
 
 private:
-       std::vector<dcp::Rating> ratings () const;
+       void setup_standard (wxPanel* panel, wxSizer* sizer) override;
+
        void set_ratings (std::vector<dcp::Rating> r);
        void content_version_changed ();
 
-       std::weak_ptr<Film> _film;
+       std::vector<dcp::Rating> ratings () const;
+
        EditableList<dcp::Rating, RatingDialog>* _ratings;
        wxTextCtrl* _content_version;
 };
diff --git a/src/wx/isdcf_metadata_dialog.cc b/src/wx/isdcf_metadata_dialog.cc
deleted file mode 100644 (file)
index 2fde930..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "isdcf_metadata_dialog.h"
-#include "wx_util.h"
-#include "check_box.h"
-#include "lib/film.h"
-#include <wx/wx.h>
-#include <wx/sizer.h>
-#include <wx/spinctrl.h>
-
-using std::shared_ptr;
-
-/** @param parent Parent window.
- *  @param dm Initial ISDCF metadata.
- *  @param threed true if the film is in 3D.
- */
-ISDCFMetadataDialog::ISDCFMetadataDialog (wxWindow* parent, ISDCFMetadata dm, bool threed)
-       : TableDialog (parent, _("ISDCF name"), 2, 1, true)
-{
-       add (_("Content version"), true);
-       _content_version = add (new wxSpinCtrl (this, wxID_ANY));
-
-       add (_("Territory (e.g. UK)"), true);
-       _territory = add (new wxTextCtrl (this, wxID_ANY));
-
-       add (_("Rating (e.g. 15)"), true);
-       _rating = add (new wxTextCtrl (this, wxID_ANY));
-
-       add (_("Studio (e.g. TCF)"), true);
-       _studio = add (new wxTextCtrl (this, wxID_ANY));
-
-       add (_("Facility (e.g. DLA)"), true);
-       _facility = add (new wxTextCtrl (this, wxID_ANY));
-
-       _temp_version = add (new CheckBox(this, _("Temp version")));
-       add_spacer ();
-
-       _pre_release = add (new CheckBox(this, _("Pre-release")));
-       add_spacer ();
-
-       _red_band = add (new CheckBox(this, _("Red band")));
-       add_spacer ();
-
-       add (_("Chain"), true);
-       _chain = add (new wxTextCtrl (this, wxID_ANY));
-
-       _two_d_version_of_three_d = add (new CheckBox(this, _("2D version of content available in 3D")));
-       add_spacer ();
-
-       if (threed) {
-               _two_d_version_of_three_d->Enable (false);
-       }
-
-       add (_("Mastered luminance (e.g. 14fl)"), true);
-       _mastered_luminance = add (new wxTextCtrl (this, wxID_ANY));
-
-       _content_version->SetRange (1, 1024);
-
-       _content_version->SetValue (dm.content_version);
-       _territory->SetValue (std_to_wx (dm.territory));
-       _rating->SetValue (std_to_wx (dm.rating));
-       _studio->SetValue (std_to_wx (dm.studio));
-       _facility->SetValue (std_to_wx (dm.facility));
-       _temp_version->SetValue (dm.temp_version);
-       _pre_release->SetValue (dm.pre_release);
-       _red_band->SetValue (dm.red_band);
-       _chain->SetValue (std_to_wx (dm.chain));
-       _two_d_version_of_three_d->SetValue (dm.two_d_version_of_three_d);
-       _mastered_luminance->SetValue (std_to_wx (dm.mastered_luminance));
-
-       layout ();
-
-       _content_version->SetFocus ();
-}
-
-
-ISDCFMetadata
-ISDCFMetadataDialog::isdcf_metadata () const
-{
-       ISDCFMetadata dm;
-
-       dm.content_version = _content_version->GetValue ();
-       dm.territory = wx_to_std (_territory->GetValue ());
-       dm.rating = wx_to_std (_rating->GetValue ());
-       dm.studio = wx_to_std (_studio->GetValue ());
-       dm.facility = wx_to_std (_facility->GetValue ());
-       dm.temp_version = _temp_version->GetValue ();
-       dm.pre_release = _pre_release->GetValue ();
-       dm.red_band = _red_band->GetValue ();
-       dm.chain = wx_to_std (_chain->GetValue ());
-       dm.two_d_version_of_three_d = _two_d_version_of_three_d->GetValue ();
-       dm.mastered_luminance = wx_to_std (_mastered_luminance->GetValue ());
-
-       return dm;
-}
diff --git a/src/wx/isdcf_metadata_dialog.h b/src/wx/isdcf_metadata_dialog.h
deleted file mode 100644 (file)
index 7780095..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "table_dialog.h"
-#include "lib/isdcf_metadata.h"
-#include <wx/textctrl.h>
-
-class wxSpinCtrl;
-class Film;
-
-class ISDCFMetadataDialog : public TableDialog
-{
-public:
-       ISDCFMetadataDialog (wxWindow *, ISDCFMetadata, bool threed);
-
-       ISDCFMetadata isdcf_metadata () const;
-
-private:
-       wxSpinCtrl* _content_version;
-       wxTextCtrl* _territory;
-       wxTextCtrl* _rating;
-       wxTextCtrl* _studio;
-       wxTextCtrl* _facility;
-       wxCheckBox* _temp_version;
-       wxCheckBox* _pre_release;
-       wxCheckBox* _red_band;
-       wxTextCtrl* _chain;
-       wxCheckBox* _two_d_version_of_three_d;
-       wxTextCtrl* _mastered_luminance;
-};
index c72c64b313c07f0465553d297a5ac0973fe0d816..ca08996c681d01a5d2c47b24ecbfd9000948316b 100644 (file)
@@ -116,7 +116,9 @@ LanguageTagDialog::set (dcp::LanguageTag tag)
                        _custom.push_back (tag);
                        selection = _presets.size() + _custom.size() - 1;
                        populate_list ();
-                       _list->EnsureVisible (_list->GetItemCount() - 1);
+                       if (_list->GetItemCount() > 0) {
+                               _list->EnsureVisible (_list->GetItemCount() - 1);
+                       }
                } else {
                        selection = _presets.size() + std::distance(_custom.begin(), iter);
                }
@@ -125,7 +127,9 @@ LanguageTagDialog::set (dcp::LanguageTag tag)
        }
 
        _list->SetItemState (selection, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
-       _list->EnsureVisible (selection);
+       if (static_cast<int>(selection) < _list->GetItemCount()) {
+               _list->EnsureVisible (selection);
+       }
 }
 
 
diff --git a/src/wx/metadata_dialog.cc b/src/wx/metadata_dialog.cc
new file mode 100644 (file)
index 0000000..c0e543b
--- /dev/null
@@ -0,0 +1,387 @@
+/*
+    Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    DCP-o-matic is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_button.h"
+#include "full_language_tag_dialog.h"
+#include "metadata_dialog.h"
+#include "wx_util.h"
+#include "lib/film.h"
+#include <boost/bind.hpp>
+#include <boost/weak_ptr.hpp>
+#include <wx/notebook.h>
+#include <wx/spinctrl.h>
+#include <wx/wx.h>
+
+
+using std::weak_ptr;
+
+
+MetadataDialog::MetadataDialog (wxWindow* parent, weak_ptr<Film> weak_film)
+       : wxDialog (parent, wxID_ANY, _("Metadata"))
+       , WeakFilm (weak_film)
+{
+
+}
+
+
+void
+MetadataDialog::setup ()
+{
+       auto notebook = new wxNotebook (this, wxID_ANY);
+
+       auto prepare = [notebook](std::function<void (wxPanel*, wxSizer*)> setup, wxString name) {
+               auto panel = new wxPanel (notebook, wxID_ANY);
+               auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+               sizer->AddGrowableCol (1, 1);
+               setup (panel, sizer);
+               auto overall_sizer = new wxBoxSizer (wxVERTICAL);
+               overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
+               panel->SetSizer (overall_sizer);
+               notebook->AddPage (panel, name);
+       };
+
+       prepare (boost::bind(&MetadataDialog::setup_standard, this, _1, _2), _("Standard"));
+       prepare (boost::bind(&MetadataDialog::setup_advanced, this, _1, _2), _("Advanced"));
+
+       auto overall_sizer = new wxBoxSizer (wxVERTICAL);
+       overall_sizer->Add (notebook, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
+
+       auto buttons = CreateSeparatedButtonSizer (wxCLOSE);
+       if (buttons) {
+               overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
+       }
+
+       SetSizer (overall_sizer);
+       overall_sizer->Layout ();
+       overall_sizer->SetSizeHints (this);
+
+       _edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&MetadataDialog::edit_release_territory, this));
+       _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_release_territory_changed, this));
+       _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_facility_changed, this));
+       _facility->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::facility_changed, this));
+       _enable_studio->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_studio_changed, this));
+       _studio->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::studio_changed, this));
+       _enable_chain->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_chain_changed, this));
+       _chain->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::chain_changed, this));
+       _temp_version->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::temp_version_changed, this));
+       _pre_release->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::pre_release_changed, this));
+       _red_band->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::red_band_changed, this));
+       _two_d_version_of_three_d->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::two_d_version_of_three_d_changed, this));
+       _enable_luminance->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_luminance_changed, this));
+       _luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&MetadataDialog::luminance_changed, this));
+       _luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&MetadataDialog::luminance_changed, this));
+
+       _film_changed_connection = film()->Change.connect(boost::bind(&MetadataDialog::film_changed, this, _1, _2));
+
+       film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY);
+       film_changed (ChangeType::DONE, Film::Property::FACILITY);
+       film_changed (ChangeType::DONE, Film::Property::STUDIO);
+       film_changed (ChangeType::DONE, Film::Property::TEMP_VERSION);
+       film_changed (ChangeType::DONE, Film::Property::PRE_RELEASE);
+       film_changed (ChangeType::DONE, Film::Property::RED_BAND);
+       film_changed (ChangeType::DONE, Film::Property::TWO_D_VERSION_OF_THREE_D);
+       film_changed (ChangeType::DONE, Film::Property::CHAIN);
+       film_changed (ChangeType::DONE, Film::Property::LUMINANCE);
+
+       setup_sensitivity ();
+}
+
+
+void
+MetadataDialog::film_changed (ChangeType type, Film::Property property)
+{
+       if (type != ChangeType::DONE) {
+               return;
+       }
+
+       if (property == Film::Property::RELEASE_TERRITORY) {
+               auto rt = film()->release_territory();
+               checked_set (_enable_release_territory, static_cast<bool>(rt));
+               if (rt) {
+                       _release_territory = *rt;
+                       checked_set (_release_territory_text, std_to_wx(*dcp::LanguageTag::get_subtag_description(*_release_territory)));
+               }
+       } else if (property == Film::Property::FACILITY) {
+               checked_set (_enable_facility, static_cast<bool>(film()->facility()));
+               if (film()->facility()) {
+                       checked_set (_facility, *film()->facility());
+               }
+       } else if (property == Film::Property::STUDIO) {
+               checked_set (_enable_studio, static_cast<bool>(film()->studio()));
+               if (film()->studio()) {
+                       checked_set (_studio, *film()->studio());
+               }
+       } else if (property == Film::Property::CHAIN) {
+               checked_set (_enable_chain, static_cast<bool>(film()->chain()));
+               if (film()->chain()) {
+                       checked_set (_chain, *film()->chain());
+               }
+       } else if (property == Film::Property::TEMP_VERSION) {
+               checked_set (_temp_version, film()->temp_version());
+       } else if (property == Film::Property::PRE_RELEASE) {
+               checked_set (_pre_release, film()->pre_release());
+       } else if (property == Film::Property::RED_BAND) {
+               checked_set (_red_band, film()->red_band());
+       } else if (property == Film::Property::TWO_D_VERSION_OF_THREE_D) {
+               checked_set (_two_d_version_of_three_d, film()->two_d_version_of_three_d());
+       } else if (property == Film::Property::LUMINANCE) {
+               auto lum = film()->luminance();
+               checked_set (_enable_luminance, static_cast<bool>(lum));
+               if (lum) {
+                       checked_set (_luminance_value, lum->value());
+                       switch (lum->unit()) {
+                       case dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE:
+                               checked_set (_luminance_unit, 0);
+                               break;
+                       case dcp::Luminance::Unit::FOOT_LAMBERT:
+                               checked_set (_luminance_unit, 1);
+                               break;
+                       }
+               }
+       }
+}
+
+
+void
+MetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer)
+{
+       _enable_release_territory = new wxCheckBox (panel, wxID_ANY, _("Release territory"));
+       sizer->Add (_enable_release_territory, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP);
+       {
+               auto s = new wxBoxSizer (wxHORIZONTAL);
+               _release_territory_text = new wxStaticText (panel, wxID_ANY, wxT(""));
+               s->Add (_release_territory_text, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
+               _edit_release_territory = new Button (panel, _("Edit..."));
+               s->Add (_edit_release_territory, 0, wxLEFT, DCPOMATIC_SIZER_GAP);
+               sizer->Add (s, 0, wxEXPAND);
+       }
+}
+
+
+void
+MetadataDialog::edit_release_territory ()
+{
+       DCPOMATIC_ASSERT (film()->release_territory());
+       auto d = new RegionSubtagDialog(this, *film()->release_territory());
+       d->ShowModal ();
+       auto tag = d->get();
+       if (tag) {
+               _release_territory = *tag;
+               film()->set_release_territory(*tag);
+       }
+       d->Destroy ();
+}
+
+
+void
+MetadataDialog::setup_sensitivity ()
+{
+       auto const enabled = _enable_release_territory->GetValue();
+       _release_territory_text->Enable (enabled);
+       _edit_release_territory->Enable (enabled);
+       _facility->Enable (_enable_facility->GetValue());
+       _chain->Enable (_enable_chain->GetValue());
+       _studio->Enable (_enable_studio->GetValue());
+       _luminance_value->Enable (_enable_luminance->GetValue());
+       _luminance_unit->Enable (_enable_luminance->GetValue());
+}
+
+
+void
+MetadataDialog::enable_release_territory_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_release_territory->GetValue()) {
+               film()->set_release_territory (_release_territory.get_value_or(dcp::LanguageTag::RegionSubtag("US")));
+       } else {
+               film()->set_release_territory ();
+       }
+}
+
+
+void
+MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer)
+{
+       _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility"));
+       sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _facility = new wxTextCtrl (panel, wxID_ANY);
+       sizer->Add (_facility, 1, wxEXPAND);
+
+       _enable_studio = new wxCheckBox (panel, wxID_ANY, _("Studio"));
+       sizer->Add (_enable_studio, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _studio = new wxTextCtrl (panel, wxID_ANY);
+       sizer->Add (_studio, 1, wxEXPAND);
+
+       _enable_chain = new wxCheckBox (panel, wxID_ANY, _("Chain"));
+       sizer->Add (_enable_chain, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _chain = new wxTextCtrl (panel, wxID_ANY);
+       sizer->Add (_chain, 1, wxEXPAND);
+
+       _temp_version = new wxCheckBox (panel, wxID_ANY, _("Temporary version"));
+       sizer->Add (_temp_version, 0, wxALIGN_CENTER_VERTICAL);
+       sizer->AddSpacer (0);
+
+       _pre_release = new wxCheckBox (panel, wxID_ANY, _("Pre-release"));
+       sizer->Add (_pre_release, 0, wxALIGN_CENTER_VERTICAL);
+       sizer->AddSpacer (0);
+
+       _red_band = new wxCheckBox (panel, wxID_ANY, _("Red band"));
+       sizer->Add (_red_band, 0, wxALIGN_CENTER_VERTICAL);
+       sizer->AddSpacer (0);
+
+       _two_d_version_of_three_d = new wxCheckBox (panel, wxID_ANY, _("2D version of 3D DCP"));
+       sizer->Add (_two_d_version_of_three_d, 0, wxALIGN_CENTER_VERTICAL);
+       sizer->AddSpacer (0);
+
+       _enable_luminance = new wxCheckBox (panel, wxID_ANY, _("Luminance"));
+       sizer->Add (_enable_luminance, 0, wxALIGN_CENTER_VERTICAL);
+       {
+               auto s = new wxBoxSizer (wxHORIZONTAL);
+               _luminance_value = new wxSpinCtrlDouble (panel, wxID_ANY);
+               _luminance_value->SetDigits (1);
+               _luminance_value->SetIncrement (0.1);
+               s->Add (_luminance_value, 0);
+               _luminance_unit = new wxChoice (panel, wxID_ANY);
+               s->Add (_luminance_unit, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
+               sizer->Add (s, 1, wxEXPAND);
+       }
+
+       _luminance_unit->Append (wxString::FromUTF8(_("candela per m²")));
+       _luminance_unit->Append (_("foot lambert"));
+
+}
+
+
+void
+MetadataDialog::facility_changed ()
+{
+       film()->set_facility (wx_to_std(_facility->GetValue()));
+}
+
+
+void
+MetadataDialog::enable_facility_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_facility->GetValue()) {
+               film()->set_facility (wx_to_std(_facility->GetValue()));
+       } else {
+               film()->set_facility ();
+       }
+}
+
+
+void
+MetadataDialog::studio_changed ()
+{
+       film()->set_studio (wx_to_std(_studio->GetValue()));
+}
+
+
+void
+MetadataDialog::enable_studio_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_studio->GetValue()) {
+               film()->set_studio (wx_to_std(_studio->GetValue()));
+       } else {
+               film()->set_studio ();
+       }
+}
+
+
+void
+MetadataDialog::temp_version_changed ()
+{
+       film()->set_temp_version(_temp_version->GetValue());
+}
+
+
+void
+MetadataDialog::pre_release_changed ()
+{
+       film()->set_pre_release(_pre_release->GetValue());
+}
+
+
+void
+MetadataDialog::red_band_changed ()
+{
+       film()->set_red_band(_red_band->GetValue());
+}
+
+
+void
+MetadataDialog::two_d_version_of_three_d_changed ()
+{
+       film()->set_two_d_version_of_three_d(_two_d_version_of_three_d->GetValue());
+}
+
+
+void
+MetadataDialog::chain_changed ()
+{
+       film()->set_chain (wx_to_std(_chain->GetValue()));
+}
+
+
+void
+MetadataDialog::enable_chain_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_chain->GetValue()) {
+               chain_changed ();
+       } else {
+               film()->set_chain ();
+       }
+}
+
+
+void
+MetadataDialog::enable_luminance_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_luminance->GetValue()) {
+               luminance_changed ();
+       } else {
+               film()->set_luminance ();
+       }
+}
+
+
+void
+MetadataDialog::luminance_changed ()
+{
+       dcp::Luminance::Unit unit;
+       switch (_luminance_unit->GetSelection()) {
+       case 0:
+               unit = dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE;
+               break;
+       case 1:
+               unit = dcp::Luminance::Unit::FOOT_LAMBERT;
+               break;
+       default:
+               DCPOMATIC_ASSERT (false);
+       }
+
+       film()->set_luminance (dcp::Luminance(_luminance_value->GetValue(), unit));
+}
+
diff --git a/src/wx/metadata_dialog.h b/src/wx/metadata_dialog.h
new file mode 100644 (file)
index 0000000..7c4471e
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+    Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    DCP-o-matic is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_METADATA_DIALOG_H
+#define DCPOMATIC_METADATA_DIALOG_H
+
+
+#include "lib/change_signaller.h"
+#include "lib/film.h"
+#include "lib/warnings.h"
+#include "lib/weak_film.h"
+DCPOMATIC_DISABLE_WARNINGS
+#include <wx/wx.h>
+DCPOMATIC_ENABLE_WARNINGS
+
+
+class Button;
+class wxSpinCtrlDouble;
+
+
+class MetadataDialog : public wxDialog, public WeakFilm
+{
+public:
+       MetadataDialog (wxWindow* parent, std::weak_ptr<Film> film);
+
+       virtual void setup ();
+
+protected:
+       virtual void setup_standard (wxPanel*, wxSizer*);
+       virtual void setup_advanced (wxPanel*, wxSizer*);
+       virtual void film_changed (ChangeType type, Film::Property property);
+       virtual void setup_sensitivity ();
+
+private:
+       void edit_release_territory ();
+       void enable_release_territory_changed ();
+       void facility_changed ();
+       void enable_facility_changed ();
+       void studio_changed ();
+       void enable_studio_changed ();
+       void temp_version_changed ();
+       void pre_release_changed ();
+       void red_band_changed ();
+       void two_d_version_of_three_d_changed ();
+       void chain_changed ();
+       void enable_chain_changed ();
+       void enable_luminance_changed ();
+       void luminance_changed ();
+
+       wxCheckBox* _enable_release_territory;
+       /** The current release territory displayed in the UI; since we can't easily convert
+        *  the string in _release_territory_text to a RegionSubtag we just store the RegionSubtag
+        *  alongside.
+        */
+       boost::optional<dcp::LanguageTag::RegionSubtag> _release_territory;
+       wxStaticText* _release_territory_text;
+       Button* _edit_release_territory;
+       wxCheckBox* _enable_facility;
+       wxTextCtrl* _facility;
+       wxCheckBox* _enable_chain;
+       wxTextCtrl* _chain;
+       wxCheckBox* _enable_studio;
+       wxTextCtrl* _studio;
+       wxCheckBox* _temp_version;
+       wxCheckBox* _pre_release;
+       wxCheckBox* _red_band;
+       wxCheckBox* _two_d_version_of_three_d;
+       wxCheckBox* _enable_luminance;
+       wxSpinCtrlDouble* _luminance_value;
+       wxChoice* _luminance_unit;
+
+       boost::signals2::scoped_connection _film_changed_connection;
+};
+
+
+#endif
+
index c32e892d9b30ed8ac10d393e2f645db1d5443893..3c480e37ed2b19ad58d00d1ec1e879867ffad8a7 100644 (file)
@@ -28,7 +28,6 @@
 #include "filter_dialog.h"
 #include "file_picker_ctrl.h"
 #include "dir_picker_ctrl.h"
-#include "isdcf_metadata_dialog.h"
 #include "server_dialog.h"
 #include "make_chain_dialog.h"
 #include "email_dialog.h"
index 464da6710b71ecc4f4cc57204b1987e2e98065db..e4d2d96224a9a4cd02a468417d1c5f80b2aa6b98 100644 (file)
@@ -28,7 +28,6 @@
 #include "lib/film.h"
 #include <dcp/types.h>
 #include <wx/gbsizer.h>
-#include <wx/notebook.h>
 #include <wx/spinctrl.h>
 
 
@@ -60,13 +59,10 @@ content_versions_column (string v, int)
 }
 
 
-wxPanel *
-SMPTEMetadataDialog::main_panel (wxWindow* parent)
+void
+SMPTEMetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer)
 {
-       auto panel = new wxPanel (parent, wxID_ANY);
-
-       auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
-       sizer->AddGrowableCol (1, 1);
+       MetadataDialog::setup_standard (panel, sizer);
 
        add_label_to_sizer (sizer, panel, _("Title language"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
        _name_language = new LanguageTagWidget(
@@ -98,33 +94,13 @@ SMPTEMetadataDialog::main_panel (wxWindow* parent)
                false
                );
        sizer->Add (_ratings, 1, wxEXPAND);
-
-       auto overall_sizer = new wxBoxSizer (wxVERTICAL);
-       overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
-       panel->SetSizer (overall_sizer);
-
-       return panel;
 }
 
 
-wxPanel *
-SMPTEMetadataDialog::advanced_panel (wxWindow* parent)
+void
+SMPTEMetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer)
 {
-       auto panel = new wxPanel (parent, wxID_ANY);
-
-       auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
-       sizer->AddGrowableCol (1, 1);
-
-       _enable_release_territory = new wxCheckBox (panel, wxID_ANY, _("Release territory"));
-       sizer->Add (_enable_release_territory, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP);
-       {
-               auto s = new wxBoxSizer (wxHORIZONTAL);
-               _release_territory_text = new wxStaticText (panel, wxID_ANY, wxT(""));
-               s->Add (_release_territory_text, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
-               _edit_release_territory = new Button (panel, _("Edit..."));
-               s->Add (_edit_release_territory, 0, wxLEFT, DCPOMATIC_SIZER_GAP);
-               sizer->Add (s, 0, wxEXPAND);
-       }
+       MetadataDialog::setup_advanced (panel, sizer);
 
        add_label_to_sizer (sizer, panel, _("Version number"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
        _version_number = new wxSpinCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 1000);
@@ -134,33 +110,11 @@ SMPTEMetadataDialog::advanced_panel (wxWindow* parent)
        _status = new wxChoice (panel, wxID_ANY);
        sizer->Add (_status, 0);
 
-       _enable_chain = new wxCheckBox (panel, wxID_ANY, _("Chain"));
-       sizer->Add (_enable_chain, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
-       _chain = new wxTextCtrl (panel, wxID_ANY);
-       sizer->Add (_chain, 1, wxEXPAND);
-
        _enable_distributor = new wxCheckBox (panel, wxID_ANY, _("Distributor"));
        sizer->Add (_enable_distributor, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
        _distributor = new wxTextCtrl (panel, wxID_ANY);
        sizer->Add (_distributor, 1, wxEXPAND);
 
-       _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility"));
-       sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
-       _facility = new wxTextCtrl (panel, wxID_ANY);
-       sizer->Add (_facility, 1, wxEXPAND);
-
-       add_label_to_sizer (sizer, panel, _("Luminance"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
-       {
-               auto s = new wxBoxSizer (wxHORIZONTAL);
-               _luminance_value = new wxSpinCtrlDouble (panel, wxID_ANY);
-               _luminance_value->SetDigits (1);
-               _luminance_value->SetIncrement (0.1);
-               s->Add (_luminance_value, 0);
-               _luminance_unit = new wxChoice (panel, wxID_ANY);
-               s->Add (_luminance_unit, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
-               sizer->Add (s, 1, wxEXPAND);
-       }
-
        {
                int flags = wxALIGN_TOP | wxRIGHT | wxTOP;
 #ifdef __WXOSX__
@@ -182,69 +136,36 @@ SMPTEMetadataDialog::advanced_panel (wxWindow* parent)
                false
                );
        sizer->Add (_content_versions, 1, wxEXPAND);
-
-       auto overall_sizer = new wxBoxSizer (wxVERTICAL);
-       overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
-       panel->SetSizer (overall_sizer);
-
-       return panel;
 }
 
 
 SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr<Film> weak_film)
-       : wxDialog (parent, wxID_ANY, _("Metadata"))
-       , WeakFilm (weak_film)
+       : MetadataDialog (parent, weak_film)
 {
-       auto notebook = new wxNotebook (this, wxID_ANY);
-       notebook->AddPage (main_panel(notebook), _("Standard"));
-       notebook->AddPage (advanced_panel(notebook), _("Advanced"));
 
-       auto overall_sizer = new wxBoxSizer (wxVERTICAL);
-       overall_sizer->Add (notebook, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
+}
 
-       auto buttons = CreateSeparatedButtonSizer (wxCLOSE);
-       if (buttons) {
-               overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
-       }
 
-       SetSizer (overall_sizer);
-       overall_sizer->Layout ();
-       overall_sizer->SetSizeHints (this);
+void
+SMPTEMetadataDialog::setup ()
+{
+       MetadataDialog::setup ();
 
        _status->Append (_("Temporary"));
        _status->Append (_("Pre-release"));
        _status->Append (_("Final"));
 
-       _luminance_unit->Append (wxString::FromUTF8(_("candela per m²")));
-       _luminance_unit->Append (_("foot lambert"));
-
        _name_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::name_language_changed, this, _1));
-       _edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&SMPTEMetadataDialog::edit_release_territory, this));
        _version_number->Bind (wxEVT_SPINCTRL, boost::bind(&SMPTEMetadataDialog::version_number_changed, this));
        _status->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::status_changed, this));
-       _enable_chain->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_chain_changed, this));
-       _chain->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::chain_changed, this));
        _enable_distributor->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_distributor_changed, this));
        _distributor->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::distributor_changed, this));
-       _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_facility_changed, this));
-       _facility->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::facility_changed, this));
-       _luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
-       _luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
-       _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_release_territory_changed, this));
-
-       _version_number->SetFocus ();
-
-       _film_changed_connection = film()->Change.connect(boost::bind(&SMPTEMetadataDialog::film_changed, this, _1, _2));
 
        film_changed (ChangeType::DONE, Film::Property::NAME_LANGUAGE);
-       film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY);
        film_changed (ChangeType::DONE, Film::Property::VERSION_NUMBER);
        film_changed (ChangeType::DONE, Film::Property::STATUS);
-       film_changed (ChangeType::DONE, Film::Property::CHAIN);
        film_changed (ChangeType::DONE, Film::Property::DISTRIBUTOR);
-       film_changed (ChangeType::DONE, Film::Property::FACILITY);
        film_changed (ChangeType::DONE, Film::Property::CONTENT_VERSIONS);
-       film_changed (ChangeType::DONE, Film::Property::LUMINANCE);
 
        setup_sensitivity ();
 }
@@ -253,19 +174,14 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr<Film> weak_
 void
 SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property)
 {
+       MetadataDialog::film_changed (type, property);
+
        if (type != ChangeType::DONE || film()->interop()) {
                return;
        }
 
        if (property == Film::Property::NAME_LANGUAGE) {
                _name_language->set (film()->name_language());
-       } else if (property == Film::Property::RELEASE_TERRITORY) {
-               auto rt = film()->release_territory();
-               checked_set (_enable_release_territory, static_cast<bool>(rt));
-               if (rt) {
-                       _release_territory = *rt;
-                       checked_set (_release_territory_text, std_to_wx(*dcp::LanguageTag::get_subtag_description(*_release_territory)));
-               }
        } else if (property == Film::Property::VERSION_NUMBER) {
                checked_set (_version_number, film()->version_number());
        } else if (property == Film::Property::STATUS) {
@@ -280,37 +196,11 @@ SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property)
                        checked_set (_status, 2);
                        break;
                }
-       } else if (property == Film::Property::CHAIN) {
-               checked_set (_enable_chain, static_cast<bool>(film()->chain()));
-               if (film()->chain()) {
-                       checked_set (_chain, *film()->chain());
-               }
        } else if (property == Film::Property::DISTRIBUTOR) {
                checked_set (_enable_distributor, static_cast<bool>(film()->distributor()));
                if (film()->distributor()) {
                        checked_set (_distributor, *film()->distributor());
                }
-       } else if (property == Film::Property::FACILITY) {
-               checked_set (_enable_facility, static_cast<bool>(film()->facility()));
-               if (film()->facility()) {
-                       checked_set (_facility, *film()->facility());
-               }
-       } else if (property == Film::Property::LUMINANCE) {
-               auto lum = film()->luminance();
-               if (lum) {
-                       checked_set (_luminance_value, lum->value());
-                       switch (lum->unit()) {
-                       case dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE:
-                               checked_set (_luminance_unit, 0);
-                               break;
-                       case dcp::Luminance::Unit::FOOT_LAMBERT:
-                               checked_set (_luminance_unit, 1);
-                               break;
-                       }
-               } else {
-                       checked_set (_luminance_value, 4.5);
-                       checked_set (_luminance_unit, 1);
-               }
        }
 }
 
@@ -350,21 +240,6 @@ SMPTEMetadataDialog::name_language_changed (dcp::LanguageTag tag)
 }
 
 
-void
-SMPTEMetadataDialog::edit_release_territory ()
-{
-       DCPOMATIC_ASSERT (film()->release_territory());
-       auto d = new RegionSubtagDialog(this, *film()->release_territory());
-       d->ShowModal ();
-       auto tag = d->get();
-       if (tag) {
-               _release_territory = *tag;
-               film()->set_release_territory(*tag);
-       }
-       d->Destroy ();
-}
-
-
 void
 SMPTEMetadataDialog::version_number_changed ()
 {
@@ -389,13 +264,6 @@ SMPTEMetadataDialog::status_changed ()
 }
 
 
-void
-SMPTEMetadataDialog::chain_changed ()
-{
-       film()->set_chain (wx_to_std(_chain->GetValue()));
-}
-
-
 void
 SMPTEMetadataDialog::distributor_changed ()
 {
@@ -403,68 +271,12 @@ SMPTEMetadataDialog::distributor_changed ()
 }
 
 
-void
-SMPTEMetadataDialog::facility_changed ()
-{
-       film()->set_facility (wx_to_std(_facility->GetValue()));
-}
-
-
-void
-SMPTEMetadataDialog::luminance_changed ()
-{
-       dcp::Luminance::Unit unit;
-       switch (_luminance_unit->GetSelection()) {
-       case 0:
-               unit = dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE;
-               break;
-       case 1:
-               unit = dcp::Luminance::Unit::FOOT_LAMBERT;
-               break;
-       default:
-               DCPOMATIC_ASSERT (false);
-       }
-
-       film()->set_luminance (dcp::Luminance(_luminance_value->GetValue(), unit));
-}
-
-
 void
 SMPTEMetadataDialog::setup_sensitivity ()
 {
-       {
-               auto const enabled = _enable_release_territory->GetValue();
-               _release_territory_text->Enable (enabled);
-               _edit_release_territory->Enable (enabled);
-       }
+       MetadataDialog::setup_sensitivity ();
 
-       _chain->Enable (_enable_chain->GetValue());
        _distributor->Enable (_enable_distributor->GetValue());
-       _facility->Enable (_enable_facility->GetValue());
-}
-
-
-void
-SMPTEMetadataDialog::enable_release_territory_changed ()
-{
-       setup_sensitivity ();
-       if (_enable_release_territory->GetValue()) {
-               film()->set_release_territory (_release_territory.get_value_or(dcp::LanguageTag::RegionSubtag("US")));
-       } else {
-               film()->set_release_territory ();
-       }
-}
-
-
-void
-SMPTEMetadataDialog::enable_chain_changed ()
-{
-       setup_sensitivity ();
-       if (_enable_chain->GetValue()) {
-               film()->set_chain (wx_to_std(_chain->GetValue()));
-       } else {
-               film()->set_chain ();
-       }
 }
 
 
@@ -480,15 +292,3 @@ SMPTEMetadataDialog::enable_distributor_changed ()
 }
 
 
-void
-SMPTEMetadataDialog::enable_facility_changed ()
-{
-       setup_sensitivity ();
-       if (_enable_facility->GetValue()) {
-               film()->set_facility (wx_to_std(_facility->GetValue()));
-       } else {
-               film()->set_facility ();
-       }
-}
-
-
index 46272adbb17b433606a42e067fcc4a5b212c6b07..d1a792a363239edadf8fb11fab1c6b171febbfd2 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "editable_list.h"
 #include "full_language_tag_dialog.h"
+#include "metadata_dialog.h"
 #include "lib/film.h"
 #include "lib/weak_film.h"
 #include <dcp/language_tag.h>
@@ -36,54 +37,34 @@ class LanguageTagWidget;
 class LanguageTagDialog;
 
 
-class SMPTEMetadataDialog : public wxDialog, public WeakFilm
+class SMPTEMetadataDialog : public MetadataDialog
 {
 public:
        SMPTEMetadataDialog (wxWindow* parent, std::weak_ptr<Film> film);
 
+       void setup () override;
+
 private:
-       wxPanel* main_panel (wxWindow* parent);
-       wxPanel* advanced_panel (wxWindow* parent);
+       void setup_standard (wxPanel* parent, wxSizer* sizer) override;
+       void setup_advanced (wxPanel* parent, wxSizer* sizer) override;
+       void film_changed (ChangeType type, Film::Property property) override;
+       void setup_sensitivity () override;
+
        std::vector<dcp::Rating> ratings () const;
        void set_ratings (std::vector<dcp::Rating> r);
        std::vector<std::string> content_versions () const;
        void set_content_versions (std::vector<std::string> v);
        void name_language_changed (dcp::LanguageTag tag);
-       void edit_release_territory ();
        void version_number_changed ();
        void status_changed ();
-       void chain_changed ();
        void distributor_changed ();
-       void facility_changed ();
-       void luminance_changed ();
-       void film_changed (ChangeType type, Film::Property property);
-       void setup_sensitivity ();
-       void enable_release_territory_changed ();
-       void enable_chain_changed ();
        void enable_distributor_changed ();
-       void enable_facility_changed ();
 
        LanguageTagWidget* _name_language;
-       wxCheckBox* _enable_release_territory;
-       /** The current release territory displayed in the UI; since we can't easily convert
-        *  the string in _release_territory_text to a RegionSubtag we just store the RegionSubtag
-        *  alongside.
-        */
-       boost::optional<dcp::LanguageTag::RegionSubtag> _release_territory;
-       wxStaticText* _release_territory_text;
-       Button* _edit_release_territory;
        wxSpinCtrl* _version_number;
        wxChoice* _status;
-       wxCheckBox* _enable_chain;
-       wxTextCtrl* _chain;
        wxCheckBox* _enable_distributor;
        wxTextCtrl* _distributor;
-       wxCheckBox* _enable_facility;
-       wxTextCtrl* _facility;
-       wxSpinCtrlDouble* _luminance_value;
-       wxChoice* _luminance_unit;
        EditableList<dcp::Rating, RatingDialog>* _ratings;
        EditableList<std::string, ContentVersionDialog>* _content_versions;
-
-       boost::signals2::scoped_connection _film_changed_connection;
 };
index 76eea3fa5363d713aeb7aca928deb69659be1d12..1d0fb0810339da93532f5250a526055e519e1f3a 100644 (file)
@@ -85,7 +85,6 @@ sources = """
           image_sequence_dialog.cc
           instant_i18n_dialog.cc
           interop_metadata_dialog.cc
-          isdcf_metadata_dialog.cc
           job_manager_view.cc
           job_view.cc
           job_view_dialog.cc
@@ -99,6 +98,7 @@ sources = """
           make_chain_dialog.cc
           markers_dialog.cc
           message_dialog.cc
+          metadata_dialog.cc
           monitor_dialog.cc
           move_to_dialog.cc
           nag_dialog.cc
index dbac64a34c61b07ee2278adfdaef63887e50e908..325ee62f46cfbab00a6aa0d11fcb0a501abe87ba 100644 (file)
@@ -41,8 +41,9 @@
 
 
 using std::cout;
-using std::shared_ptr;
 using std::make_shared;
+using std::shared_ptr;
+using std::string;
 
 
 BOOST_AUTO_TEST_CASE (isdcf_name_test)
@@ -60,20 +61,17 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        BOOST_REQUIRE (!wait_for_jobs());
        BOOST_REQUIRE (audio->audio);
        audio->audio->set_language(dcp::LanguageTag("en-US"));
-       ISDCFMetadata m;
-       m.content_version = 1;
-       m.territory = "UK";
-       m.rating = "PG";
-       m.studio = "ST";
-       m.facility = "FA";
-       film->set_isdcf_metadata (m);
+       film->set_content_versions({"1"});
+       film->set_release_territory(dcp::LanguageTag::RegionSubtag("GB"));
+       film->set_ratings({dcp::Rating("BBFC", "PG")});
+       film->set_studio (string("ST"));
+       film->set_facility (string("FAC"));
        film->set_interop (true);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_UK-PG_10_2K_ST_20140704_FA_IOP_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_GB-PG_10_2K_ST_20140704_FAC_IOP_OV");
 
        /* Check that specifying no audio language writes XX */
        audio->audio->set_language (boost::none);
-       film->set_isdcf_metadata (m);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_UK-PG_10_2K_ST_20140704_FA_IOP_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_GB-PG_10_2K_ST_20140704_FAC_IOP_OV");
 
        /* Test a long name and some different data */
 
@@ -88,27 +86,24 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        text->text.front()->set_burn (true);
        text->text.front()->set_language (dcp::LanguageTag("fr-FR"));
        film->examine_and_add_content (text);
+       film->set_version_number(2);
+       film->set_release_territory(dcp::LanguageTag::RegionSubtag("US"));
+       film->set_ratings({dcp::Rating("MPA", "R")});
+       film->set_studio (string("di"));
+       film->set_facility (string("ppfacility"));
        BOOST_REQUIRE (!wait_for_jobs());
-       m.content_version = 2;
        audio = content_factory("test/data/sine_440.wav").front();
        film->examine_and_add_content (audio);
        BOOST_REQUIRE (!wait_for_jobs());
        BOOST_REQUIRE (audio->audio);
        audio->audio->set_language (dcp::LanguageTag("de-DE"));
-       m.territory = "US";
-       m.rating = "R";
-       m.studio = "DI";
-       m.facility = "PP";
-       film->set_isdcf_metadata (m);
        film->set_interop (false);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test to see that RU ratings like 6+ survive */
-       m.rating = "6+";
-       film->set_isdcf_metadata (m);
-       BOOST_CHECK_EQUAL (film->dcp_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-6+_MOS_4K_DI_20140704_PP_SMPTE_OV");
-       m.rating = "R";
-       film->set_isdcf_metadata (m);
+       film->set_ratings({dcp::Rating("RARS", "6+")});
+       BOOST_CHECK_EQUAL (film->dcp_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-6+_MOS_4K_DI_20140704_PPF_SMPTE_OV");
+       film->set_ratings({dcp::Rating("MPA", "R")});
 
        /* Test interior aspect ratio: shouldn't be shown with trailers */
 
@@ -117,58 +112,56 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        BOOST_REQUIRE (!wait_for_jobs());
        content->video->set_custom_ratio (1.33);
        film->set_container (Ratio::from_id ("185"));
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* But should be shown for anything else */
 
        film->set_dcp_content_type (DCPContentType::from_isdcf_name ("XSN"));
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* And it should always be numeric */
 
        content->video->set_custom_ratio (2.39);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-239_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-239_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        content->video->set_custom_ratio (1.9);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-190_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-190_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
        content->video->set_custom_ratio (1.33);
 
        /* Test 3D */
 
        film->set_three_d (true);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE-3D_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE-3D_OV");
 
        /* Test content type modifiers */
 
        film->set_three_d (false);
-       m.temp_version = true;
-       m.pre_release = true;
-       m.red_band = true;
-       m.chain = "MyChain";
-       m.two_d_version_of_three_d = true;
-       m.mastered_luminance = "4fl";
-       film->set_isdcf_metadata (m);
+       film->set_temp_version (true);
+       film->set_pre_release (true);
+       film->set_red_band (true);
+       film->set_two_d_version_of_three_d (true);
+       film->set_chain (string("MyChain"));
+       film->set_luminance (dcp::Luminance(4.5, dcp::Luminance::Unit::FOOT_LAMBERT));
        film->set_video_frame_rate (48);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test a name which is already in camelCase */
 
        film->set_three_d (false);
-       m.temp_version = false;
-       m.pre_release = false;
-       m.red_band = false;
-       m.chain = "";
-       m.two_d_version_of_three_d = false;
-       m.mastered_luminance = "";
-       film->set_isdcf_metadata (m);
+       film->set_temp_version (false);
+       film->set_pre_release (false);
+       film->set_red_band (false);
+       film->set_two_d_version_of_three_d (false);
+       film->set_chain (string(""));
+       film->set_luminance (boost::none);
        film->set_video_frame_rate (24);
        film->set_name ("IKnowCamels");
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* And one in capitals */
 
        film->set_name ("LIKE SHOUTING");
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test audio channel markup */
 
@@ -176,48 +169,48 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        auto sound = make_shared<FFmpegContent>("test/data/sine_440.wav");
        film->examine_and_add_content (sound);
        BOOST_REQUIRE (!wait_for_jobs());
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_10_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_10_4K_DI_20140704_PPF_SMPTE_OV");
 
        AudioMapping mapping = sound->audio->mapping ();
 
        mapping.set (0, dcp::Channel::LEFT, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_20_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_20_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::RIGHT, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_30_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_30_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::LFE, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_31_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_31_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::LS, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_41_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_41_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::RS, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels (8);
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels(10);
        mapping.set (0, dcp::Channel::HI, 0.0);
        mapping.set (0, dcp::Channel::VI, 0.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels(12);
        mapping.set (0, dcp::Channel::BSL, 1.0);
@@ -225,12 +218,12 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        mapping.set (0, dcp::Channel::HI, 0.0);
        mapping.set (0, dcp::Channel::VI, 0.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 }
 
index 8cbb2408b467a7004bea352c5a3c3f779118ef06..ed8a93135ca96c1cf0a82705fd4467d121977485 100644 (file)
@@ -105,7 +105,6 @@ setup_test_config ()
        Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency());
        Config::instance()->set_server_encoding_threads (1);
        Config::instance()->set_server_port_base (61921);
-       Config::instance()->set_default_isdcf_metadata (ISDCFMetadata ());
        Config::instance()->set_default_container (Ratio::from_id ("185"));
        Config::instance()->set_default_dcp_content_type (static_cast<DCPContentType*> (0));
        Config::instance()->set_default_audio_delay (0);