Merge branch 'master' of ssh://git.carlh.net/home/carl/git/dcpomatic
authorCarl Hetherington <cth@carlh.net>
Mon, 24 Sep 2018 09:27:20 +0000 (10:27 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 24 Sep 2018 09:27:20 +0000 (10:27 +0100)
cscript
src/lib/config.cc
src/lib/config.h
src/tools/wscript
src/wx/dir_picker_ctrl.h
src/wx/wx_util.cc
src/wx/wx_util.h
wscript

diff --git a/cscript b/cscript
index dc8a419d951a4c41b7d3d7a46f1a64a2cb7242f7..fdcdc11ea30a055b1a39519ff1fafbdc0e34f989 100644 (file)
--- a/cscript
+++ b/cscript
@@ -338,7 +338,7 @@ def dependencies(target):
     return deps
 
 def option_defaults():
-    return { "player-only": False, "gui": True, "variant": None }
+    return { "gui": True, "variant": None }
 
 def configure_options(target, options):
     opt = ''
@@ -363,9 +363,6 @@ def configure_options(target, options):
     if not options['gui']:
         opt += ' --disable-gui'
 
-    if options['player-only']:
-        opt += ' --player-only'
-
     if options['variant'] is not None:
         opt += ' --variant=%s' % options['variant']
 
index e5d241d2b97bc5e2d4cbdeaa97c1c972a6cd505d..54716d8497afcc75ec4ee57cb30a3f423ee07c39 100644 (file)
@@ -167,6 +167,7 @@ Config::set_defaults ()
        _image_display = 0;
        _respect_kdm_validity_periods = true;
        _player_log_file = boost::none;
+       _player_dcp_directory = boost::none;
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -497,6 +498,7 @@ try
        _image_display = f.optional_number_child<int>("ImageDisplay").get_value_or(0);
        _respect_kdm_validity_periods = f.optional_bool_child("RespectKDMValidityPeriods").get_value_or(true);
        _player_log_file = f.optional_string_child("PlayerLogFile");
+       _player_dcp_directory = f.optional_string_child("PlayerDCPDirectory");
 
        /* Replace any cinemas from config.xml with those from the configured file */
        if (boost::filesystem::exists (_cinemas_file)) {
@@ -888,6 +890,9 @@ Config::write_config () const
        if (_player_log_file) {
                root->add_child("PlayerLogFile")->add_child_text(_player_log_file->string());
        }
+       if (_player_dcp_directory) {
+               root->add_child("PlayerDCPDirectory")->add_child_text(_player_dcp_directory->string());
+       }
 
        try {
                doc.write_to_file_formatted(config_file().string());
index 02295725b36cfd58c1a31bf32d8115b6426b654f..fc5d820f93f663d677c57b080f4052e646e1b3fa 100644 (file)
@@ -481,6 +481,10 @@ public:
                return _player_log_file;
        }
 
+       boost::optional<boost::filesystem::path> player_dcp_directory () const {
+               return _player_dcp_directory;
+       }
+
        /* SET (mostly) */
 
        void set_master_encoding_threads (int n) {
@@ -903,6 +907,18 @@ public:
                changed ();
        }
 
+       void set_player_dcp_directory (boost::filesystem::path p) {
+               maybe_set (_player_dcp_directory, p);
+       }
+
+       void unset_player_dcp_directory () {
+               if (!_player_dcp_directory) {
+                       return;
+               }
+               _player_dcp_directory = boost::none;
+               changed ();
+       }
+
        void changed (Property p = OTHER);
        boost::signals2::signal<void (Property)> Changed;
        /** Emitted if read() failed on an existing Config file.  There is nothing
@@ -1089,6 +1105,11 @@ private:
        int _image_display;
        bool _respect_kdm_validity_periods;
        boost::optional<boost::filesystem::path> _player_log_file;
+       /** A directory containing DCPs whose contents are presented to the user
+           in the dual-screen player mode.  DCPs on the list can be loaded
+           for playback.
+       */
+       boost::optional<boost::filesystem::path> _player_dcp_directory;
 
        static int const _current_version;
 
index 4c6a74a471ee23cdedd87294f2afee2c2e1d4c57..ed70e562739e5619ba9a2eb080cb6c1182e543f3 100644 (file)
@@ -35,7 +35,7 @@ def build(bld):
     if bld.env.TARGET_WINDOWS:
         uselib += 'WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE WINSOCK2 OLE32 DSOUND WINMM KSUSER '
 
-    if not bld.env.PLAYER_ONLY:
+    if bld.env.VARIANT != "swaroop":
         for t in ['dcpomatic_cli', 'dcpomatic_server_cli', 'server_test', 'dcpomatic_kdm_cli', 'dcpomatic_create']:
             obj = bld(features='cxx cxxprogram')
             obj.uselib = uselib
@@ -48,7 +48,7 @@ def build(bld):
 
     gui_tools = []
     if not bld.env.DISABLE_GUI:
-        if bld.env.PLAYER_ONLY:
+        if bld.env.VARIANT == 'swaroop':
             gui_tools = ['dcpomatic_player']
         else:
             gui_tools = ['dcpomatic', 'dcpomatic_batch', 'dcpomatic_server', 'dcpomatic_kdm', 'dcpomatic_player']
index 659fe07ea157ae80607c9bf7b7e197185f0de821..f236096598ce07dfbb998fd950b3bda645803a9c 100644 (file)
@@ -18,6 +18,9 @@
 
 */
 
+#ifndef DCPOMATIC_DIR_PICKER_CTRL
+#define DCPOMATIC_DIR_PICKER_CTRL
+
 #include <wx/wx.h>
 
 class DirPickerCtrl : public wxPanel
@@ -36,3 +39,5 @@ private:
        wxString _path;
        wxSizer* _sizer;
 };
+
+#endif
index 7edcabf40e379305d1c336f8e3702610d438d15f..91fd426247a94e40caaa82a547796864706e3c5c 100644 (file)
@@ -30,6 +30,7 @@
 #include <dcp/locale_convert.h>
 #include <wx/spinctrl.h>
 #include <wx/splash.h>
+#include <wx/filepicker.h>
 #include <boost/thread.hpp>
 
 using namespace std;
@@ -195,6 +196,20 @@ checked_set (FilePickerCtrl* widget, boost::filesystem::path value)
        }
 }
 
