Merge branch '1.0' of /home/carl/git/dvdomatic into 1.0
[dcpomatic.git] / src / wx / config_dialog.cc
index 07866f6f4800c3421fa41f879d7f9f0b9b84b96a..8fc68f06a416f3b4641f9e112ea4122e550d6c1b 100644 (file)
 #include <wx/notebook.h>
 #include "lib/config.h"
 #include "lib/server.h"
-#include "lib/format.h"
+#include "lib/ratio.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"
@@ -52,10 +53,10 @@ ConfigDialog::ConfigDialog (wxWindow* parent)
        _notebook->AddPage (_misc_panel, _("Miscellaneous"), true);
        make_servers_panel ();
        _notebook->AddPage (_servers_panel, _("Encoding servers"), false);
+       make_metadata_panel ();
+       _notebook->AddPage (_metadata_panel, _("Metadata"), false);
        make_tms_panel ();
        _notebook->AddPage (_tms_panel, _("TMS"), false);
-       make_ab_panel ();
-       _notebook->AddPage (_ab_panel, _("A/B mode"), false);
 
        wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
        overall_sizer->Add (s, 1, wxEXPAND | wxALL, 6);
@@ -77,48 +78,69 @@ ConfigDialog::make_misc_panel ()
        wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
        _misc_panel->SetSizer (s);
 
-       wxFlexGridSizer* table = new wxFlexGridSizer (3, 6, 6);
+       wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        table->AddGrowableCol (1, 1);
        s->Add (table, 1, wxALL | wxEXPAND, 8);
 
        _set_language = new wxCheckBox (_misc_panel, wxID_ANY, _("Set language"));
-       table->Add (_set_language, 1, wxEXPAND);
+       table->Add (_set_language, 1);
        _language = new wxChoice (_misc_panel, wxID_ANY);
        _language->Append (wxT ("English"));
        _language->Append (wxT ("Français"));
        _language->Append (wxT ("Italiano"));
        _language->Append (wxT ("Español"));
        _language->Append (wxT ("Svenska"));
-       table->Add (_language, 1, wxEXPAND);
-       table->AddSpacer (0);
+       table->Add (_language);
 
-       wxStaticText* restart = add_label_to_sizer (table, _misc_panel, _("(restart DCP-o-matic to see language changes)"));
+       wxStaticText* restart = add_label_to_sizer (table, _misc_panel, _("(restart DCP-o-matic to see language changes)"), false);
        wxFont font = restart->GetFont();
        font.SetStyle (wxFONTSTYLE_ITALIC);
        font.SetPointSize (font.GetPointSize() - 1);
        restart->SetFont (font);
        table->AddSpacer (0);
-       table->AddSpacer (0);
 
-       add_label_to_sizer (table, _misc_panel, _("Threads to use for encoding on this host"));
+       add_label_to_sizer (table, _misc_panel, _("Threads to use for encoding on this host"), true);
        _num_local_encoding_threads = new wxSpinCtrl (_misc_panel);
-       table->Add (_num_local_encoding_threads, 1, wxEXPAND);
-       table->AddSpacer (0);
+       table->Add (_num_local_encoding_threads, 1);
 
-       add_label_to_sizer (table, _misc_panel, _("Default directory for new films"));
-#ifdef __WXMSW__
+       {
+               add_label_to_sizer (table, _misc_panel, _("Default duration of still images"), true);
+               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+               _default_still_length = new wxSpinCtrl (_misc_panel);
+               s->Add (_default_still_length);
+               add_label_to_sizer (s, _misc_panel, _("s"), false);
+               table->Add (s, 1);
+       }
+
+       add_label_to_sizer (table, _misc_panel, _("Default directory for new films"), true);
+#ifdef DCPOMATIC_USE_OWN_DIR_PICKER
        _default_directory = new DirPickerCtrl (_misc_panel);
 #else  
        _default_directory = new wxDirPickerCtrl (_misc_panel, wxDD_DIR_MUST_EXIST);
 #endif
        table->Add (_default_directory, 1, wxEXPAND);
-       table->AddSpacer (0);
 
-       add_label_to_sizer (table, _misc_panel, _("Default DCI name details"));
+       add_label_to_sizer (table, _misc_panel, _("Default DCI name details"), true);
        _default_dci_metadata_button = new wxButton (_misc_panel, wxID_ANY, _("Edit..."));
        table->Add (_default_dci_metadata_button);
-       table->AddSpacer (1);
 
+       add_label_to_sizer (table, _misc_panel, _("Default container"), true);
+       _default_container = new wxChoice (_misc_panel, wxID_ANY);
+       table->Add (_default_container);
+
+       add_label_to_sizer (table, _misc_panel, _("Default content type"), true);
+       _default_dcp_content_type = new wxChoice (_misc_panel, wxID_ANY);
+       table->Add (_default_dcp_content_type);
+
+       {
+               add_label_to_sizer (table, _misc_panel, _("Default JPEG2000 bandwidth"), true);
+               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+               _default_j2k_bandwidth = new wxSpinCtrl (_misc_panel);
+               s->Add (_default_j2k_bandwidth);
+               add_label_to_sizer (s, _misc_panel, _("MBps"), false);
+               table->Add (s, 1);
+       }
+       
        Config* config = Config::instance ();
 
        _set_language->SetValue (config->language ());
