No-op: remove all trailing whitespace.
[dcpomatic.git] / src / lib / config.h
index 9a18086829af77194d973941399b93ee80c1a52a..0040591f165543c4b895c9171397aa91b7e95eaa 100644 (file)
 #ifndef DCPOMATIC_CONFIG_H
 #define DCPOMATIC_CONFIG_H
 
-#include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/signals2.hpp>
-#include <boost/filesystem.hpp>
+#include "isdcf_metadata.h"
+#include "video_content.h"
 #include <dcp/metadata.h>
 #include <dcp/certificates.h>
 #include <dcp/signer.h>
-#include "isdcf_metadata.h"
-#include "colour_conversion.h"
+#include <boost/shared_ptr.hpp>
+#include <boost/signals2.hpp>
+#include <boost/filesystem.hpp>
+#include <vector>
 
 class ServerDescription;
 class Scaler;
@@ -48,7 +48,6 @@ class Cinema;
 class Config : public boost::noncopyable
 {
 public:
-
        /** @return number of threads to use for J2K encoding on the local machine */
        int num_local_encoding_threads () const {
                return _num_local_encoding_threads;
@@ -89,7 +88,7 @@ public:
        std::string tms_ip () const {
                return _tms_ip;
        }
-       
+
        /** @return The path on a TMS that we should changed DCPs to */
        std::string tms_path () const {
                return _tms_path;
@@ -113,7 +112,7 @@ public:
        std::list<boost::shared_ptr<Cinema> > cinemas () const {
                return _cinemas;
        }
-       
+
        std::list<int> allowed_dcp_frame_rates () const {
                return _allowed_dcp_frame_rates;
        }
@@ -121,7 +120,7 @@ public:
        bool allow_any_dcp_frame_rate () const {
                return _allow_any_dcp_frame_rate;
        }
-       
+
        ISDCFMetadata default_isdcf_metadata () const {
                return _default_isdcf_metadata;
        }
@@ -134,10 +133,6 @@ public:
                return _default_still_length;
        }
 
-       Ratio const * default_scale () const {
-               return _default_scale;
-       }
-
        Ratio const * default_container () const {
                return _default_container;
        }
@@ -158,10 +153,6 @@ public:
                return _default_audio_delay;
        }
 
-       std::vector<PresetColourConversion> colour_conversions () const {
-               return _colour_conversions;
-       }
-
        std::string mail_server () const {
                return _mail_server;
        }
@@ -189,7 +180,7 @@ public:
        std::string kdm_bcc () const {
                return _kdm_bcc;
        }
-       
+
        std::string kdm_email () const {
                return _kdm_email;
        }
@@ -222,49 +213,48 @@ public:
                return _log_types;
        }
 
+#ifdef DCPOMATIC_WINDOWS
+       bool win32_console () const {
+               return _win32_console;
+       }
+#endif
+
        std::vector<boost::filesystem::path> history () const {
                return _history;
        }
 
        /** @param n New number of local encoding threads */
        void set_num_local_encoding_threads (int n) {
-               _num_local_encoding_threads = n;
-               changed ();
+               maybe_set (_num_local_encoding_threads, n);
        }
 
        void set_default_directory (boost::filesystem::path d) {
-               _default_directory = d;
-               changed ();
+               maybe_set (_default_directory, d);
        }
 
        /** @param p New server port */
        void set_server_port_base (int p) {
-               _server_port_base = p;
-               changed ();
+               maybe_set (_server_port_base, p);
        }
 
        /** @param i IP address of a TMS that we can copy DCPs to */
        void set_tms_ip (std::string i) {
-               _tms_ip = i;
-               changed ();
+               maybe_set (_tms_ip, i);
        }
 
        /** @param p Path on a TMS that we should changed DCPs to */
        void set_tms_path (std::string p) {
-               _tms_path = p;
-               changed ();
+               maybe_set (_tms_path, p);
        }
 
        /** @param u User name to log into the TMS with */
        void set_tms_user (std::string u) {
-               _tms_user = u;
-               changed ();
+               maybe_set (_tms_user, u);
        }
 
        /** @param p Password to log into the TMS with */
        void set_tms_password (std::string p) {
-               _tms_password = p;
-               changed ();
+               maybe_set (_tms_password, p);
        }
 
        void add_cinema (boost::shared_ptr<Cinema> c) {
@@ -278,146 +268,125 @@ public:
        }
 
        void set_allowed_dcp_frame_rates (std::list<int> const & r) {
-               _allowed_dcp_frame_rates = r;
-               changed ();
+               maybe_set (_allowed_dcp_frame_rates, r);
        }
 
        void set_allow_any_dcp_frame_rate (bool a) {
-               _allow_any_dcp_frame_rate = a;
-               changed ();
+               maybe_set (_allow_any_dcp_frame_rate, a);
        }
 
        void set_default_isdcf_metadata (ISDCFMetadata d) {
-               _default_isdcf_metadata = d;
-               changed ();
+               maybe_set (_default_isdcf_metadata, d);
        }
 
        void set_language (std::string l) {
+               if (_language && _language.get() == l) {
+                       return;
+               }
                _language = l;
                changed ();
        }
 
        void unset_language () {
+               if (!_language) {
+                       return;
+               }
+
                _language = boost::none;
                changed ();
        }
 
        void set_default_still_length (int s) {
-               _default_still_length = s;
-               changed ();
-       }
-
-       void set_default_scale (Ratio const * s) {
-               _default_scale = s;
-               changed ();
+               maybe_set (_default_still_length, s);
        }
 
        void set_default_container (Ratio const * c) {
-               _default_container = c;
-               changed ();
+               maybe_set (_default_container, c);
        }
 
        void set_default_dcp_content_type (DCPContentType const * t) {
-               _default_dcp_content_type = t;
-               changed ();
+               maybe_set (_default_dcp_content_type, t);
        }
 
        void set_dcp_issuer (std::string i) {
-               _dcp_issuer = i;
-               changed ();
+               maybe_set (_dcp_issuer, i);
        }
 
        void set_default_j2k_bandwidth (int b) {
-               _default_j2k_bandwidth = b;
-               changed ();
+               maybe_set (_default_j2k_bandwidth, b);
        }
 
        void set_default_audio_delay (int d) {
-               _default_audio_delay = d;
-               changed ();
-       }
-
-       void set_colour_conversions (std::vector<PresetColourConversion> const & c) {
-               _colour_conversions = c;
-               changed ();
+               maybe_set (_default_audio_delay, d);
        }
 
        void set_mail_server (std::string s) {
-               _mail_server = s;
-               changed ();
+               maybe_set (_mail_server, s);
        }
 
        void set_mail_user (std::string u) {
-               _mail_user = u;
-               changed ();
+               maybe_set (_mail_user, u);
        }
 
        void set_mail_password (std::string p) {
-               _mail_password = p;
-               changed ();
+               maybe_set (_mail_password, p);
        }
 
        void set_kdm_subject (std::string s) {
-               _kdm_subject = s;
-               changed ();
+               maybe_set (_kdm_subject, s);
        }
 
        void set_kdm_from (std::string f) {
-               _kdm_from = f;
-               changed ();
+               maybe_set (_kdm_from, f);
        }
 
        void set_kdm_cc (std::string f) {
-               _kdm_cc = f;
-               changed ();
+               maybe_set (_kdm_cc, f);
        }
 
        void set_kdm_bcc (std::string f) {
-               _kdm_bcc = f;
-               changed ();
+               maybe_set (_kdm_bcc, f);
        }
