X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fconfig_dialog.cc;h=bf7e295ee3c809ba14060c223d5a18d51654cbf2;hb=b7e65adf286ce20918797a06a910ededf8f07b7b;hp=ae045d6365291c5ad52407f8bd0d842097fb5138;hpb=8a8c977c12fc65f1f50ea05099387e0fc8840e7d;p=dcpomatic.git diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index ae045d636..bf7e295ee 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -25,6 +25,7 @@ #include "dcpomatic_button.h" #include "nag_dialog.h" #include "static_text.h" +#include "lib/constants.h" #include #include @@ -134,9 +135,11 @@ GeneralPage::add_language_controls (wxGridBagSizer* table, int& r) languages.push_back (make_pair("Português europeu", "pt_PT")); languages.push_back (make_pair("Português do Brasil", "pt_BR")); languages.push_back (make_pair("Svenska", "sv_SE")); + languages.push_back (make_pair("Slovenščina", "sl_SI")); languages.push_back (make_pair("Slovenský jazyk", "sk_SK")); // languages.push_back (make_pair("Türkçe", "tr_TR")); languages.push_back (make_pair("українська мова", "uk_UA")); + languages.push_back (make_pair("Magyar nyelv", "hu_HU")); checked_set (_language, languages); table->Add (_language, wxGBPosition (r, 1)); ++r; @@ -150,7 +153,7 @@ GeneralPage::add_language_controls (wxGridBagSizer* table, int& r) restart->SetFont (font); ++r; - _set_language->Bind (wxEVT_CHECKBOX, bind (&GeneralPage::set_language_changed, this)); + _set_language->bind(&GeneralPage::set_language_changed, this); _language->Bind (wxEVT_CHOICE, bind (&GeneralPage::language_changed, this)); } @@ -165,8 +168,8 @@ GeneralPage::add_update_controls (wxGridBagSizer* table, int& r) table->Add (_check_for_test_updates, wxGBPosition (r, 0), wxGBSpan (1, 2)); ++r; - _check_for_updates->Bind (wxEVT_CHECKBOX, bind (&GeneralPage::check_for_updates_changed, this)); - _check_for_test_updates->Bind (wxEVT_CHECKBOX, bind (&GeneralPage::check_for_test_updates_changed, this)); + _check_for_updates->bind(&GeneralPage::check_for_updates_changed, this); + _check_for_test_updates->bind(&GeneralPage::check_for_test_updates_changed, this); } void @@ -365,6 +368,7 @@ void CertificateChainEditor::add_certificate () { auto d = new wxFileDialog (this, _("Select Certificate File")); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { try { @@ -374,7 +378,6 @@ CertificateChainEditor::add_certificate () extra = c.read_string (dcp::file_to_string (wx_to_std (d->GetPath ()))); } catch (boost::filesystem::filesystem_error& e) { error_dialog (this, _("Could not import certificate (%s)"), d->GetPath()); - d->Destroy (); return; } @@ -403,8 +406,6 @@ CertificateChainEditor::add_certificate () } } - d->Destroy (); - update_sensitivity (); } @@ -453,26 +454,28 @@ CertificateChainEditor::export_certificate () this, _("Select Certificate File"), wxEmptyString, default_name, wxT ("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; auto j = all.begin (); for (int k = 0; k < i; ++k) { ++j; } - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - string const s = j->certificate (true); - f.checked_write(s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; } - d->Destroy (); + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); + } + + string const s = j->certificate(true); + f.checked_write(s.c_str(), s.length()); } void @@ -482,22 +485,23 @@ CertificateChainEditor::export_chain () this, _("Select Chain File"), wxEmptyString, wxT("certificate_chain.pem"), wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const s = _get()->chain(); - f.checked_write (s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; + } + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const s = _get()->chain(); + f.checked_write(s.c_str(), s.length()); } void @@ -543,14 +547,13 @@ CertificateChainEditor::remake_certificates () } auto d = new MakeChainDialog (this, _get()); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { _set (d->get()); update_certificate_list (); update_private_key (); } - - d->Destroy (); } void @@ -572,6 +575,7 @@ void CertificateChainEditor::import_private_key () { auto d = new wxFileDialog (this, _("Select Key File")); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { try { @@ -593,8 +597,6 @@ CertificateChainEditor::import_private_key () } } - d->Destroy (); - update_sensitivity (); } @@ -610,6 +612,7 @@ CertificateChainEditor::export_private_key () this, _("Select Key File"), wxEmptyString, wxT("private_key.pem"), wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { boost::filesystem::path path (wx_to_std(d->GetPath())); @@ -624,7 +627,6 @@ CertificateChainEditor::export_private_key () auto const s = _get()->key().get (); f.checked_write(s.c_str(), s.length()); } - d->Destroy (); } wxString @@ -729,22 +731,23 @@ KeysPage::export_decryption_chain_and_key () _panel, _("Select Export File"), wxEmptyString, wxEmptyString, wxT ("DOM files (*.dom)|*.dom"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const chain = Config::instance()->decryption_chain()->chain(); - f.checked_write (chain.c_str(), chain.length()); - auto const key = Config::instance()->decryption_chain()->key(); - DCPOMATIC_ASSERT (key); - f.checked_write(key->c_str(), key->length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const chain = Config::instance()->decryption_chain()->chain(); + f.checked_write(chain.c_str(), chain.length()); + auto const key = Config::instance()->decryption_chain()->key(); + DCPOMATIC_ASSERT(key); + f.checked_write(key->c_str(), key->length()); } void @@ -762,38 +765,40 @@ KeysPage::import_decryption_chain_and_key () auto d = new wxFileDialog ( _panel, _("Select File To Import"), wxEmptyString, wxEmptyString, wxT ("DOM files (*.dom)|*.dom") ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - auto new_chain = make_shared(); + if (d->ShowModal() != wxID_OK) { + return; + } - dcp::File f(wx_to_std(d->GetPath()), "r"); - if (!f) { - throw OpenFileError (f.path(), errno, OpenFileError::WRITE); - } + auto new_chain = make_shared(); - string current; - while (!f.eof()) { - char buffer[128]; - if (f.gets(buffer, 128) == 0) { - break; - } - current += buffer; - if (strncmp (buffer, "-----END CERTIFICATE-----", 25) == 0) { - new_chain->add (dcp::Certificate (current)); - current = ""; - } else if (strncmp (buffer, "-----END RSA PRIVATE KEY-----", 29) == 0) { - new_chain->set_key (current); - current = ""; - } - } + dcp::File f(wx_to_std(d->GetPath()), "r"); + if (!f) { + throw OpenFileError(f.path(), errno, OpenFileError::WRITE); + } - if (new_chain->chain_valid() && new_chain->private_key_valid()) { - Config::instance()->set_decryption_chain (new_chain); - } else { - error_dialog (_panel, _("Invalid DCP-o-matic export file")); + string current; + while (!f.eof()) { + char buffer[128]; + if (f.gets(buffer, 128) == 0) { + break; + } + current += buffer; + if (strncmp (buffer, "-----END CERTIFICATE-----", 25) == 0) { + new_chain->add(dcp::Certificate(current)); + current = ""; + } else if (strncmp (buffer, "-----END RSA PRIVATE KEY-----", 29) == 0) { + new_chain->set_key(current); + current = ""; } } - d->Destroy (); + + if (new_chain->chain_valid() && new_chain->private_key_valid()) { + Config::instance()->set_decryption_chain(new_chain); + } else { + error_dialog(_panel, _("Invalid DCP-o-matic export file")); + } } bool @@ -824,22 +829,23 @@ KeysPage::export_decryption_certificate () _panel, _("Select Certificate File"), wxEmptyString, default_name, wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const s = Config::instance()->decryption_chain()->leaf().certificate (true); - f.checked_write(s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; + } + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const s = Config::instance()->decryption_chain()->leaf().certificate (true); + f.checked_write(s.c_str(), s.length()); } wxString @@ -893,7 +899,7 @@ SoundPage::setup () } } - _sound->Bind (wxEVT_CHECKBOX, bind(&SoundPage::sound_changed, this)); + _sound->bind(&SoundPage::sound_changed, this); _sound_output->Bind (wxEVT_CHOICE, bind(&SoundPage::sound_output_changed, this)); _map->Changed.connect (bind(&SoundPage::map_changed, this, _1)); _reset_to_default->Bind (wxEVT_BUTTON, bind(&SoundPage::reset_to_default, this)); @@ -1052,7 +1058,7 @@ LocationsPage::GetName () const wxBitmap LocationsPage::GetLargeIcon () const { - return wxBitmap(bitmap_path("locations"), wxBITMAP_TYPE_PNG); + return wxBitmap(icon_path("locations"), wxBITMAP_TYPE_PNG); } #endif