Configurable default format and content type (#133).
authorCarl Hetherington <cth@carlh.net>
Thu, 2 May 2013 23:56:16 +0000 (00:56 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 2 May 2013 23:56:16 +0000 (00:56 +0100)
src/lib/config.cc
src/lib/config.h
src/lib/film.cc
src/wx/config_dialog.cc
src/wx/config_dialog.h

index 5dce3748d72c4c7bd75df294858e945301e42637..0e2e33a16deaabf75db58318fc187561f6e9078a 100644 (file)
@@ -26,6 +26,8 @@
 #include "server.h"
 #include "scaler.h"
 #include "filter.h"
+#include "format.h"
+#include "dcp_content_type.h"
 #include "sound_processor.h"
 
 #include "i18n.h"
@@ -45,6 +47,8 @@ Config::Config ()
        , _reference_scaler (Scaler::from_id (N_("bicubic")))
        , _tms_path (N_("."))
        , _sound_processor (SoundProcessor::from_id (N_("dolby_cp750")))
+       , _default_format (0)
+       , _default_dcp_content_type (0)
 {
        _allowed_dcp_frame_rates.push_back (24);
        _allowed_dcp_frame_rates.push_back (25);
@@ -96,6 +100,10 @@ Config::Config ()
                        _sound_processor = SoundProcessor::from_id (v);
                } else if (k == "language") {
                        _language = v;
+               } else if (k == "default_format") {
+                       _default_format = Format::from_metadata (v);
+               } else if (k == "default_dcp_content_type") {
+                       _default_dcp_content_type = DCPContentType::from_dci_name (v);
                }
 
                _default_dci_metadata.read (k, v);
@@ -154,6 +162,12 @@ Config::write () const
        if (_language) {
                f << "language " << _language.get() << "\n";
        }
+       if (_default_format) {
+               f << "default_format " << _default_format->as_metadata() << "\n";
+       }
+       if (_default_dcp_content_type) {
+               f << "default_dcp_content_type " << _default_dcp_content_type->dci_name() << "\n";
+       }
 
        _default_dci_metadata.write (f);
 }
index 011ca716faef1839a1227daaa14bd74ad50cab7b..6041045cfc8e176f2290371e043c3d5d9c563c30 100644 (file)
@@ -33,6 +33,8 @@ class ServerDescription;
 class Scaler;
 class Filter;
 class SoundProcessor;
+class Format;
+class DCPContentType;
 
 /** @class Config
  *  @brief A singleton class holding configuration.
@@ -107,6 +109,14 @@ public:
                return _language;
        }
 
+       Format const * default_format () const {
+               return _default_format;
+       }
+
+       DCPContentType const * default_dcp_content_type () const {
+               return _default_dcp_content_type;
+       }
+
        /** @param n New number of local encoding threads */
        void set_num_local_encoding_threads (int n) {
                _num_local_encoding_threads = n;
@@ -169,6 +179,14 @@ public:
        void unset_language () {
                _language = boost::none;
        }
+
+       void set_default_format (Format const * f) {
+               _default_format = f;
+       }
+
+       void set_default_dcp_content_type (DCPContentType const * t) {
+               _default_dcp_content_type = t;
+       }
        
        void write () const;
 
@@ -206,6 +224,8 @@ private:
        /** Default DCI metadata for newly-created Films */
        DCIMetadata _default_dci_metadata;
        boost::optional<std::string> _language;
+       Format const * _default_format;
+       DCPContentType const * _default_dcp_content_type;
 
        /** Singleton instance, or 0 */
        static Config* _instance;
index b0785df34aeba5e1eb7b203dc124b6f031637068..0ca3746044291ff62de38ba8d130873a86b5001c 100644 (file)
@@ -88,8 +88,8 @@ int const Film::state_version = 4;
 Film::Film (string d, bool must_exist)
        : _use_dci_name (true)
        , _trust_content_header (true)
-       , _dcp_content_type (0)
-       , _format (0)
+       , _dcp_content_type (Config::instance()->default_dcp_content_type ())
+       , _format (Config::instance()->default_format ())
        , _scaler (Scaler::from_id ("bicubic"))
        , _trim_start (0)
        , _trim_end (0)
index 07866f6f4800c3421fa41f879d7f9f0b9b84b96a..a91bfd64c6f423e2bad013fce64585d9bb31e2b0 100644 (file)
@@ -31,6 +31,7 @@
 #include "lib/format.h"
 #include "lib/scaler.h"
 #include "lib/filter.h"
+#include "lib/dcp_content_type.h"
 #include "config_dialog.h"
 #include "wx_util.h"
 #include "filter_dialog.h"
@@ -119,6 +120,16 @@ ConfigDialog::make_misc_panel ()
        table->Add (_default_dci_metadata_button);
        table->AddSpacer (1);
 
+       add_label_to_sizer (table, _misc_panel, _("Default format"));
+       _default_format = new wxChoice (_misc_panel, wxID_ANY);
+       table->Add (_default_format);
+       table->AddSpacer (1);
+
+       add_label_to_sizer (table, _misc_panel, _("Default content type"));
+       _default_dcp_content_type = new wxChoice (_misc_panel, wxID_ANY);
+       table->Add (_default_dcp_content_type);
+       table->AddSpacer (1);
+       
        Config* config = Config::instance ();
 
        _set_language->SetValue (config->language ());
@@ -149,6 +160,29 @@ ConfigDialog::make_misc_panel ()
 
        _default_dci_metadata_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_default_dci_metadata_clicked), 0, this);
 