-       
+
        void set_kdm_email (std::string e) {
-               _kdm_email = e;
-               changed ();
+               maybe_set (_kdm_email, e);
        }
 
        void reset_kdm_email ();
 
        void set_signer (boost::shared_ptr<const dcp::Signer> s) {
-               _signer = s;
-               changed ();
+               maybe_set (_signer, s);
        }
 
        void set_decryption_certificate (dcp::Certificate c) {
-               _decryption_certificate = c;
-               changed ();
+               maybe_set (_decryption_certificate, c);
        }
 
        void set_decryption_private_key (std::string k) {
-               _decryption_private_key = k;
-               changed ();
+               maybe_set (_decryption_private_key, k);
        }
 
        void set_check_for_updates (bool c) {
-               _check_for_updates = c;
-               changed ();
+               maybe_set (_check_for_updates, c);
        }
 
        void set_check_for_test_updates (bool c) {
-               _check_for_test_updates = c;
-               changed ();
+               maybe_set (_check_for_test_updates, c);
        }
 
        void set_maximum_j2k_bandwidth (int b) {
-               _maximum_j2k_bandwidth = b;
-               changed ();
+               maybe_set (_maximum_j2k_bandwidth, b);
        }
 
        void set_log_types (int t) {
-               _log_types = t;
-               changed ();
+               maybe_set (_log_types, t);
+       }
+
+#ifdef DCPOMATIC_WINDOWS
+       void set_win32_console (bool c) {
+               maybe_set (_win32_console, c);
        }
+#endif
 
        void clear_history () {
                _history.clear ();
@@ -425,19 +394,32 @@ public:
        }
 
        void add_to_history (boost::filesystem::path p);
-       
+
        void changed ();
        boost::signals2::signal<void ()> Changed;
 
+       void write () const;
+
        static Config* instance ();
        static void drop ();
+       static void restore_defaults ();
 
 private:
        Config ();
-       boost::filesystem::path file (bool) const;
+       boost::filesystem::path file () const;
        void read ();
-       void write () const;
        void make_decryption_keys ();
+       void set_defaults ();
+       void set_kdm_email_to_default ();
+
+       template <class T>
+       void maybe_set (T& member, T new_value) {
+               if (member == new_value) {
+                       return;
+               }
+               member = new_value;
+               changed ();
+       }
 
        /** number of threads to use for J2K encoding on the local machine */
        int _num_local_encoding_threads;
@@ -467,14 +449,13 @@ private:
        /** 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;
-       Ratio const * _default_scale;
        Ratio const * _default_container;
        DCPContentType const * _default_dcp_content_type;
        std::string _dcp_issuer;
        int _default_j2k_bandwidth;
        int _default_audio_delay;
-       std::vector<PresetColourConversion> _colour_conversions;
        std::list<boost::shared_ptr<Cinema> > _cinemas;
        std::string _mail_server;
        std::string _mail_user;
@@ -493,8 +474,11 @@ private:
        /** maximum allowed J2K bandwidth in bits per second */
        int _maximum_j2k_bandwidth;
        int _log_types;
+#ifdef DCPOMATIC_WINDOWS
+       bool _win32_console;
+#endif
        std::vector<boost::filesystem::path> _history;
-       
+
        /** Singleton instance, or 0 */
        static Config* _instance;
 };