@@ -144,11 +166,42 @@ ConfigDialog::make_misc_panel ()
        _num_local_encoding_threads->SetValue (config->num_local_encoding_threads ());
        _num_local_encoding_threads->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::num_local_encoding_threads_changed), 0, this);
 
+       _default_still_length->SetRange (1, 3600);
+       _default_still_length->SetValue (config->default_still_length ());
+       _default_still_length->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::default_still_length_changed), 0, this);
+
        _default_directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir()))));
        _default_directory->Connect (wxID_ANY, wxEVT_COMMAND_DIRPICKER_CHANGED, wxCommandEventHandler (ConfigDialog::default_directory_changed), 0, this);
 
        _default_dci_metadata_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_default_dci_metadata_clicked), 0, this);
 
+       vector<Ratio const *> ratio = Ratio::all ();
+       int n = 0;
+       for (vector<Ratio const *>::iterator i = ratio.begin(); i != ratio.end(); ++i) {
+               _default_container->Append (std_to_wx ((*i)->nickname ()));
+               if (*i == config->default_container ()) {
+                       _default_container->SetSelection (n);
+               }
+               ++n;
+       }
+
+       _default_container->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::default_container_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);
+
+       _default_j2k_bandwidth->SetRange (50, 250);
+       _default_j2k_bandwidth->SetValue (config->default_j2k_bandwidth() / 1e6);
+       _default_j2k_bandwidth->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::default_j2k_bandwidth_changed), 0, this);
 }
 
 void
@@ -158,23 +211,23 @@ ConfigDialog::make_tms_panel ()
        wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
        _tms_panel->SetSizer (s);
 
-       wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6);
+       wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        table->AddGrowableCol (1, 1);
        s->Add (table, 1, wxALL | wxEXPAND, 8);
 
-       add_label_to_sizer (table, _tms_panel, _("IP address"));
+       add_label_to_sizer (table, _tms_panel, _("IP address"), true);
        _tms_ip = new wxTextCtrl (_tms_panel, wxID_ANY);
        table->Add (_tms_ip, 1, wxEXPAND);
 
-       add_label_to_sizer (table, _tms_panel, _("Target path"));
+       add_label_to_sizer (table, _tms_panel, _("Target path"), true);
        _tms_path = new wxTextCtrl (_tms_panel, wxID_ANY);
        table->Add (_tms_path, 1, wxEXPAND);
 
-       add_label_to_sizer (table, _tms_panel, _("User name"));
+       add_label_to_sizer (table, _tms_panel, _("User name"), true);
        _tms_user = new wxTextCtrl (_tms_panel, wxID_ANY);
        table->Add (_tms_user, 1, wxEXPAND);
 
-       add_label_to_sizer (table, _tms_panel, _("Password"));
+       add_label_to_sizer (table, _tms_panel, _("Password"), true);
        _tms_password = new wxTextCtrl (_tms_panel, wxID_ANY);
        table->Add (_tms_password, 1, wxEXPAND);
 
@@ -191,45 +244,30 @@ ConfigDialog::make_tms_panel ()
 }
 
 void
-ConfigDialog::make_ab_panel ()
+ConfigDialog::make_metadata_panel ()
 {
-       _ab_panel = new wxPanel (_notebook);
+       _metadata_panel = new wxPanel (_notebook);
        wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
-       _ab_panel->SetSizer (s);
+       _metadata_panel->SetSizer (s);
 
-       wxFlexGridSizer* table = new wxFlexGridSizer (3, 6, 6);
+       wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        table->AddGrowableCol (1, 1);
-       s->Add (table, 1, wxALL, 8);
-       
-       add_label_to_sizer (table, _ab_panel, _("Reference scaler"));
-       _reference_scaler = new wxChoice (_ab_panel, wxID_ANY);
-       vector<Scaler const *> const sc = Scaler::all ();
-       for (vector<Scaler const *>::const_iterator i = sc.begin(); i != sc.end(); ++i) {
-               _reference_scaler->Append (std_to_wx ((*i)->name ()));
-       }
+       s->Add (table, 1, wxALL | wxEXPAND, 8);
 
-       table->Add (_reference_scaler, 1, wxEXPAND);
-       table->AddSpacer (0);
+       add_label_to_sizer (table, _metadata_panel, _("Issuer"), true);
+       _issuer = new wxTextCtrl (_metadata_panel, wxID_ANY);
+       table->Add (_issuer, 1, wxEXPAND);
 
-       {
-               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);
-               _reference_filters_button = new wxButton (_ab_panel, wxID_ANY, _("Edit..."));
-               s->Add (_reference_filters_button, 0);
-               table->Add (s, 1, wxEXPAND);
-               table->AddSpacer (0);
-       }
+       add_label_to_sizer (table, _metadata_panel, _("Creator"), true);
+       _creator = new wxTextCtrl (_metadata_panel, wxID_ANY);
+       table->Add (_creator, 1, wxEXPAND);
 
        Config* config = Config::instance ();
