Disable DCP panel stuff which cannot be altered when a DCP is being referenced.
authorCarl Hetherington <cth@carlh.net>
Wed, 31 Jan 2018 23:50:57 +0000 (23:50 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 31 Jan 2018 23:50:57 +0000 (23:50 +0000)
ChangeLog
src/lib/film.cc
src/lib/film.h
src/wx/dcp_panel.cc
src/wx/dcp_panel.h

index a3839801d8c4e37afd2491d2dbce640ddf6fef7d..ed61c317d9a8e2c29c178bdbef2103b4f47b10e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2018-01-31  Carl Hetherington  <cth@carlh.net>
 
 2018-01-31  Carl Hetherington  <cth@carlh.net>
 
+       * Disable things that cannot be altered when video/audio are being
+       referenced from another DCP (#1173).
+
        * Version 2.11.46 released.
 
 2018-01-30  Carl Hetherington  <cth@carlh.net>
        * Version 2.11.46 released.
 
 2018-01-30  Carl Hetherington  <cth@carlh.net>
index 361daa8b6c0e03114aaa1cb59ae4a9cf02af9d01..68ebddba2c5edb597ac0d74b32f7e3eb86346674 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
-    Copyright (C) 2012-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
     This file is part of DCP-o-matic.
 
@@ -1590,3 +1590,29 @@ Film::copy_from (shared_ptr<const Film> film)
 {
        read_metadata (film->file (metadata_file));
 }
 {
        read_metadata (film->file (metadata_file));
 }
+
+bool
+Film::references_dcp_video () const
+{
+       BOOST_FOREACH (shared_ptr<Content> i, _playlist->content()) {
+               shared_ptr<DCPContent> d = dynamic_pointer_cast<DCPContent>(i);
+               if (d && d->reference_video()) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+bool
+Film::references_dcp_audio () const
+{
+       BOOST_FOREACH (shared_ptr<Content> i, _playlist->content()) {
+               shared_ptr<DCPContent> d = dynamic_pointer_cast<DCPContent>(i);
+               if (d && d->reference_audio()) {
+                       return true;
+               }
+       }
+
+       return false;
+}
index 0aa3dab3f05a7388b7c0a6f02062321b366b956f..bce2c3b54e8237d77194459ff236f0c1757ac4af 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
-    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
     This file is part of DCP-o-matic.
 
@@ -167,6 +167,9 @@ public:
 
        std::list<std::string> fix_conflicting_settings ();
 
 
        std::list<std::string> fix_conflicting_settings ();
 
+       bool references_dcp_video () const;
+       bool references_dcp_audio () const;
+
        /** Identifiers for the parts of our state;
            used for signalling changes.
        */
        /** Identifiers for the parts of our state;
            used for signalling changes.
        */
index 527c275a4b10406ec7edad982f033feb556c4f86..e5d46e57964c9872b5b57b983d557a7f1e48fa99 100644 (file)
@@ -437,6 +437,7 @@ DCPPanel::film_content_changed (int property)
            property == DCPContentProperty::REFERENCE_AUDIO ||
            property == DCPContentProperty::REFERENCE_SUBTITLE) {
                setup_dcp_name ();
            property == DCPContentProperty::REFERENCE_AUDIO ||
            property == DCPContentProperty::REFERENCE_SUBTITLE) {
                setup_dcp_name ();
+               setup_sensitivity ();
        }
 }
 
        }
 }
 
@@ -530,34 +531,41 @@ DCPPanel::set_film (shared_ptr<Film> film)
 void
 DCPPanel::set_general_sensitivity (bool s)
 {
 void
 DCPPanel::set_general_sensitivity (bool s)
 {
-       _name->Enable (s);
-       _use_isdcf_name->Enable (s);
-       _edit_isdcf_button->Enable (s);
-       _dcp_content_type->Enable (s);
-       _copy_isdcf_name_button->Enable (s);
+       _generally_sensitive = s;
+       setup_sensitivity ();
+}
+
+void
+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);
 
 
-       bool si = s;
+       bool si = _generally_sensitive;
        if (_film && _film->encrypted ()) {
                si = false;
        }
        _signed->Enable (si);
 
        if (_film && _film->encrypted ()) {
                si = false;
        }
        _signed->Enable (si);
 
-       _encrypted->Enable (s);
-       _key->Enable (s && _film && _film->encrypted ());
-       _edit_key->Enable (s && _film && _film->encrypted ());
-       _reel_type->Enable (s);
-       _reel_length->Enable (s && _film && _film->reel_type() == REELTYPE_BY_LENGTH);
-       _upload_after_make_dcp->Enable (s);
-       _frame_rate_choice->Enable (s);
-       _frame_rate_spin->Enable (s);
-       _audio_channels->Enable (s);
-       _audio_processor->Enable (s);
-       _j2k_bandwidth->Enable (s);
-       _container->Enable (s);
-       _best_frame_rate->Enable (s && _film && _film->best_video_frame_rate () != _film->video_frame_rate ());
-       _resolution->Enable (s);
-       _three_d->Enable (s);
-       _standard->Enable (s);
+       _encrypted->Enable              (_generally_sensitive);
+       _key->Enable                    (_generally_sensitive && _film && _film->encrypted ());
+       _edit_key->Enable               (_generally_sensitive && _film && _film->encrypted ());
+       _reel_type->Enable              (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->references_dcp_audio());
+       _reel_length->Enable            (_generally_sensitive && _film && _film->reel_type() == REELTYPE_BY_LENGTH);
+       _upload_after_make_dcp->Enable  (_generally_sensitive);
+       _frame_rate_choice->Enable      (_generally_sensitive && _film && !_film->references_dcp_video());
+       _frame_rate_spin->Enable        (_generally_sensitive && _film && !_film->references_dcp_video());
+       _audio_channels->Enable         (_generally_sensitive && _film && !_film->references_dcp_audio());
+       _audio_processor->Enable        (_generally_sensitive && _film && !_film->references_dcp_audio());
+       _j2k_bandwidth->Enable          (_generally_sensitive && _film && !_film->references_dcp_video());
+       _container->Enable              (_generally_sensitive && _film && !_film->references_dcp_video());
+       _best_frame_rate->Enable        (_generally_sensitive && _film && _film->best_video_frame_rate () != _film->video_frame_rate ());
+       _resolution->Enable             (_generally_sensitive && _film && !_film->references_dcp_video());
+       _three_d->Enable                (_generally_sensitive && _film && !_film->references_dcp_video());
+       _standard->Enable               (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->references_dcp_audio());
 }
 
 void
 }
 
 void
index f2e0455c97f3ff1eec43bd6374ace3fde183ca09..b8a67b2f5613c8acae69632749ecb1260060c394 100644 (file)
@@ -88,6 +88,8 @@ private:
 
        void config_changed ();
 
 
        void config_changed ();
 
+       void setup_sensitivity ();
+
        wxPanel* _panel;
        wxNotebook* _notebook;
        wxBoxSizer* _sizer;
        wxPanel* _panel;
        wxNotebook* _notebook;
        wxBoxSizer* _sizer;