Try to warn if we're running the 32-bit version on 64-bit windows (WoW64) (#1569).
[dcpomatic.git] / src / lib / config.h
index a982c9727623783a48b0f7cfc5659480c630613e..29511b1fe80c47e150d4b9669b1e55686de15386 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "isdcf_metadata.h"
 #include "types.h"
+#include "state.h"
 #include "edid.h"
 #include <dcp/name_format.h>
 #include <dcp/certificate_chain.h>
@@ -46,7 +47,7 @@ class DKDMGroup;
 /** @class Config
  *  @brief A singleton class holding configuration.
  */
-class Config : public boost::noncopyable
+class Config : public State
 {
 public:
        /** @return number of threads which a master DoM should use for J2K encoding on the local machine */
@@ -375,6 +376,8 @@ public:
                /* Not really a nag but it's the same idea */
                NAG_INITIAL_SETUP,
                NAG_IMPORT_DECRYPTION_CHAIN,
+               NAG_DELETE_DKDM,
+               NAG_32_ON_64,
                NAG_COUNT
        };
 
@@ -486,6 +489,15 @@ public:
                return _image_display;
        }
 
+       enum VideoViewType {
+               VIDEO_VIEW_SIMPLE,
+               VIDEO_VIEW_OPENGL
+       };
+
+       VideoViewType video_view_type () const {
+               return _video_view_type;
+       }
+
        bool respect_kdm_validity_periods () const {
                return _respect_kdm_validity_periods;
        }
@@ -952,6 +964,10 @@ public:
                maybe_set (_image_display, n);
        }
 
+       void set_video_view_type (VideoViewType v) {
+               maybe_set (_video_view_type, v);
+       }
+
        void set_respect_kdm_validity_periods (bool r) {
                maybe_set (_respect_kdm_validity_periods, r);
        }
@@ -1070,10 +1086,16 @@ public:
        static boost::signals2::signal<void ()> FailedToLoad;
        /** Emitted if read() issued a warning which the user might want to know about */
        static boost::signals2::signal<void (std::string)> Warning;
-       /** Emitted if there is a bad certificate in the signer chain.  Handler can call
-        *  true to ask Config to re-create the chain.
+       /** Emitted if there is a something wrong the contents of our config.  Handler can call
+        *  true to ask Config to solve the problem (by discarding and recreating the bad thing)
         */
-       static boost::signals2::signal<bool (void)> BadSignerChain;
+       enum BadReason {
+               BAD_SIGNER_UTF8_STRINGS,     ///< signer chain contains UTF-8 strings (not PRINTABLESTRING)
+               BAD_SIGNER_INCONSISTENT,     ///< signer chain is somehow inconsistent
+               BAD_DECRYPTION_INCONSISTENT, ///< KDM decryption chain is somehow inconsistent
+       };
+
+       static boost::signals2::signal<bool (BadReason)> Bad;
 
        void write () const;
        void write_config () const;
@@ -1094,10 +1116,6 @@ public:
        static void restore_defaults ();
        static bool have_existing (std::string);
        static boost::filesystem::path config_file ();
-       static boost::filesystem::path path (std::string file, bool create_directories = true);
-
-       /** If set, this overrides the standard path (in home, Library, AppData or wherever) for config.xml and cinemas.xml */
-       static boost::optional<boost::filesystem::path> override_path;
 
 private:
        Config ();
@@ -1256,6 +1274,7 @@ private:
        Interface _interface_complexity;
        PlayerMode _player_mode;
        int _image_display;
+       VideoViewType _video_view_type;
        bool _respect_kdm_validity_periods;
        /** Log file containing things the player does (e.g. started, stopped, loaded
            playlist etc.)  Does not contain debugging information.