diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-03-17 00:22:52 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-03-17 00:22:52 +0000 |
| commit | 2e504b33eb9f38cac629ad31b7c107fb0cf5efda (patch) | |
| tree | 9c571653f312597b744896d45e27d422acbeea88 /src/wx | |
| parent | a4c19a34244aeaf183c25878933b570fc5c0ee34 (diff) | |
| parent | 48b2c7b8ec57e72f2f27d5080e54e4b3c3fcda3d (diff) | |
Merge master.
Diffstat (limited to 'src/wx')
| -rw-r--r-- | src/wx/about_dialog.cc | 118 | ||||
| -rw-r--r-- | src/wx/config_dialog.cc | 1121 | ||||
| -rw-r--r-- | src/wx/config_dialog.h | 102 | ||||
| -rw-r--r-- | src/wx/editable_list.h | 1 | ||||
| -rw-r--r-- | src/wx/film_viewer.cc | 4 | ||||
| -rw-r--r-- | src/wx/kdm_dialog.cc | 22 | ||||
| -rw-r--r-- | src/wx/new_film_dialog.cc | 2 | ||||
| -rw-r--r-- | src/wx/video_panel.cc | 11 |
8 files changed, 715 insertions, 666 deletions
diff --git a/src/wx/about_dialog.cc b/src/wx/about_dialog.cc index 3c0730870..01332dfcc 100644 --- a/src/wx/about_dialog.cc +++ b/src/wx/about_dialog.cc @@ -91,92 +91,96 @@ AboutDialog::AboutDialog (wxWindow* parent) add_section (_("Written by"), written_by); wxArrayString translated_by; - translated_by.Add (wxT ("Adam Klotblixt")); - translated_by.Add (wxT ("Lilian Lefranc")); translated_by.Add (wxT ("Manuel AC")); - translated_by.Add (wxT ("Markus Raab")); translated_by.Add (wxT ("Massimiliano Broggi")); - translated_by.Add (wxT ("Olivier Perriere")); - translated_by.Add (wxT ("Thierry Journet")); translated_by.Add (wxT ("William Fanelli")); + translated_by.Add (wxT ("Thierry Journet")); + translated_by.Add (wxT ("Adam Klotblixt")); + translated_by.Add (wxT ("Lilian Lefranc")); + translated_by.Add (wxT ("Olivier Perriere")); + translated_by.Add (wxT ("Markus Raab")); add_section (_("Translated by"), translated_by); + wxArrayString artwork_by; + artwork_by.Add (wxT ("David Vignoni")); + add_section (_("Artwork by"), artwork_by); + wxArrayString supported_by; + supported_by.Add (wxT ("Manual AC")); + supported_by.Add (wxT ("Kambiz Afshar")); + supported_by.Add (wxT ("Jeff Boot")); + supported_by.Add (wxT ("Kieran Carroll")); + supported_by.Add (wxT ("Frank Cianciolo")); + supported_by.Add (wxT ("Cinema Clarici")); supported_by.Add (wxT ("Adam Colt")); - supported_by.Add (wxT ("Adam Klotblixt")); - supported_by.Add (wxT ("Aldo Midali")); supported_by.Add (wxT ("Andres Fink")); - supported_by.Add (wxT ("Andrä Steiner")); - supported_by.Add (wxT ("Carsten Kurz")); - supported_by.Add (wxT ("Cinema Clarici")); supported_by.Add (wxT ("Evan Freeze")); - supported_by.Add (wxT ("Filip Kovcin")); + supported_by.Add (wxT ("Rodolfo Giuliano")); supported_by.Add (wxT ("Flor Guillaume")); - supported_by.Add (wxT ("Frank Cianciolo")); - supported_by.Add (wxT ("Frank de Wulf")); + supported_by.Add (wxT ("Jonathan Jensen")); + supported_by.Add (wxT ("Adam Klotblixt")); + supported_by.Add (wxT ("Filip Kovcin")); + supported_by.Add (wxT ("Carsten Kurz")); + supported_by.Add (wxT ("Lilian Lefranc")); + supported_by.Add (wxT ("Sean Leigh")); + supported_by.Add (wxT ("Olivier Lemaire")); supported_by.Add (wxT ("Gavin Lewarne")); + supported_by.Add (wxT ("Theo Lipfert")); + supported_by.Add (wxT ("Mattias Mattsson")); + supported_by.Add (wxT ("Kjarten Michaelsen")); + supported_by.Add (wxT ("Aldo Midali")); + supported_by.Add (wxT ("Sylvain Mielle")); + supported_by.Add (wxT ("Lindsay Morris")); + supported_by.Add (wxT ("Tim O'Brien")); supported_by.Add (wxT ("Ivan Pullman")); - supported_by.Add (wxT ("Jeff Boot")); - supported_by.Add (wxT ("Jonathan Jensen")); + supported_by.Add (wxT ("Andrä Steiner")); supported_by.Add (wxT ("Jussi Siponen")); - supported_by.Add (wxT ("Kambiz Afshar")); - supported_by.Add (wxT ("Kieran Carroll")); - supported_by.Add (wxT ("Kjarten Michaelsen")); supported_by.Add (wxT ("Lasse Salling")); - supported_by.Add (wxT ("Lilian Lefranc")); - supported_by.Add (wxT ("Lindsay Morris")); - supported_by.Add (wxT ("Manual AC")); - supported_by.Add (wxT ("Mattias Mattsson")); supported_by.Add (wxT ("Mike Stiebing")); - supported_by.Add (wxT ("Olivier Lemaire")); supported_by.Add (wxT ("Randy Stankey")); - supported_by.Add (wxT ("Rodolfo Giuliano")); - supported_by.Add (wxT ("Sean Leigh")); - supported_by.Add (wxT ("Sylvain Mielle")); - supported_by.Add (wxT ("Theo Lipfert")); - supported_by.Add (wxT ("Tim O'Brien")); supported_by.Add (wxT ("Wolfgang Woehl")); supported_by.Add (wxT ("Wolfram Weber")); + supported_by.Add (wxT ("Frank de Wulf")); add_section (_("Supported by"), supported_by); wxArrayString tested_by; - tested_by.Add (wxT ("Ada de Kamper")); - tested_by.Add (wxT ("Adam Colt")); - tested_by.Add (wxT ("Adam Keay")); - tested_by.Add (wxT ("Anders Nordentoft-Madsen")); - tested_by.Add (wxT ("Andreas Eli")); - tested_by.Add (wxT ("Andreas Weiss")); - tested_by.Add (wxT ("Bill Lam")); - tested_by.Add (wxT ("Brad Miller")); - tested_by.Add (wxT ("Carsten Kurz")); + tested_by.Add (wxT ("Trever Anderson")); + tested_by.Add (wxT ("Mike Blakesley")); tested_by.Add (wxT ("David Booty")); - tested_by.Add (wxT ("Denzil Kriekenbeek")); - tested_by.Add (wxT ("Gavin Lewarne")); - tested_by.Add (wxT ("Greg Rooke")); - tested_by.Add (wxT ("Gérald Maruccia")); + tested_by.Add (wxT ("Roop Chand")); + tested_by.Add (wxT ("Adam Colt")); tested_by.Add (wxT ("John Convertino")); + tested_by.Add (wxT ("Andreas Eli")); + tested_by.Add (wxT ("Maurizio Giampà")); + tested_by.Add (wxT ("Luke Granger-Brown")); + tested_by.Add (wxT ("Steve Guttag")); + tested_by.Add (wxT ("Patrick Haderer")); tested_by.Add (wxT ("Jonathan Jensen")); - tested_by.Add (wxT ("Karim Senoucci")); + tested_by.Add (wxT ("Thierry Journet")); + tested_by.Add (wxT ("Ada de Kamper")); + tested_by.Add (wxT ("Stefan Karner")); + tested_by.Add (wxT ("Adam Keay")); + tested_by.Add (wxT ("Simon Kesselman")); + tested_by.Add (wxT ("Pepijn Klijs")); + tested_by.Add (wxT ("Denzil Kriekenbeek")); + tested_by.Add (wxT ("Carsten Kurz")); + tested_by.Add (wxT ("Bill Lam")); tested_by.Add (wxT ("Lilian Lefranc")); - tested_by.Add (wxT ("Luke Granger-Brown")); - tested_by.Add (wxT ("Markus Raab")); + tested_by.Add (wxT ("Olivier Lemaire")); + tested_by.Add (wxT ("Gavin Lewarne")); tested_by.Add (wxT ("Mattias Mattsson")); - tested_by.Add (wxT ("Maurizio Giampà")); + tested_by.Add (wxT ("Gérald Maruccia")); + tested_by.Add (wxT ("Will Meadows")); + tested_by.Add (wxT ("Brad Miller")); + tested_by.Add (wxT ("Anders Nordentoft-Madsen")); tested_by.Add (wxT ("Mauro Ottonello")); - tested_by.Add (wxT ("Mike Blakesley")); - tested_by.Add (wxT ("Olivier Lemaire")); - tested_by.Add (wxT ("Patrick Haderer")); - tested_by.Add (wxT ("Paul Willmott")); - tested_by.Add (wxT ("Pepijn Klijs")); tested_by.Add (wxT ("Peter Puchner")); - tested_by.Add (wxT ("Roop Chand")); - tested_by.Add (wxT ("Simon Kesselman")); + tested_by.Add (wxT ("Markus Raab")); + tested_by.Add (wxT ("Greg Rooke")); + tested_by.Add (wxT ("Karim Senoucci")); tested_by.Add (wxT ("Simon Vannarath")); - tested_by.Add (wxT ("Stefan Karner")); - tested_by.Add (wxT ("Steve Guttag")); - tested_by.Add (wxT ("Thierry Journet")); - tested_by.Add (wxT ("Trever Anderson")); - tested_by.Add (wxT ("Will Meadows")); + tested_by.Add (wxT ("Andreas Weiss")); + tested_by.Add (wxT ("Paul Willmott")); tested_by.Add (wxT ("Wolfgang Woehl")); add_section (_("Tested by"), tested_by); diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 911cb4b3f..44745006c 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,7 +25,9 @@ #include <boost/lexical_cast.hpp> #include <boost/filesystem.hpp> #include <wx/stdpaths.h> -#include <wx/notebook.h> +#include <wx/preferences.h> +#include <wx/filepicker.h> +#include <wx/spinctrl.h> #include <dcp/colour_matrix.h> #include "lib/config.h" #include "lib/ratio.h" @@ -35,6 +37,7 @@ #include "lib/colour_conversion.h" #include "config_dialog.h" #include "wx_util.h" +#include "editable_list.h" #include "filter_dialog.h" #include "dir_picker_ctrl.h" #include "dci_metadata_dialog.h" @@ -44,561 +47,691 @@ using std::vector; using std::string; using std::list; +using std::cout; using boost::bind; using boost::shared_ptr; using boost::lexical_cast; -ConfigDialog::ConfigDialog (wxWindow* parent) - : wxDialog (parent, wxID_ANY, _("DCP-o-matic Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +class Page { - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _notebook = new wxNotebook (this, wxID_ANY); - s->Add (_notebook, 1); - - make_misc_panel (); - _notebook->AddPage (_misc_panel, _("Miscellaneous"), true); - make_defaults_panel (); - _notebook->AddPage (_defaults_panel, _("Defaults"), false); - make_servers_panel (); - _notebook->AddPage (_servers_panel, _("Encoding servers"), false); - make_colour_conversions_panel (); - _notebook->AddPage (_colour_conversions_panel, _("Colour conversions"), false); - make_metadata_panel (); - _notebook->AddPage (_metadata_panel, _("Metadata"), false); - make_tms_panel (); - _notebook->AddPage (_tms_panel, _("TMS"), false); - make_kdm_email_panel (); - _notebook->AddPage (_kdm_email_panel, _("KDM email"), false); - - wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); - overall_sizer->Add (s, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); - - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); - if (buttons) { - overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); - } - - SetSizer (overall_sizer); - overall_sizer->Layout (); - overall_sizer->SetSizeHints (this); -} +public: + Page (wxSize panel_size, int border) + : _panel_size (panel_size) + , _border (border) + {} + +protected: + wxSize _panel_size; + int _border; +}; -void -ConfigDialog::make_misc_panel () +class GeneralPage : public wxStockPreferencesPage, public Page { - _misc_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _misc_panel->SetSizer (s); - - 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); - _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")); - _language->Append (wxT ("Deutsch")); - table->Add (_language); - - 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); - - 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); - - add_label_to_sizer (table, _misc_panel, _("Outgoing mail server"), true); - _mail_server = new wxTextCtrl (_misc_panel, wxID_ANY); - table->Add (_mail_server, 1, wxEXPAND | wxALL); - - add_label_to_sizer (table, _misc_panel, _("Mail user name"), true); - _mail_user = new wxTextCtrl (_misc_panel, wxID_ANY); - table->Add (_mail_user, 1, wxEXPAND | wxALL); - - add_label_to_sizer (table, _misc_panel, _("Mail password"), true); - _mail_password = new wxTextCtrl (_misc_panel, wxID_ANY); - table->Add (_mail_password, 1, wxEXPAND | wxALL); - - wxStaticText* plain = add_label_to_sizer (table, _misc_panel, _("(password will be stored on disk in plaintext)"), false); - plain->SetFont (font); - table->AddSpacer (0); - - add_label_to_sizer (table, _misc_panel, _("From address for KDM emails"), true); - _kdm_from = new wxTextCtrl (_misc_panel, wxID_ANY); - table->Add (_kdm_from, 1, wxEXPAND | wxALL); +public: + GeneralPage (wxSize panel_size, int border) + : wxStockPreferencesPage (Kind_General) + , Page (panel_size, border) + {} - _check_for_updates = new wxCheckBox (_misc_panel, wxID_ANY, _("Check for updates on startup")); - table->Add (_check_for_updates, 1, wxEXPAND | wxALL); - table->AddSpacer (0); + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, _border); + + _set_language = new wxCheckBox (panel, wxID_ANY, _("Set language")); + table->Add (_set_language, 1); + _language = new wxChoice (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")); + _language->Append (wxT ("Deutsch")); + table->Add (_language); + + wxStaticText* restart = add_label_to_sizer (table, 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); + + add_label_to_sizer (table, panel, _("Threads to use for encoding on this host"), true); + _num_local_encoding_threads = new wxSpinCtrl (panel); + table->Add (_num_local_encoding_threads, 1); + + add_label_to_sizer (table, panel, _("Outgoing mail server"), true); + _mail_server = new wxTextCtrl (panel, wxID_ANY); + table->Add (_mail_server, 1, wxEXPAND | wxALL); + + add_label_to_sizer (table, panel, _("Mail user name"), true); + _mail_user = new wxTextCtrl (panel, wxID_ANY); + table->Add (_mail_user, 1, wxEXPAND | wxALL); + + add_label_to_sizer (table, panel, _("Mail password"), true); + _mail_password = new wxTextCtrl (panel, wxID_ANY); + table->Add (_mail_password, 1, wxEXPAND | wxALL); + + wxStaticText* plain = add_label_to_sizer (table, panel, _("(password will be stored on disk in plaintext)"), false); + plain->SetFont (font); + table->AddSpacer (0); + + add_label_to_sizer (table, panel, _("From address for KDM emails"), true); + _kdm_from = new wxTextCtrl (panel, wxID_ANY); + table->Add (_kdm_from, 1, wxEXPAND | wxALL); + + _check_for_updates = new wxCheckBox (panel, wxID_ANY, _("Check for updates on startup")); + table->Add (_check_for_updates, 1, wxEXPAND | wxALL); + table->AddSpacer (0); + + _check_for_test_updates = new wxCheckBox (panel, wxID_ANY, _("Check for testing updates as well as stable ones")); + table->Add (_check_for_test_updates, 1, wxEXPAND | wxALL); + table->AddSpacer (0); + + Config* config = Config::instance (); + + _set_language->SetValue (config->language ()); + + if (config->language().get_value_or ("") == "fr") { + _language->SetSelection (1); + } else if (config->language().get_value_or ("") == "it") { + _language->SetSelection (2); + } else if (config->language().get_value_or ("") == "es") { + _language->SetSelection (3); + } else if (config->language().get_value_or ("") == "sv") { + _language->SetSelection (4); + } else if (config->language().get_value_or ("") == "de") { + _language->SetSelection (5); + } else { + _language->SetSelection (0); + } + + setup_language_sensitivity (); + + _set_language->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::set_language_changed, this)); + _language->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&GeneralPage::language_changed, this)); + + _num_local_encoding_threads->SetRange (1, 128); + _num_local_encoding_threads->SetValue (config->num_local_encoding_threads ()); + _num_local_encoding_threads->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&GeneralPage::num_local_encoding_threads_changed, this)); + + _mail_server->SetValue (std_to_wx (config->mail_server ())); + _mail_server->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&GeneralPage::mail_server_changed, this)); + _mail_user->SetValue (std_to_wx (config->mail_user ())); + _mail_user->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&GeneralPage::mail_user_changed, this)); + _mail_password->SetValue (std_to_wx (config->mail_password ())); + _mail_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&GeneralPage::mail_password_changed, this)); + _kdm_from->SetValue (std_to_wx (config->kdm_from ())); + _kdm_from->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&GeneralPage::kdm_from_changed, this)); + _check_for_updates->SetValue (config->check_for_updates ()); + _check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_updates_changed, this)); + _check_for_test_updates->SetValue (config->check_for_test_updates ()); + _check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_test_updates_changed, this)); + + return panel; + } - _check_for_test_updates = new wxCheckBox (_misc_panel, wxID_ANY, _("Check for testing updates as well as stable ones")); - table->Add (_check_for_test_updates, 1, wxEXPAND | wxALL); - table->AddSpacer (0); - - Config* config = Config::instance (); +private: + void setup_language_sensitivity () + { + _language->Enable (_set_language->GetValue ()); + } - _set_language->SetValue (config->language ()); + void set_language_changed () + { + setup_language_sensitivity (); + if (_set_language->GetValue ()) { + language_changed (); + } else { + Config::instance()->unset_language (); + } + } - if (config->language().get_value_or ("") == "fr") { - _language->SetSelection (1); - } else if (config->language().get_value_or ("") == "it") { - _language->SetSelection (2); - } else if (config->language().get_value_or ("") == "es") { - _language->SetSelection (3); - } else if (config->language().get_value_or ("") == "sv") { - _language->SetSelection (4); - } else if (config->language().get_value_or ("") == "de") { - _language->SetSelection (5); - } else { - _language->SetSelection (0); - } - - setup_language_sensitivity (); - - _set_language->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::set_language_changed, this)); - _language->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&ConfigDialog::language_changed, this)); - - _num_local_encoding_threads->SetRange (1, 128); - _num_local_encoding_threads->SetValue (config->num_local_encoding_threads ()); - _num_local_encoding_threads->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&ConfigDialog::num_local_encoding_threads_changed, this)); - - _mail_server->SetValue (std_to_wx (config->mail_server ())); - _mail_server->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::mail_server_changed, this)); - _mail_user->SetValue (std_to_wx (config->mail_user ())); - _mail_user->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::mail_user_changed, this)); - _mail_password->SetValue (std_to_wx (config->mail_password ())); - _mail_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::mail_password_changed, this)); - _kdm_from->SetValue (std_to_wx (config->kdm_from ())); - _kdm_from->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::kdm_from_changed, this)); - _check_for_updates->SetValue (config->check_for_updates ()); - _check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::check_for_updates_changed, this)); - _check_for_test_updates->SetValue (config->check_for_test_updates ()); - _check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::check_for_test_updates_changed, this)); -} + void language_changed () + { + switch (_language->GetSelection ()) { + case 0: + Config::instance()->set_language ("en"); + break; + case 1: + Config::instance()->set_language ("fr"); + break; + case 2: + Config::instance()->set_language ("it"); + break; + case 3: + Config::instance()->set_language ("es"); + break; + case 4: + Config::instance()->set_language ("sv"); + break; + case 5: + Config::instance()->set_language ("de"); + break; + } + } + + void mail_server_changed () + { + Config::instance()->set_mail_server (wx_to_std (_mail_server->GetValue ())); + } + + void mail_user_changed () + { + Config::instance()->set_mail_user (wx_to_std (_mail_user->GetValue ())); + } + + void mail_password_changed () + { + Config::instance()->set_mail_password (wx_to_std (_mail_password->GetValue ())); + } + + void kdm_from_changed () + { + Config::instance()->set_kdm_from (wx_to_std (_kdm_from->GetValue ())); + } -void -ConfigDialog::make_defaults_panel () -{ - _defaults_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _defaults_panel->SetSizer (s); + void check_for_updates_changed () + { + Config::instance()->set_check_for_updates (_check_for_updates->GetValue ()); + } + + void check_for_test_updates_changed () + { + Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); + } - wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); - table->AddGrowableCol (1, 1); - s->Add (table, 1, wxALL | wxEXPAND, 8); + void num_local_encoding_threads_changed () + { + Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ()); + } + + wxCheckBox* _set_language; + wxChoice* _language; + wxSpinCtrl* _num_local_encoding_threads; + wxTextCtrl* _mail_server; + wxTextCtrl* _mail_user; + wxTextCtrl* _mail_password; + wxTextCtrl* _kdm_from; + wxCheckBox* _check_for_updates; + wxCheckBox* _check_for_test_updates; +}; + +class DefaultsPage : public wxPreferencesPage, public Page +{ +public: + DefaultsPage (wxSize panel_size, int border) + : Page (panel_size, border) + {} + + wxString GetName () const + { + return _("Defaults"); + } +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const { - add_label_to_sizer (table, _defaults_panel, _("Default duration of still images"), true); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _default_still_length = new wxSpinCtrl (_defaults_panel); - s->Add (_default_still_length); - add_label_to_sizer (s, _defaults_panel, _("s"), false); - table->Add (s, 1); + return wxBitmap ("defaults", wxBITMAP_TYPE_PNG_RESOURCE); } +#endif - add_label_to_sizer (table, _defaults_panel, _("Default directory for new films"), true); + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, _border); + + { + add_label_to_sizer (table, panel, _("Default duration of still images"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _still_length = new wxSpinCtrl (panel); + s->Add (_still_length); + add_label_to_sizer (s, panel, _("s"), false); + table->Add (s, 1); + } + + add_label_to_sizer (table, panel, _("Default directory for new films"), true); #ifdef DCPOMATIC_USE_OWN_DIR_PICKER - _default_directory = new DirPickerCtrl (_defaults_panel); + _directory = new DirPickerCtrl (panel); #else - _default_directory = new wxDirPickerCtrl (_defaults_panel, wxDD_DIR_MUST_EXIST); + _directory = new wxDirPickerCtrl (panel, wxDD_DIR_MUST_EXIST); #endif - table->Add (_default_directory, 1, wxEXPAND); - - add_label_to_sizer (table, _defaults_panel, _("Default DCI name details"), true); - _default_dci_metadata_button = new wxButton (_defaults_panel, wxID_ANY, _("Edit...")); - table->Add (_default_dci_metadata_button); + table->Add (_directory, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Default DCI name details"), true); + _dci_metadata_button = new wxButton (panel, wxID_ANY, _("Edit...")); + table->Add (_dci_metadata_button); + + add_label_to_sizer (table, panel, _("Default container"), true); + _container = new wxChoice (panel, wxID_ANY); + table->Add (_container); + + add_label_to_sizer (table, panel, _("Default content type"), true); + _dcp_content_type = new wxChoice (panel, wxID_ANY); + table->Add (_dcp_content_type); + + { + add_label_to_sizer (table, panel, _("Default JPEG2000 bandwidth"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _j2k_bandwidth = new wxSpinCtrl (panel); + s->Add (_j2k_bandwidth); + add_label_to_sizer (s, panel, _("Mbit/s"), false); + table->Add (s, 1); + } + + { + add_label_to_sizer (table, panel, _("Default audio delay"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _audio_delay = new wxSpinCtrl (panel); + s->Add (_audio_delay); + add_label_to_sizer (s, panel, _("ms"), false); + table->Add (s, 1); + } - add_label_to_sizer (table, _defaults_panel, _("Default container"), true); - _default_container = new wxChoice (_defaults_panel, wxID_ANY); - table->Add (_default_container); + add_label_to_sizer (table, panel, _("Default issuer"), true); + _issuer = new wxTextCtrl (panel, wxID_ANY); + table->Add (_issuer, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Default creator"), true); + _creator = new wxTextCtrl (panel, wxID_ANY); + table->Add (_creator, 1, wxEXPAND); + + Config* config = Config::instance (); + + _still_length->SetRange (1, 3600); + _still_length->SetValue (config->default_still_length ()); + _still_length->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DefaultsPage::still_length_changed, this)); + + _directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())).string ())); + _directory->Bind (wxEVT_COMMAND_DIRPICKER_CHANGED, boost::bind (&DefaultsPage::directory_changed, this)); + + _dci_metadata_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&DefaultsPage::edit_dci_metadata_clicked, this, parent)); + + vector<Ratio const *> ratio = Ratio::all (); + int n = 0; + for (vector<Ratio const *>::iterator i = ratio.begin(); i != ratio.end(); ++i) { + _container->Append (std_to_wx ((*i)->nickname ())); + if (*i == config->default_container ()) { + _container->SetSelection (n); + } + ++n; + } + + _container->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::container_changed, this)); + + vector<DCPContentType const *> const ct = DCPContentType::all (); + n = 0; + for (vector<DCPContentType const *>::const_iterator i = ct.begin(); i != ct.end(); ++i) { + _dcp_content_type->Append (std_to_wx ((*i)->pretty_name ())); + if (*i == config->default_dcp_content_type ()) { + _dcp_content_type->SetSelection (n); + } + ++n; + } + + _dcp_content_type->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::dcp_content_type_changed, this)); + + _j2k_bandwidth->SetRange (50, 250); + _j2k_bandwidth->SetValue (config->default_j2k_bandwidth() / 1000000); + _j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DefaultsPage::j2k_bandwidth_changed, this)); + + _audio_delay->SetRange (-1000, 1000); + _audio_delay->SetValue (config->default_audio_delay ()); + _audio_delay->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DefaultsPage::audio_delay_changed, this)); + + _issuer->SetValue (std_to_wx (config->dcp_metadata().issuer)); + _issuer->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DefaultsPage::issuer_changed, this)); + _creator->SetValue (std_to_wx (config->dcp_metadata().creator)); + _creator->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DefaultsPage::creator_changed, this)); + + return panel; + } - add_label_to_sizer (table, _defaults_panel, _("Default content type"), true); - _default_dcp_content_type = new wxChoice (_defaults_panel, wxID_ANY); - table->Add (_default_dcp_content_type); +private: + void j2k_bandwidth_changed () + { + Config::instance()->set_default_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1000000); + } + + void audio_delay_changed () + { + Config::instance()->set_default_audio_delay (_audio_delay->GetValue()); + } + void directory_changed () { - add_label_to_sizer (table, _defaults_panel, _("Default JPEG2000 bandwidth"), true); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _default_j2k_bandwidth = new wxSpinCtrl (_defaults_panel); - s->Add (_default_j2k_bandwidth); - add_label_to_sizer (s, _defaults_panel, _("Mbit/s"), false); - table->Add (s, 1); + Config::instance()->set_default_directory (wx_to_std (_directory->GetPath ())); } + void edit_dci_metadata_clicked (wxWindow* parent) { - add_label_to_sizer (table, _defaults_panel, _("Default audio delay"), true); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _default_audio_delay = new wxSpinCtrl (_defaults_panel); - s->Add (_default_audio_delay); - add_label_to_sizer (s, _defaults_panel, _("ms"), false); - table->Add (s, 1); + DCIMetadataDialog* d = new DCIMetadataDialog (parent, Config::instance()->default_dci_metadata ()); + d->ShowModal (); + Config::instance()->set_default_dci_metadata (d->dci_metadata ()); + d->Destroy (); } - Config* config = Config::instance (); + void still_length_changed () + { + Config::instance()->set_default_still_length (_still_length->GetValue ()); + } - _default_still_length->SetRange (1, 3600); - _default_still_length->SetValue (config->default_still_length ()); - _default_still_length->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&ConfigDialog::default_still_length_changed, this)); - - _default_directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())).string ())); - _default_directory->Bind (wxEVT_COMMAND_DIRPICKER_CHANGED, boost::bind (&ConfigDialog::default_directory_changed, this)); - - _default_dci_metadata_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ConfigDialog::edit_default_dci_metadata_clicked, 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; + void container_changed () + { + vector<Ratio const *> ratio = Ratio::all (); + Config::instance()->set_default_container (ratio[_container->GetSelection()]); } - - _default_container->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&ConfigDialog::default_container_changed, 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; + void dcp_content_type_changed () + { + vector<DCPContentType const *> ct = DCPContentType::all (); + Config::instance()->set_default_dcp_content_type (ct[_dcp_content_type->GetSelection()]); } - _default_dcp_content_type->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&ConfigDialog::default_dcp_content_type_changed, this)); - - _default_j2k_bandwidth->SetRange (50, 250); - _default_j2k_bandwidth->SetValue (config->default_j2k_bandwidth() / 1000000); - _default_j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&ConfigDialog::default_j2k_bandwidth_changed, this)); - - _default_audio_delay->SetRange (-1000, 1000); - _default_audio_delay->SetValue (config->default_audio_delay ()); - _default_audio_delay->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&ConfigDialog::default_audio_delay_changed, this)); -} - -void -ConfigDialog::make_tms_panel () -{ - _tms_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _tms_panel->SetSizer (s); - - 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"), true); - _tms_ip = new wxTextCtrl (_tms_panel, wxID_ANY); - table->Add (_tms_ip, 1, wxEXPAND); - - 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"), true); - _tms_user = new wxTextCtrl (_tms_panel, wxID_ANY); - table->Add (_tms_user, 1, wxEXPAND); - - add_label_to_sizer (table, _tms_panel, _("Password"), true); - _tms_password = new wxTextCtrl (_tms_panel, wxID_ANY); - table->Add (_tms_password, 1, wxEXPAND); - - Config* config = Config::instance (); + void issuer_changed () + { + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.issuer = wx_to_std (_issuer->GetValue ()); + Config::instance()->set_dcp_metadata (m); + } - _tms_ip->SetValue (std_to_wx (config->tms_ip ())); - _tms_ip->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::tms_ip_changed, this)); - _tms_path->SetValue (std_to_wx (config->tms_path ())); - _tms_path->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::tms_path_changed, this)); - _tms_user->SetValue (std_to_wx (config->tms_user ())); - _tms_user->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::tms_user_changed, this)); - _tms_password->SetValue (std_to_wx (config->tms_password ())); - _tms_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::tms_password_changed, this)); -} - -void -ConfigDialog::make_metadata_panel () -{ - _metadata_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _metadata_panel->SetSizer (s); - - 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, _metadata_panel, _("Issuer"), true); - _issuer = new wxTextCtrl (_metadata_panel, wxID_ANY); - table->Add (_issuer, 1, wxEXPAND); - - 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 (); - - _issuer->SetValue (std_to_wx (config->dcp_metadata().issuer)); - _issuer->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::issuer_changed, this)); - _creator->SetValue (std_to_wx (config->dcp_metadata().creator)); - _creator->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::creator_changed, this)); -} - -static string -server_column (string s) -{ - return s; -} - -void -ConfigDialog::make_servers_panel () -{ - _servers_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _servers_panel->SetSizer (s); - - _use_any_servers = new wxCheckBox (_servers_panel, wxID_ANY, _("Use all servers")); - s->Add (_use_any_servers, 0, wxALL, DCPOMATIC_SIZER_X_GAP); + void creator_changed () + { + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.creator = wx_to_std (_creator->GetValue ()); + Config::instance()->set_dcp_metadata (m); + } - vector<string> columns; - columns.push_back (wx_to_std (_("IP address / host name"))); - _servers_list = new EditableList<std::string, ServerDialog> ( - _servers_panel, - columns, - boost::bind (&Config::servers, Config::instance()), - boost::bind (&Config::set_servers, Config::instance(), _1), - boost::bind (&server_column, _1) - ); - - s->Add (_servers_list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_X_GAP); - - _use_any_servers->SetValue (Config::instance()->use_any_servers ()); - _use_any_servers->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::use_any_servers_changed, this)); -} - -void -ConfigDialog::use_any_servers_changed () -{ - Config::instance()->set_use_any_servers (_use_any_servers->GetValue ()); -} - -void -ConfigDialog::language_changed () -{ - switch (_language->GetSelection ()) { - case 0: - Config::instance()->set_language ("en"); - break; - case 1: - Config::instance()->set_language ("fr"); - break; - case 2: - Config::instance()->set_language ("it"); - break; - case 3: - Config::instance()->set_language ("es"); - break; - case 4: - Config::instance()->set_language ("sv"); - break; - case 5: - Config::instance()->set_language ("de"); - break; + wxSpinCtrl* _j2k_bandwidth; + wxSpinCtrl* _audio_delay; + wxButton* _dci_metadata_button; + wxSpinCtrl* _still_length; +#ifdef DCPOMATIC_USE_OWN_DIR_PICKER + DirPickerCtrl* _directory; +#else + wxDirPickerCtrl* _directory; +#endif + wxChoice* _container; + wxChoice* _dcp_content_type; + wxTextCtrl* _issuer; + wxTextCtrl* _creator; +}; + +class EncodingServersPage : public wxPreferencesPage, public Page +{ +public: + EncodingServersPage (wxSize panel_size, int border) + : Page (panel_size, border) + {} + + wxString GetName () const + { + return _("Servers"); } -} - -void -ConfigDialog::tms_ip_changed () -{ - Config::instance()->set_tms_ip (wx_to_std (_tms_ip->GetValue ())); -} - -void -ConfigDialog::tms_path_changed () -{ - Config::instance()->set_tms_path (wx_to_std (_tms_path->GetValue ())); -} - -void -ConfigDialog::tms_user_changed () -{ - Config::instance()->set_tms_user (wx_to_std (_tms_user->GetValue ())); -} -void -ConfigDialog::tms_password_changed () -{ - Config::instance()->set_tms_password (wx_to_std (_tms_password->GetValue ())); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("servers", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -void -ConfigDialog::num_local_encoding_threads_changed () -{ - Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ()); -} + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, _panel_size); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + _use_any_servers = new wxCheckBox (panel, wxID_ANY, _("Use all servers")); + s->Add (_use_any_servers, 0, wxALL, _border); + + vector<string> columns; + columns.push_back (wx_to_std (_("IP address / host name"))); + _servers_list = new EditableList<string, ServerDialog> ( + panel, + columns, + boost::bind (&Config::servers, Config::instance()), + boost::bind (&Config::set_servers, Config::instance(), _1), + boost::bind (&EncodingServersPage::server_column, this, _1) + ); + + s->Add (_servers_list, 1, wxEXPAND | wxALL, _border); + + _use_any_servers->SetValue (Config::instance()->use_any_servers ()); + _use_any_servers->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&EncodingServersPage::use_any_servers_changed, this)); + + return panel; + } -void -ConfigDialog::default_directory_changed () -{ - Config::instance()->set_default_directory (wx_to_std (_default_directory->GetPath ())); -} +private: -void -ConfigDialog::edit_default_dci_metadata_clicked () -{ - DCIMetadataDialog* d = new DCIMetadataDialog (this, Config::instance()->default_dci_metadata ()); - d->ShowModal (); - Config::instance()->set_default_dci_metadata (d->dci_metadata ()); - d->Destroy (); -} - -void -ConfigDialog::set_language_changed () -{ - setup_language_sensitivity (); - if (_set_language->GetValue ()) { - language_changed (); - } else { - Config::instance()->unset_language (); + void use_any_servers_changed () + { + Config::instance()->set_use_any_servers (_use_any_servers->GetValue ()); } -} - -void -ConfigDialog::setup_language_sensitivity () -{ - _language->Enable (_set_language->GetValue ()); -} -void -ConfigDialog::default_still_length_changed () -{ - Config::instance()->set_default_still_length (_default_still_length->GetValue ()); -} + string server_column (string s) + { + return s; + } -void -ConfigDialog::default_container_changed () -{ - vector<Ratio const *> ratio = Ratio::all (); - Config::instance()->set_default_container (ratio[_default_container->GetSelection()]); -} + wxCheckBox* _use_any_servers; + EditableList<string, ServerDialog>* _servers_list; +}; -void -ConfigDialog::default_dcp_content_type_changed () +class ColourConversionsPage : public wxPreferencesPage, public Page { - vector<DCPContentType const *> ct = DCPContentType::all (); - Config::instance()->set_default_dcp_content_type (ct[_default_dcp_content_type->GetSelection()]); -} +public: + ColourConversionsPage (wxSize panel_size, int border) + : Page (panel_size, border) + {} + + wxString GetName () const + { + return _("Colour Conversions"); + } -void -ConfigDialog::issuer_changed () -{ - dcp::XMLMetadata m = Config::instance()->dcp_metadata (); - m.issuer = wx_to_std (_issuer->GetValue ()); - Config::instance()->set_dcp_metadata (m); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("colour_conversions", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, _panel_size); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + vector<string> columns; + columns.push_back (wx_to_std (_("Name"))); + wxPanel* list = new EditableList<PresetColourConversion, PresetColourConversionDialog> ( + panel, + columns, + boost::bind (&Config::colour_conversions, Config::instance()), + boost::bind (&Config::set_colour_conversions, Config::instance(), _1), + boost::bind (&ColourConversionsPage::colour_conversion_column, this, _1), + 300 + ); + + s->Add (list, 1, wxEXPAND | wxALL, _border); + return panel; + } -void -ConfigDialog::creator_changed () -{ - dcp::XMLMetadata m = Config::instance()->dcp_metadata (); - m.creator = wx_to_std (_creator->GetValue ()); - Config::instance()->set_dcp_metadata (m); -} +private: + string colour_conversion_column (PresetColourConversion c) + { + return c.name; + } +}; -void -ConfigDialog::default_j2k_bandwidth_changed () +class TMSPage : public wxPreferencesPage, public Page { - Config::instance()->set_default_j2k_bandwidth (_default_j2k_bandwidth->GetValue() * 1000000); -} +public: + TMSPage (wxSize panel_size, int border) + : Page (panel_size, border) + {} -void -ConfigDialog::default_audio_delay_changed () -{ - Config::instance()->set_default_audio_delay (_default_audio_delay->GetValue()); -} + wxString GetName () const + { + return _("TMS"); + } -static std::string -colour_conversion_column (PresetColourConversion c) -{ - return c.name; -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("tms", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -void -ConfigDialog::make_colour_conversions_panel () -{ - vector<string> columns; - columns.push_back (wx_to_std (_("Name"))); - _colour_conversions_panel = new EditableList<PresetColourConversion, PresetColourConversionDialog> ( - _notebook, - columns, - boost::bind (&Config::colour_conversions, Config::instance()), - boost::bind (&Config::set_colour_conversions, Config::instance(), _1), - boost::bind (&colour_conversion_column, _1), - 300 - ); -} + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, _panel_size); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, _border); + + add_label_to_sizer (table, panel, _("IP address"), true); + _tms_ip = new wxTextCtrl (panel, wxID_ANY); + table->Add (_tms_ip, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Target path"), true); + _tms_path = new wxTextCtrl (panel, wxID_ANY); + table->Add (_tms_path, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("User name"), true); + _tms_user = new wxTextCtrl (panel, wxID_ANY); + table->Add (_tms_user, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Password"), true); + _tms_password = new wxTextCtrl (panel, wxID_ANY); + table->Add (_tms_password, 1, wxEXPAND); + + Config* config = Config::instance (); + + _tms_ip->SetValue (std_to_wx (config->tms_ip ())); + _tms_ip->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TMSPage::tms_ip_changed, this)); + _tms_path->SetValue (std_to_wx (config->tms_path ())); + _tms_path->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TMSPage::tms_path_changed, this)); + _tms_user->SetValue (std_to_wx (config->tms_user ())); + _tms_user->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TMSPage::tms_user_changed, this)); + _tms_password->SetValue (std_to_wx (config->tms_password ())); + _tms_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TMSPage::tms_password_changed, this)); + + return panel; + } -void -ConfigDialog::mail_server_changed () -{ - Config::instance()->set_mail_server (wx_to_std (_mail_server->GetValue ())); -} +private: + void tms_ip_changed () + { + Config::instance()->set_tms_ip (wx_to_std (_tms_ip->GetValue ())); + } + + void tms_path_changed () + { + Config::instance()->set_tms_path (wx_to_std (_tms_path->GetValue ())); + } + + void tms_user_changed () + { + Config::instance()->set_tms_user (wx_to_std (_tms_user->GetValue ())); + } + + void tms_password_changed () + { + Config::instance()->set_tms_password (wx_to_std (_tms_password->GetValue ())); + } -void -ConfigDialog::mail_user_changed () -{ - Config::instance()->set_mail_user (wx_to_std (_mail_user->GetValue ())); -} + wxTextCtrl* _tms_ip; + wxTextCtrl* _tms_path; + wxTextCtrl* _tms_user; + wxTextCtrl* _tms_password; +}; -void -ConfigDialog::mail_password_changed () +class KDMEmailPage : public wxPreferencesPage, public Page { - Config::instance()->set_mail_password (wx_to_std (_mail_password->GetValue ())); -} +public: -void -ConfigDialog::kdm_from_changed () -{ - Config::instance()->set_kdm_from (wx_to_std (_kdm_from->GetValue ())); -} + KDMEmailPage (wxSize panel_size, int border) + : Page (panel_size, border) + {} + + wxString GetName () const + { + return _("KDM Email"); + } -void -ConfigDialog::make_kdm_email_panel () -{ - _kdm_email_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _kdm_email_panel->SetSizer (s); +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("kdm_email", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif - _kdm_email = new wxTextCtrl (_kdm_email_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); - s->Add (_kdm_email, 1, wxEXPAND | wxALL, 12); + wxWindow* CreateWindow (wxWindow* parent) + { + /* We have to force both width and height of this one */ +#ifdef DCPOMATIC_OSX + wxPanel* panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, wxSize (480, 128)); +#else + wxPanel* panel = new wxPanel (parent); +#endif + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + _kdm_email = new wxTextCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (480, 128), wxTE_MULTILINE); + s->Add (_kdm_email, 1, wxEXPAND | wxALL, _border); + + _kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_email_changed, this)); + _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ())); + + return panel; + } - _kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::kdm_email_changed, this)); - _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ())); -} +private: + void kdm_email_changed () + { + Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ())); + } -void -ConfigDialog::kdm_email_changed () -{ - Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ())); -} + wxTextCtrl* _kdm_email; +}; -void -ConfigDialog::check_for_updates_changed () +wxPreferencesEditor* +create_config_dialog () { - Config::instance()->set_check_for_updates (_check_for_updates->GetValue ()); -} + wxPreferencesEditor* e = new wxPreferencesEditor (); -void -ConfigDialog::check_for_test_updates_changed () -{ - Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); +#ifdef DCPOMATIC_OSX + /* Width that we force some of the config panels to be on OSX so that + the containing window doesn't shrink too much when we select those panels. + This is obviously an unpleasant hack. + */ + wxSize ps = wxSize (480, -1); + int const border = 16; +#else + wxSize ps = wxDefaultSize; + int const border = 8; +#endif + + e->AddPage (new GeneralPage (ps, border)); + e->AddPage (new DefaultsPage (ps, border)); + e->AddPage (new EncodingServersPage (ps, border)); + e->AddPage (new ColourConversionsPage (ps, border)); + e->AddPage (new TMSPage (ps, border)); + e->AddPage (new KDMEmailPage (ps, border)); + return e; } diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index 8a17de58d..183a23440 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,103 +18,9 @@ */ /** @file src/config_dialog.h - * @brief A dialogue to edit DCP-o-matic configuration. + * @brief A dialog to edit DCP-o-matic configuration. */ -#include <wx/wx.h> -#include <wx/spinctrl.h> -#include <wx/listctrl.h> -#include <wx/filepicker.h> -#include "wx_util.h" -#include "editable_list.h" - -class DirPickerCtrl; -class wxNotebook; -class PresetColourConversion; -class PresetColourConversionDialog; -class ServerDialog; - -/** @class ConfigDialog - * @brief A dialogue to edit DCP-o-matic configuration. - */ -class ConfigDialog : public wxDialog -{ -public: - ConfigDialog (wxWindow *); - -private: - void set_language_changed (); - void language_changed (); - void tms_ip_changed (); - void tms_path_changed (); - void tms_user_changed (); - void tms_password_changed (); - void num_local_encoding_threads_changed (); - void default_still_length_changed (); - void default_directory_changed (); - void edit_default_dci_metadata_clicked (); - void default_container_changed (); - void default_dcp_content_type_changed (); - void issuer_changed (); - void creator_changed (); - void default_j2k_bandwidth_changed (); - void default_audio_delay_changed (); - void mail_server_changed (); - void mail_user_changed (); - void mail_password_changed (); - void kdm_from_changed (); - void kdm_email_changed (); - void use_any_servers_changed (); - - void setup_language_sensitivity (); - - void make_misc_panel (); - void make_defaults_panel (); - void make_servers_panel (); - void make_tms_panel (); - void make_metadata_panel (); - void make_colour_conversions_panel (); - void make_kdm_email_panel (); - - void check_for_updates_changed (); - void check_for_test_updates_changed (); - - wxNotebook* _notebook; - wxPanel* _misc_panel; - wxPanel* _defaults_panel; - wxPanel* _servers_panel; - wxPanel* _tms_panel; - EditableList<PresetColourConversion, PresetColourConversionDialog>* _colour_conversions_panel; - wxPanel* _metadata_panel; - wxCheckBox* _set_language; - wxChoice* _language; - wxChoice* _default_container; - wxChoice* _default_dcp_content_type; - wxTextCtrl* _tms_ip; - wxTextCtrl* _tms_path; - wxTextCtrl* _tms_user; - wxTextCtrl* _tms_password; - wxSpinCtrl* _num_local_encoding_threads; - wxTextCtrl* _mail_server; - wxTextCtrl* _mail_user; - wxTextCtrl* _mail_password; - wxTextCtrl* _kdm_from; - wxSpinCtrl* _default_still_length; -#ifdef DCPOMATIC_USE_OWN_DIR_PICKER - DirPickerCtrl* _default_directory; -#else - wxDirPickerCtrl* _default_directory; -#endif - wxButton* _default_dci_metadata_button; - wxTextCtrl* _issuer; - wxTextCtrl* _creator; - wxSpinCtrl* _default_j2k_bandwidth; - wxSpinCtrl* _default_audio_delay; - wxPanel* _kdm_email_panel; - wxTextCtrl* _kdm_email; - wxCheckBox* _use_any_servers; - wxCheckBox* _check_for_updates; - wxCheckBox* _check_for_test_updates; - EditableList<std::string, ServerDialog>* _servers_list; -}; +class wxPreferencesEditor; +wxPreferencesEditor* create_config_dialog (); diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h index 20d180f20..470be2d09 100644 --- a/src/wx/editable_list.h +++ b/src/wx/editable_list.h @@ -18,6 +18,7 @@ */ #include <wx/wx.h> +#include <wx/listctrl.h> template<class T, class S> class EditableList : public wxPanel diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index f426a7c6e..7e1b61811 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -429,7 +429,7 @@ FilmViewer::player_changed (bool frequent) if (frequent) { return; } - + calculate_sizes (); fetch_current_frame_again (); } diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc index 5410f6cec..1f4d62bde 100644 --- a/src/wx/kdm_dialog.cc +++ b/src/wx/kdm_dialog.cc @@ -83,15 +83,20 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film) wxFlexGridSizer* table = new wxFlexGridSizer (3, 2, 6); add_label_to_sizer (table, this, _("From"), true); - _from_date = new wxDatePickerCtrl (this, wxID_ANY); + wxDateTime from; + from.SetToCurrent (); + _from_date = new wxDatePickerCtrl (this, wxID_ANY, from); table->Add (_from_date, 1, wxEXPAND); - _from_time = new wxTimePickerCtrl (this, wxID_ANY); + _from_time = new wxTimePickerCtrl (this, wxID_ANY, from); table->Add (_from_time, 1, wxEXPAND); - + add_label_to_sizer (table, this, _("Until"), true); - _until_date = new wxDatePickerCtrl (this, wxID_ANY); + wxDateTime to = from; + /* 1 week from now */ + to.Add (wxDateSpan (0, 0, 1, 0)); + _until_date = new wxDatePickerCtrl (this, wxID_ANY, to); table->Add (_until_date, 1, wxEXPAND); - _until_time = new wxTimePickerCtrl (this, wxID_ANY); + _until_time = new wxTimePickerCtrl (this, wxID_ANY, to); table->Add (_until_time, 1, wxEXPAND); vertical->Add (table, 0, wxEXPAND | wxALL, 6); @@ -117,7 +122,7 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film) } } - table = new wxFlexGridSizer (3, 2, 6); + table = new wxFlexGridSizer (2, 2, 6); _write_to = new wxRadioButton (this, wxID_ANY, _("Write to")); table->Add (_write_to, 1, wxEXPAND); @@ -125,13 +130,12 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film) #ifdef DCPOMATIC_USE_OWN_DIR_PICKER _folder = new DirPickerCtrl (this); #else - _folder = new wxDirPickerCtrl (this, wxID_ANY); + _folder = new wxDirPickerCtrl (this, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); #endif _folder->SetPath (wxStandardPaths::Get().GetDocumentsDir()); table->Add (_folder, 1, wxEXPAND); - table->AddSpacer (0); _email = new wxRadioButton (this, wxID_ANY, _("Send by email")); table->Add (_email, 1, wxEXPAND); @@ -144,6 +148,8 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film) vertical->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } + _write_to->SetValue (true); + _targets->Bind (wxEVT_COMMAND_TREE_SEL_CHANGED, boost::bind (&KDMDialog::setup_sensitivity, this)); _add_cinema->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::add_cinema_clicked, this)); diff --git a/src/wx/new_film_dialog.cc b/src/wx/new_film_dialog.cc index e0ad2c457..f6d910282 100644 --- a/src/wx/new_film_dialog.cc +++ b/src/wx/new_film_dialog.cc @@ -50,7 +50,7 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent) #ifdef DCPOMATIC_USE_OWN_DIR_PICKER _folder = new DirPickerCtrl (this); #else - _folder = new wxDirPickerCtrl (this, wxID_ANY); + _folder = new wxDirPickerCtrl (this, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); #endif if (!_directory) { diff --git a/src/wx/video_panel.cc b/src/wx/video_panel.cc index eb45d4bc8..533545f64 100644 --- a/src/wx/video_panel.cc +++ b/src/wx/video_panel.cc @@ -240,12 +240,11 @@ VideoPanel::film_content_changed (int property) _colour_conversion->SetLabel (preset ? std_to_wx (cc[preset.get()].name) : _("Custom")); } else if (property == FFmpegContentProperty::FILTERS) { if (fcs) { - pair<string, string> p = Filter::ffmpeg_strings (fcs->filters ()); - if (p.first.empty () && p.second.empty ()) { + string const p = Filter::ffmpeg_string (fcs->filters ()); + if (p.empty ()) { _filters->SetLabel (_("None")); } else { - string const b = p.first + " " + p.second; - _filters->SetLabel (std_to_wx (b)); + _filters->SetLabel (std_to_wx (p)); } } } @@ -305,8 +304,8 @@ VideoPanel::setup_description () ++lines; } - dcp::Size const container_size = fit_ratio_within (_editor->film()->container()->ratio (), _editor->film()->full_frame ()); - dcp::Size const scaled = vcs->scale().size (vcs, container_size); + dcp::Size const container_size = _editor->film()->frame_size (); + dcp::Size const scaled = vcs->scale().size (vcs, container_size, container_size); if (scaled != vcs->video_size_after_crop ()) { d << wxString::Format ( |