-       
-       _reference_scaler->SetSelection (Scaler::as_index (config->reference_scaler ()));
-       _reference_scaler->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::reference_scaler_changed), 0, this);
 
-       pair<string, string> p = Filter::ffmpeg_strings (config->reference_filters ());
-       _reference_filters->SetLabel (std_to_wx (p.first) + N_(" ") + std_to_wx (p.second));
-       _reference_filters_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_reference_filters_clicked), 0, this);
+       _issuer->SetValue (std_to_wx (config->dcp_metadata().issuer));
+       _issuer->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::issuer_changed), 0, this);
+       _creator->SetValue (std_to_wx (config->dcp_metadata().creator));
+       _creator->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::creator_changed), 0, this);
 }
 
 void
@@ -239,7 +277,7 @@ ConfigDialog::make_servers_panel ()
        wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
        _servers_panel->SetSizer (s);
 
-       wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6);
+       wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        table->AddGrowableCol (0, 1);
        s->Add (table, 1, wxALL | wxEXPAND, 8);
 
@@ -260,11 +298,11 @@ ConfigDialog::make_servers_panel ()
        {
                wxSizer* s = new wxBoxSizer (wxVERTICAL);
                _add_server = new wxButton (_servers_panel, wxID_ANY, _("Add"));
-               s->Add (_add_server);
+               s->Add (_add_server, 0, wxTOP | wxBOTTOM, 2);
                _edit_server = new wxButton (_servers_panel, wxID_ANY, _("Edit"));
-               s->Add (_edit_server);
+               s->Add (_edit_server, 0, wxTOP | wxBOTTOM, 2);
                _remove_server = new wxButton (_servers_panel, wxID_ANY, _("Remove"));
-               s->Add (_remove_server);
+               s->Add (_remove_server, 0, wxTOP | wxBOTTOM, 2);
                table->Add (s, 0);
        }
 
@@ -411,32 +449,6 @@ ConfigDialog::server_selection_changed (wxListEvent &)
        _remove_server->Enable (i >= 0);
 }
 
-void
-ConfigDialog::reference_scaler_changed (wxCommandEvent &)
-{
-       int const n = _reference_scaler->GetSelection ();
-       if (n >= 0) {
-               Config::instance()->set_reference_scaler (Scaler::from_index (n));
-       }
-}
-
-void
-ConfigDialog::edit_reference_filters_clicked (wxCommandEvent &)
-{
-       FilterDialog* d = new FilterDialog (this, Config::instance()->reference_filters ());
-       d->ActiveChanged.connect (boost::bind (&ConfigDialog::reference_filters_changed, this, _1));
-       d->ShowModal ();
-       d->Destroy ();
-}
-
-void
-ConfigDialog::reference_filters_changed (vector<Filter const *> f)
-{
-       Config::instance()->set_reference_filters (f);
-       pair<string, string> p = Filter::ffmpeg_strings (Config::instance()->reference_filters ());
-       _reference_filters->SetLabel (std_to_wx (p.first) + N_(" ") + std_to_wx (p.second));
-}
-
 void
 ConfigDialog::edit_default_dci_metadata_clicked (wxCommandEvent &)
 {
@@ -462,3 +474,45 @@ ConfigDialog::setup_language_sensitivity ()
 {
        _language->Enable (_set_language->GetValue ());
 }
+
+void
+ConfigDialog::default_still_length_changed (wxCommandEvent &)
+{
+       Config::instance()->set_default_still_length (_default_still_length->GetValue ());
+}
+
+void
+ConfigDialog::default_container_changed (wxCommandEvent &)
+{
+       vector<Ratio const *> ratio = Ratio::all ();
+       Config::instance()->set_default_container (ratio[_default_container->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()]);
+}
+
+void
+ConfigDialog::issuer_changed (wxCommandEvent &)
+{
+       libdcp::XMLMetadata m = Config::instance()->dcp_metadata ();
+       m.issuer = wx_to_std (_issuer->GetValue ());
+       Config::instance()->set_dcp_metadata (m);
+}
+
+void
+ConfigDialog::creator_changed (wxCommandEvent &)
+{
+       libdcp::XMLMetadata m = Config::instance()->dcp_metadata ();
+       m.creator = wx_to_std (_creator->GetValue ());
+       Config::instance()->set_dcp_metadata (m);
+}
+
+void
+ConfigDialog::default_j2k_bandwidth_changed (wxCommandEvent &)
+{
+       Config::instance()->set_default_j2k_bandwidth (_default_j2k_bandwidth->GetValue() * 1e6);
+}