X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fconfig_dialog.h;h=5203af609f8e13673968d50dca03610cdf8496ee;hb=08f96200aacf9f91ef3e3f5b80224a5b2437f279;hp=a72879407af03b9661ad0240fcd762fad14ef537;hpb=c79c14e1ed3498094d0f82ea854ea43bea3728e1;p=dcpomatic.git diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index a72879407..5203af609 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2017 Carl Hetherington + Copyright (C) 2012-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -23,6 +23,7 @@ #include "wx_util.h" #include "editable_list.h" +#include "make_chain_dialog.h" #include "lib/config.h" #include "lib/ratio.h" #include "lib/filter.h" @@ -43,35 +44,16 @@ #include #include +class AudioMappingView; + class Page { public: - Page (wxSize panel_size, int border) - : _border (border) - , _panel (0) - , _panel_size (panel_size) - , _window_exists (false) - { - _config_connection = Config::instance()->Changed.connect (boost::bind (&Page::config_changed_wrapper, this)); - } - + Page (wxSize panel_size, int border); virtual ~Page () {} protected: - wxWindow* create_window (wxWindow* parent) - { - _panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, _panel_size); - wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); - _panel->SetSizer (s); - - setup (); - _window_exists = true; - config_changed (); - - _panel->Bind (wxEVT_DESTROY, boost::bind (&Page::window_destroyed, this)); - - return _panel; - } + wxWindow* create_window (wxWindow* parent); int _border; wxPanel* _panel; @@ -80,17 +62,8 @@ private: virtual void config_changed () = 0; virtual void setup () = 0; - void config_changed_wrapper () - { - if (_window_exists) { - config_changed (); - } - } - - void window_destroyed () - { - _window_exists = false; - } + void config_changed_wrapper (); + void window_destroyed (); wxSize _panel_size; boost::signals2::scoped_connection _config_connection; @@ -100,247 +73,174 @@ private: class StockPage : public wxStockPreferencesPage, public Page { public: - StockPage (Kind kind, wxSize panel_size, int border) - : wxStockPreferencesPage (kind) - , Page (panel_size, border) - {} - - wxWindow* CreateWindow (wxWindow* parent) - { - return create_window (parent); - } + StockPage (Kind kind, wxSize panel_size, int border); + wxWindow* CreateWindow (wxWindow* parent); }; class StandardPage : public wxPreferencesPage, public Page { public: - StandardPage (wxSize panel_size, int border) - : Page (panel_size, border) - {} - - wxWindow* CreateWindow (wxWindow* parent) - { - return create_window (parent); - } + StandardPage (wxSize panel_size, int border); + wxWindow* CreateWindow (wxWindow* parent); }; class GeneralPage : public StockPage { public: - GeneralPage (wxSize panel_size, int border) - : StockPage (Kind_General, panel_size, border) - {} + GeneralPage (wxSize panel_size, int border); protected: - void add_language_controls (wxGridBagSizer* table, int& r) - { - _set_language = new wxCheckBox (_panel, wxID_ANY, _("Set language")); - table->Add (_set_language, wxGBPosition (r, 0)); - _language = new wxChoice (_panel, wxID_ANY); - std::vector > languages; - languages.push_back (std::make_pair ("Čeština", "cs_CZ")); - languages.push_back (std::make_pair ("汉语/漢語", "zh_CN")); - languages.push_back (std::make_pair ("Dansk", "da_DK")); - languages.push_back (std::make_pair ("Deutsch", "de_DE")); - languages.push_back (std::make_pair ("English", "en_GB")); - languages.push_back (std::make_pair ("Español", "es_ES")); - languages.push_back (std::make_pair ("Français", "fr_FR")); - languages.push_back (std::make_pair ("Italiano", "it_IT")); - languages.push_back (std::make_pair ("Nederlands", "nl_NL")); - languages.push_back (std::make_pair ("Русский", "ru_RU")); - languages.push_back (std::make_pair ("Polski", "pl_PL")); - languages.push_back (std::make_pair ("Português europeu", "pt_PT")); - languages.push_back (std::make_pair ("Português do Brasil", "pt_BR")); - languages.push_back (std::make_pair ("Svenska", "sv_SE")); - languages.push_back (std::make_pair ("Slovenský jazyk", "sk_SK")); - languages.push_back (std::make_pair ("українська мова", "uk_UA")); - checked_set (_language, languages); - table->Add (_language, wxGBPosition (r, 1)); - ++r; - - wxStaticText* restart = add_label_to_sizer ( - table, _panel, _("(restart DCP-o-matic to see language changes)"), false, wxGBPosition (r, 0), wxGBSpan (1, 2) - ); - wxFont font = restart->GetFont(); - font.SetStyle (wxFONTSTYLE_ITALIC); - font.SetPointSize (font.GetPointSize() - 1); - restart->SetFont (font); - ++r; - - _set_language->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::set_language_changed, this)); - _language->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::language_changed, this)); - } + void add_language_controls (wxGridBagSizer* table, int& r); + void add_update_controls (wxGridBagSizer* table, int& r); + virtual void config_changed (); - void add_play_sound_controls (wxGridBagSizer* table, int& r) - { - _sound = new wxCheckBox (_panel, wxID_ANY, _("Play sound via")); - table->Add (_sound, wxGBPosition (r, 0)); - _sound_output = new wxChoice (_panel, wxID_ANY); - table->Add (_sound_output, wxGBPosition (r, 1)); - ++r; - - RtAudio audio (DCPOMATIC_RTAUDIO_API); - for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) { - RtAudio::DeviceInfo dev = audio.getDeviceInfo (i); - if (dev.probed && dev.outputChannels > 0) { - _sound_output->Append (std_to_wx (dev.name)); - } - } - - _sound->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::sound_changed, this)); - _sound_output->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::sound_output_changed, this)); - } +private: + void setup_sensitivity (); + void set_language_changed (); + void language_changed (); + void check_for_updates_changed (); + void check_for_test_updates_changed (); - void add_update_controls (wxGridBagSizer* table, int& r) - { - _check_for_updates = new wxCheckBox (_panel, wxID_ANY, _("Check for updates on startup")); - table->Add (_check_for_updates, wxGBPosition (r, 0), wxGBSpan (1, 2)); - ++r; + wxCheckBox* _set_language; + wxChoice* _language; + wxCheckBox* _check_for_updates; + wxCheckBox* _check_for_test_updates; +}; - _check_for_test_updates = new wxCheckBox (_panel, wxID_ANY, _("Check for testing updates on startup")); - table->Add (_check_for_test_updates, wxGBPosition (r, 0), wxGBSpan (1, 2)); - ++r; +class CertificateChainEditor : public wxDialog +{ +public: + CertificateChainEditor ( + wxWindow* parent, + wxString title, + int border, + boost::function)> set, + boost::function (void)> get, + boost::function nag_alter + ); - _check_for_updates->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::check_for_updates_changed, this)); - _check_for_test_updates->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::check_for_test_updates_changed, this)); - } + void add_button (wxWindow* button); - virtual void config_changed () +private: + void add_certificate (); + void remove_certificate (); + void export_certificate (); + void update_certificate_list (); + void remake_certificates (); + void update_sensitivity (); + void update_private_key (); + void import_private_key (); + void export_private_key (); + void export_chain (); + + wxListCtrl* _certificates; + wxButton* _add_certificate; + wxButton* _export_certificate; + wxButton* _remove_certificate; + wxButton* _remake_certificates; + wxStaticText* _private_key; + wxButton* _import_private_key; + wxButton* _export_private_key; + wxButton* _export_chain; + wxStaticText* _private_key_bad; + wxSizer* _sizer; + wxBoxSizer* _button_sizer; + boost::function)> _set; + boost::function (void)> _get; + boost::function _nag_alter; +}; + +class KeysPage : public StandardPage +{ +public: + KeysPage (wxSize panel_size, int border) + : StandardPage (panel_size, border) + {} + + wxString GetName () const; + +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const { - Config* config = Config::instance (); - - checked_set (_set_language, static_cast(config->language())); - - /* Backwards compatibility of config file */ - - std::map compat_map; - compat_map["fr"] = "fr_FR"; - compat_map["it"] = "it_IT"; - compat_map["es"] = "es_ES"; - compat_map["sv"] = "sv_SE"; - compat_map["de"] = "de_DE"; - compat_map["nl"] = "nl_NL"; - compat_map["ru"] = "ru_RU"; - compat_map["pl"] = "pl_PL"; - compat_map["da"] = "da_DK"; - compat_map["pt"] = "pt_PT"; - compat_map["sk"] = "sk_SK"; - compat_map["cs"] = "cs_CZ"; - compat_map["uk"] = "uk_UA"; - - std::string lang = config->language().get_value_or ("en_GB"); - if (compat_map.find (lang) != compat_map.end ()) { - lang = compat_map[lang]; - } - - checked_set (_language, lang); - - checked_set (_check_for_updates, config->check_for_updates ()); - checked_set (_check_for_test_updates, config->check_for_test_updates ()); - - checked_set (_sound, config->sound ()); - - boost::optional const current_so = get_sound_output (); - boost::optional configured_so; - - if (config->sound_output()) { - configured_so = config->sound_output().get(); - } else { - /* No configured output means we should use the default */ - RtAudio audio (DCPOMATIC_RTAUDIO_API); - try { - configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name; - } catch (RtAudioError& e) { - /* Probably no audio devices at all */ - } - } - - if (configured_so && current_so != configured_so) { - /* Update _sound_output with the configured value */ - unsigned int i = 0; - while (i < _sound_output->GetCount()) { - if (_sound_output->GetString(i) == std_to_wx(*configured_so)) { - _sound_output->SetSelection (i); - break; - } - ++i; - } - } - - setup_sensitivity (); + return wxBitmap ("keys", wxBITMAP_TYPE_PNG_RESOURCE); } +#endif private: - void setup_sensitivity () - { - _language->Enable (_set_language->GetValue ()); - _check_for_test_updates->Enable (_check_for_updates->GetValue ()); - _sound_output->Enable (_sound->GetValue ()); - } - /** @return Currently-selected preview sound output in the dialogue */ - boost::optional get_sound_output () - { - int const sel = _sound_output->GetSelection (); - if (sel == wxNOT_FOUND) { - return boost::optional (); - } + void setup (); - return wx_to_std (_sound_output->GetString (sel)); - } + void export_decryption_certificate (); + void config_changed () {} + bool nag_alter_decryption_chain (); + void decryption_advanced (); + void signing_advanced (); + void export_decryption_chain_and_key (); + void import_decryption_chain_and_key (); +}; - void set_language_changed () - { - setup_sensitivity (); - if (_set_language->GetValue ()) { - language_changed (); - } else { - Config::instance()->unset_language (); - } - } - void language_changed () - { - int const sel = _language->GetSelection (); - if (sel != -1) { - Config::instance()->set_language (string_client_data (_language->GetClientObject (sel))); - } else { - Config::instance()->unset_language (); - } - } +class SoundPage : public StandardPage +{ +public: + SoundPage (wxSize panel_size, int border) + : StandardPage (panel_size, border) + {} - void check_for_updates_changed () - { - Config::instance()->set_check_for_updates (_check_for_updates->GetValue ()); - } + wxString GetName() const; - void check_for_test_updates_changed () +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const { - Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); + return wxBitmap ("sound", wxBITMAP_TYPE_PNG_RESOURCE); } +#endif - void sound_changed () - { - Config::instance()->set_sound (_sound->GetValue ()); - } +private: - void sound_output_changed () - { - RtAudio audio (DCPOMATIC_RTAUDIO_API); - boost::optional const so = get_sound_output(); - if (!so || *so == audio.getDeviceInfo(audio.getDefaultOutputDevice()).name) { - Config::instance()->unset_sound_output (); - } else { - Config::instance()->set_sound_output (*so); - } - } + void setup (); + void config_changed (); + boost::optional get_sound_output (); + void sound_changed (); + void sound_output_changed (); + void setup_sensitivity (); + void map_changed (AudioMapping m); + void reset_to_default (); - wxCheckBox* _set_language; - wxChoice* _language; wxCheckBox* _sound; wxChoice* _sound_output; - wxCheckBox* _check_for_updates; - wxCheckBox* _check_for_test_updates; + wxStaticText* _sound_output_details; + AudioMappingView* _map; + Button* _reset_to_default; }; +class LocationsPage : public StandardPage +{ +public: + LocationsPage (wxSize panel_size, int border); + + wxString GetName () const; + +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const; +#endif + +private: + void setup (); + void config_changed (); + void content_directory_changed (); + void playlist_directory_changed (); + void kdm_directory_changed (); + +#ifdef DCPOMATIC_VARIANT_SWAROOP + void background_image_changed (); +#endif + + wxDirPickerCtrl* _content_directory; + wxDirPickerCtrl* _playlist_directory; + wxDirPickerCtrl* _kdm_directory; +#ifdef DCPOMATIC_VARIANT_SWAROOP + FilePickerCtrl* _background_image; +#endif +}; #endif