From: Carl Hetherington Date: Sun, 16 Mar 2014 22:28:43 +0000 (+0000) Subject: Basic work on new prefs dialog. X-Git-Tag: v2.0.48~551^2~324 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;ds=sidebyside;h=ada5eb78ffee670aea26dce21083b7ab0466036a;p=dcpomatic.git Basic work on new prefs dialog. --- diff --git a/src/lib/config.h b/src/lib/config.h index d77969b3e..b9e8d6b02 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -66,6 +66,7 @@ public: void set_use_any_servers (bool u) { _use_any_servers = u; + write (); } bool use_any_servers () const { @@ -75,6 +76,7 @@ public: /** @param s New list of servers */ void set_servers (std::vector s) { _servers = s; + write (); } /** @return Host names / IP addresses of J2K encoding servers that should definitely be used */ @@ -182,35 +184,42 @@ public: /** @param n New number of local encoding threads */ void set_num_local_encoding_threads (int n) { _num_local_encoding_threads = n; + write (); } void set_default_directory (boost::filesystem::path d) { _default_directory = d; + write (); } /** @param p New server port */ void set_server_port_base (int p) { _server_port_base = p; + write (); } /** @param i IP address of a TMS that we can copy DCPs to */ void set_tms_ip (std::string i) { _tms_ip = i; + write (); } /** @param p Path on a TMS that we should write DCPs to */ void set_tms_path (std::string p) { _tms_path = p; + write (); } /** @param u User name to log into the TMS with */ void set_tms_user (std::string u) { _tms_user = u; + write (); } /** @param p Password to log into the TMS with */ void set_tms_password (std::string p) { _tms_password = p; + write (); } void add_cinema (boost::shared_ptr c) { @@ -223,74 +232,92 @@ public: void set_allowed_dcp_frame_rates (std::list const & r) { _allowed_dcp_frame_rates = r; + write (); } void set_default_dci_metadata (DCIMetadata d) { _default_dci_metadata = d; + write (); } void set_language (std::string l) { _language = l; + write (); } void unset_language () { _language = boost::none; + write (); } void set_default_still_length (int s) { _default_still_length = s; + write (); } void set_default_container (Ratio const * c) { _default_container = c; + write (); } void set_default_dcp_content_type (DCPContentType const * t) { _default_dcp_content_type = t; + write (); } void set_dcp_metadata (libdcp::XMLMetadata m) { _dcp_metadata = m; + write (); } void set_default_j2k_bandwidth (int b) { _default_j2k_bandwidth = b; + write (); } void set_default_audio_delay (int d) { _default_audio_delay = d; + write (); } void set_colour_conversions (std::vector const & c) { _colour_conversions = c; + write (); } void set_mail_server (std::string s) { _mail_server = s; + write (); } void set_mail_user (std::string u) { _mail_user = u; + write (); } void set_mail_password (std::string p) { _mail_password = p; + write (); } void set_kdm_from (std::string f) { _kdm_from = f; + write (); } void set_kdm_email (std::string e) { _kdm_email = e; + write (); } void set_check_for_updates (bool c) { _check_for_updates = c; + write (); } void set_check_for_test_updates (bool c) { _check_for_test_updates = c; + write (); } void write () const; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index a36c4e240..2f64371ae 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2013 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington 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 @@ -29,6 +29,7 @@ #include #include #include +#include #include "wx/film_viewer.h" #include "wx/film_editor.h" #include "wx/job_manager_view.h" @@ -280,6 +281,7 @@ public: : wxFrame (NULL, -1, title) , _hints_dialog (0) , _servers_list_dialog (0) + , _config_dialog (0) { #if defined(DCPOMATIC_WINDOWS) && defined(DCPOMATIC_WINDOWS_CONSOLE) AllocConsole(); @@ -460,10 +462,10 @@ private: void edit_preferences () { - ConfigDialog* d = new ConfigDialog (this); - d->ShowModal (); - d->Destroy (); - Config::instance()->write (); + if (!_config_dialog) { + _config_dialog = create_config_dialog (); + } + _config_dialog->Show (this); } void jobs_make_dcp () @@ -602,6 +604,7 @@ private: HintsDialog* _hints_dialog; ServersListDialog* _servers_list_dialog; + wxPreferencesEditor* _config_dialog; }; static const wxCmdLineEntryDesc command_line_description[] = { diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index a3beb7628..a6910d64f 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington 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 #include #include -#include +#include +#include +#include #include #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,662 @@ 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 GeneralPage : public wxStockPreferencesPage { - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _notebook = new wxNotebook (this, wxID_ANY); - s->Add (_notebook, 1, wxEXPAND); - - 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); -} - -void -ConfigDialog::make_misc_panel () -{ - _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); - - _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); - - _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 (); +public: + GeneralPage () + : wxStockPreferencesPage (Kind_General) + {} - _set_language->SetValue (config->language ()); - - if (config->language().get_value_or ("") == "fr") { - _language->SetSelection (1); - } else if (config->language().get_value_or ("") == "it") { + 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, 8); + + _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 (&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 -ConfigDialog::make_defaults_panel () -{ - _defaults_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _defaults_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); + } 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; + } +private: + void setup_language_sensitivity () { - 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); + _language->Enable (_set_language->GetValue ()); } - add_label_to_sizer (table, _defaults_panel, _("Default directory for new films"), true); -#ifdef DCPOMATIC_USE_OWN_DIR_PICKER - _default_directory = new DirPickerCtrl (_defaults_panel); -#else - _default_directory = new wxDirPickerCtrl (_defaults_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); - - 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, _defaults_panel, _("Default content type"), true); - _default_dcp_content_type = new wxChoice (_defaults_panel, wxID_ANY); - table->Add (_default_dcp_content_type); - + void set_language_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); + setup_language_sensitivity (); + if (_set_language->GetValue ()) { + language_changed (); + } else { + Config::instance()->unset_language (); + } } + 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 () { - 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); + 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 ())); } - Config* config = Config::instance (); + void check_for_updates_changed () + { + Config::instance()->set_check_for_updates (_check_for_updates->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)); + void check_for_test_updates_changed () + { + Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); + } - _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)); + 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: + wxString GetName () const + { + return _("Defaults"); + } - _default_dci_metadata_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ConfigDialog::edit_default_dci_metadata_clicked, this)); +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif - vector ratio = Ratio::all (); - int n = 0; - for (vector::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); + 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, 8); + + { + add_label_to_sizer (table, panel, _("Default duration of still images"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _default_still_length = new wxSpinCtrl (panel); + s->Add (_default_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 (panel); +#else + _default_directory = new wxDirPickerCtrl (panel, wxDD_DIR_MUST_EXIST); +#endif + table->Add (_default_directory, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Default DCI name details"), true); + _default_dci_metadata_button = new wxButton (panel, wxID_ANY, _("Edit...")); + table->Add (_default_dci_metadata_button); + + add_label_to_sizer (table, panel, _("Default container"), true); + _default_container = new wxChoice (panel, wxID_ANY); + table->Add (_default_container); + + add_label_to_sizer (table, panel, _("Default content type"), true); + _default_dcp_content_type = new wxChoice (panel, wxID_ANY); + table->Add (_default_dcp_content_type); + + { + add_label_to_sizer (table, panel, _("Default JPEG2000 bandwidth"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _default_j2k_bandwidth = new wxSpinCtrl (panel); + s->Add (_default_j2k_bandwidth); + add_label_to_sizer (s, panel, _("Mbit/s"), false); + table->Add (s, 1); } - ++n; + + { + add_label_to_sizer (table, panel, _("Default audio delay"), true); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _default_audio_delay = new wxSpinCtrl (panel); + s->Add (_default_audio_delay); + add_label_to_sizer (s, panel, _("ms"), false); + table->Add (s, 1); + } + + Config* config = Config::instance (); + + _default_still_length->SetRange (1, 3600); + _default_still_length->SetValue (config->default_still_length ()); + _default_still_length->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DefaultsPage::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 (&DefaultsPage::default_directory_changed, this)); + + _default_dci_metadata_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&DefaultsPage::edit_default_dci_metadata_clicked, this, parent)); + + vector ratio = Ratio::all (); + int n = 0; + for (vector::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->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::default_container_changed, this)); + + vector const ct = DCPContentType::all (); + n = 0; + for (vector::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->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::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 (&DefaultsPage::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 (&DefaultsPage::default_audio_delay_changed, this)); + + return panel; } - _default_container->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&ConfigDialog::default_container_changed, this)); +private: + void default_j2k_bandwidth_changed () + { + Config::instance()->set_default_j2k_bandwidth (_default_j2k_bandwidth->GetValue() * 1000000); + } - vector const ct = DCPContentType::all (); - n = 0; - for (vector::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 default_audio_delay_changed () + { + Config::instance()->set_default_audio_delay (_default_audio_delay->GetValue()); } - _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); + void default_directory_changed () + { + Config::instance()->set_default_directory (wx_to_std (_default_directory->GetPath ())); + } - add_label_to_sizer (table, _tms_panel, _("Password"), true); - _tms_password = new wxTextCtrl (_tms_panel, wxID_ANY); - table->Add (_tms_password, 1, wxEXPAND); + void edit_default_dci_metadata_clicked (wxWindow* parent) + { + 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 default_still_length_changed () + { + Config::instance()->set_default_still_length (_default_still_length->GetValue ()); + } - _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 default_container_changed () + { + vector ratio = Ratio::all (); + Config::instance()->set_default_container (ratio[_default_container->GetSelection()]); + } - vector columns; - columns.push_back (wx_to_std (_("IP address / host name"))); - _servers_list = new EditableList ( - _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; + void default_dcp_content_type_changed () + { + vector ct = DCPContentType::all (); + Config::instance()->set_default_dcp_content_type (ct[_default_dcp_content_type->GetSelection()]); } -} - -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 ())); -} + + wxSpinCtrl* _default_j2k_bandwidth; + wxSpinCtrl* _default_audio_delay; + wxButton* _default_dci_metadata_button; + wxSpinCtrl* _default_still_length; +#ifdef DCPOMATIC_USE_OWN_DIR_PICKER + DirPickerCtrl* _default_directory; +#else + wxDirPickerCtrl* _default_directory; +#endif + wxChoice* _default_container; + wxChoice* _default_dcp_content_type; +}; -void -ConfigDialog::tms_password_changed () +class EncodingServersPage : public wxPreferencesPage { - Config::instance()->set_tms_password (wx_to_std (_tms_password->GetValue ())); -} +public: + wxString GetName () const + { + return _("Encoding Servers"); + } -void -ConfigDialog::num_local_encoding_threads_changed () -{ - Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ()); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -void -ConfigDialog::default_directory_changed () -{ - Config::instance()->set_default_directory (wx_to_std (_default_directory->GetPath ())); -} + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent); + 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, DCPOMATIC_SIZER_X_GAP); + + vector columns; + columns.push_back (wx_to_std (_("IP address / host name"))); + _servers_list = new EditableList ( + 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, DCPOMATIC_SIZER_X_GAP); + + _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::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 (); -} +private: -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 = Ratio::all (); - Config::instance()->set_default_container (ratio[_default_container->GetSelection()]); -} + wxCheckBox* _use_any_servers; + EditableList* _servers_list; +}; -void -ConfigDialog::default_dcp_content_type_changed () +class ColourConversionsPage : public wxPreferencesPage { - vector ct = DCPContentType::all (); - Config::instance()->set_default_dcp_content_type (ct[_default_dcp_content_type->GetSelection()]); -} + wxString GetName () const + { + return _("Colour Conversions"); + } -void -ConfigDialog::issuer_changed () -{ - libdcp::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 ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif + wxWindow* CreateWindow (wxWindow* parent) + { + vector columns; + columns.push_back (wx_to_std (_("Name"))); + return new EditableList ( + parent, + 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 + ); + } -void -ConfigDialog::creator_changed () -{ - libdcp::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 MetadataPage : public wxPreferencesPage { - Config::instance()->set_default_j2k_bandwidth (_default_j2k_bandwidth->GetValue() * 1000000); -} + wxString GetName () const + { + return _("Metadata"); + } -void -ConfigDialog::default_audio_delay_changed () -{ - Config::instance()->set_default_audio_delay (_default_audio_delay->GetValue()); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -static std::string -colour_conversion_column (PresetColourConversion c) -{ - return c.name; -} + 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, 8); + + add_label_to_sizer (table, panel, _("Issuer"), true); + _issuer = new wxTextCtrl (panel, wxID_ANY); + table->Add (_issuer, 1, wxEXPAND); + + add_label_to_sizer (table, panel, _("Creator"), true); + _creator = new wxTextCtrl (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 (&MetadataPage::issuer_changed, this)); + _creator->SetValue (std_to_wx (config->dcp_metadata().creator)); + _creator->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&MetadataPage::creator_changed, this)); + + return panel; + } + +private: + wxTextCtrl* _issuer; + wxTextCtrl* _creator; + + void issuer_changed () + { + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.issuer = wx_to_std (_issuer->GetValue ()); + Config::instance()->set_dcp_metadata (m); + } + + void creator_changed () + { + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.creator = wx_to_std (_creator->GetValue ()); + Config::instance()->set_dcp_metadata (m); + } +}; -void -ConfigDialog::make_colour_conversions_panel () +class TMSPage : public wxPreferencesPage { - vector columns; - columns.push_back (wx_to_std (_("Name"))); - _colour_conversions_panel = new EditableList ( - _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 - ); -} + wxString GetName () const + { + return _("TMS"); + } -void -ConfigDialog::mail_server_changed () -{ - Config::instance()->set_mail_server (wx_to_std (_mail_server->GetValue ())); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -void -ConfigDialog::mail_user_changed () -{ - Config::instance()->set_mail_user (wx_to_std (_mail_user->GetValue ())); -} + 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, 8); + + 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_password_changed () -{ - Config::instance()->set_mail_password (wx_to_std (_mail_password->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::kdm_from_changed () -{ - Config::instance()->set_kdm_from (wx_to_std (_kdm_from->GetValue ())); -} + wxTextCtrl* _tms_ip; + wxTextCtrl* _tms_path; + wxTextCtrl* _tms_user; + wxTextCtrl* _tms_password; +}; -void -ConfigDialog::make_kdm_email_panel () +class KDMEmailPage : public wxPreferencesPage { - _kdm_email_panel = new wxPanel (_notebook); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _kdm_email_panel->SetSizer (s); - - _kdm_email = new wxTextCtrl (_kdm_email_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); - s->Add (_kdm_email, 1, wxEXPAND | wxALL, 12); +public: + wxString GetName () const + { + return _("KDM Email"); + } - _kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::kdm_email_changed, this)); - _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ())); -} +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("blank", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif -void -ConfigDialog::kdm_email_changed () -{ - Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ())); -} + wxWindow* CreateWindow (wxWindow* parent) + { + wxPanel* panel = new wxPanel (parent); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + panel->SetSizer (s); + + _kdm_email = new wxTextCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); + s->Add (_kdm_email, 1, wxEXPAND | wxALL, 12); + + _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; + } -void -ConfigDialog::check_for_updates_changed () -{ - Config::instance()->set_check_for_updates (_check_for_updates->GetValue ()); -} +private: + void kdm_email_changed () + { + Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ())); + } -void -ConfigDialog::check_for_test_updates_changed () -{ - Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); + wxTextCtrl* _kdm_email; +}; + +wxPreferencesEditor* +create_config_dialog () +{ + wxPreferencesEditor* e = new wxPreferencesEditor (); + e->AddPage (new GeneralPage); + e->AddPage (new DefaultsPage); + e->AddPage (new EncodingServersPage); + e->AddPage (new ColourConversionsPage); + e->AddPage (new MetadataPage); + e->AddPage (new TMSPage); + e->AddPage (new KDMEmailPage); + 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 + Copyright (C) 2012-2014 Carl Hetherington 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 -#include -#include -#include -#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* _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* _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 +#include template class EditableList : public wxPanel