+void
+checked_set (wxDirPickerCtrl* widget, boost::filesystem::path value)
+{
+       if (widget->GetPath() != std_to_wx (value.string())) {
+               if (value.empty()) {
+                       /* Hack to make wxWidgets clear the control when we are passed
+                          an empty value.
+                       */
+                       value = " ";
+               }
+               widget->SetPath (std_to_wx (value.string()));
+       }
+}
+
 void
 checked_set (wxSpinCtrl* widget, int value)
 {
index f59f5d68376cc41109981d89543a4f8582f1b30e..1acca044a6fd815445de113955f4c88e373db4fb 100644 (file)
@@ -36,6 +36,7 @@
 #endif
 
 class FilePickerCtrl;
+class wxDirPickerCtrl;
 class wxSpinCtrl;
 class wxSpinCtrlDouble;
 class wxGridBagSizer;
@@ -89,6 +90,7 @@ extern boost::filesystem::path path_from_file_dialog (wxFileDialog* dialog, std:
 extern double calculate_mark_interval (double start);
 
 extern void checked_set (FilePickerCtrl* widget, boost::filesystem::path value);
+extern void checked_set (wxDirPickerCtrl* widget, boost::filesystem::path value);
 extern void checked_set (wxSpinCtrl* widget, int value);
 extern void checked_set (wxSpinCtrlDouble* widget, double value);
 extern void checked_set (wxChoice* widget, int value);
diff --git a/wscript b/wscript
index 501bd4fb983df6544a71db6e4c1eb2817a5b119b..92a79bb9b031413d250c554eda913e767fa19880 100644 (file)
--- a/wscript
+++ b/wscript
@@ -48,7 +48,6 @@ def options(opt):
 
     opt.add_option('--enable-debug',      action='store_true', default=False, help='build with debugging information and without optimisation')
     opt.add_option('--disable-gui',       action='store_true', default=False, help='disable building of GUI tools')
-    opt.add_option('--player-only',       action='store_true', default=False, help='just build the player; no other tools')
     opt.add_option('--disable-tests',     action='store_true', default=False, help='disable building of tests')
     opt.add_option('--install-prefix',                         default=None,  help='prefix of where DCP-o-matic will be installed')
     opt.add_option('--target-windows',    action='store_true', default=False, help='set up to do a cross-compile to make a Windows package')
@@ -75,7 +74,6 @@ def configure(conf):
 
     # Save conf.options that we need elsewhere in conf.env
     conf.env.DISABLE_GUI = conf.options.disable_gui
-    conf.env.PLAYER_ONLY = conf.options.player_only
     conf.env.DISABLE_TESTS = conf.options.disable_tests
     conf.env.TARGET_WINDOWS = conf.options.target_windows
     conf.env.TARGET_OSX = sys.platform == 'darwin'
@@ -117,6 +115,7 @@ def configure(conf):
         conf.env.append_value('CXXFLAGS', '-O2')
 
     if conf.options.variant is not None:
+        conf.env.VARIANT = conf.options.variant
         conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_VARIANT_%s' % conf.options.variant.upper())
 
     #