+       vector<Format const *> fmt = Format::all ();
+       int n = 0;
+       for (vector<Format const *>::iterator i = fmt.begin(); i != fmt.end(); ++i) {
+               _default_format->Append (std_to_wx ((*i)->name ()));
+               if (*i == config->default_format ()) {
+                       _default_format->SetSelection (n);
+               }
+               ++n;
+       }
+
+       _default_format->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::default_format_changed), 0, this);
+       
+       vector<DCPContentType const *> const ct = DCPContentType::all ();
+       n = 0;
+       for (vector<DCPContentType const *>::const_iterator i = ct.begin(); i != ct.end(); ++i) {
+               _default_dcp_content_type->Append (std_to_wx ((*i)->pretty_name ()));
+               if (*i == config->default_dcp_content_type ()) {
+                       _default_dcp_content_type->SetSelection (n);
+               }
+               ++n;
+       }
+
+       _default_dcp_content_type->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::default_dcp_content_type_changed), 0, this);
 }
 
 void
@@ -215,7 +249,7 @@ ConfigDialog::make_ab_panel ()
                add_label_to_sizer (table, _ab_panel, _("Reference filters"));
                wxSizer* s = new wxBoxSizer (wxHORIZONTAL);
                _reference_filters = new wxStaticText (_ab_panel, wxID_ANY, wxT (""));
-               s->Add (_reference_filters, 1, wxEXPAND);
+               s->Add (_reference_filters, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, 6);
                _reference_filters_button = new wxButton (_ab_panel, wxID_ANY, _("Edit..."));
                s->Add (_reference_filters_button, 0);
                table->Add (s, 1, wxEXPAND);
@@ -462,3 +496,17 @@ ConfigDialog::setup_language_sensitivity ()
 {
        _language->Enable (_set_language->GetValue ());
 }
+
+void
+ConfigDialog::default_format_changed (wxCommandEvent &)
+{
+       vector<Format const *> fmt = Format::all ();
+       Config::instance()->set_default_format (fmt[_default_format->GetSelection()]);
+}
+
+void
+ConfigDialog::default_dcp_content_type_changed (wxCommandEvent &)
+{
+       vector<DCPContentType const *> ct = DCPContentType::all ();
+       Config::instance()->set_default_dcp_content_type (ct[_default_dcp_content_type->GetSelection()]);
+}
index 598279e86e0ac141d2383ec949564f073d5c91d4..c926b0937d84fcb35f64d0cb118b009a9cd8d035 100644 (file)
@@ -56,6 +56,8 @@ private:
        void edit_server_clicked (wxCommandEvent &);
        void remove_server_clicked (wxCommandEvent &);
        void server_selection_changed (wxListEvent &);
+       void default_format_changed (wxCommandEvent &);
+       void default_dcp_content_type_changed (wxCommandEvent &);
 
        void add_server_to_control (ServerDescription *);
        void setup_language_sensitivity ();
@@ -72,6 +74,8 @@ private:
        wxPanel* _servers_panel;
        wxCheckBox* _set_language;
        wxChoice* _language;
+       wxChoice* _default_format;
+       wxChoice* _default_dcp_content_type;
        wxTextCtrl* _tms_ip;
        wxTextCtrl* _tms_path;
        wxTextCtrl* _tms_user;