X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fscreen_dialog.cc;h=89249645a5153009c2b0e26530561a4ce7e837d8;hb=76f601f5edbdfceec91ff6f6ce4b310e0d3a6ce9;hp=32f36ab8ba78c04f2148de1e6c9873a811acf73f;hpb=3031638f0ddf23654b72af2088a7616791307310;p=dcpomatic.git diff --git a/src/wx/screen_dialog.cc b/src/wx/screen_dialog.cc index 32f36ab8b..89249645a 100644 --- a/src/wx/screen_dialog.cc +++ b/src/wx/screen_dialog.cc @@ -17,21 +17,42 @@ */ +#include +#include +#include +#include "lib/compose.hpp" #include "screen_dialog.h" #include "wx_util.h" using std::string; +using std::cout; +using boost::shared_ptr; -ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name) +ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name, shared_ptr certificate) : wxDialog (parent, wxID_ANY, std_to_wx (title)) + , _certificate (certificate) { wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6); table->AddGrowableCol (1, 1); - add_label_to_sizer (table, this, "Name"); - _name = new wxTextCtrl (this, wxID_ANY, std_to_wx (name), wxDefaultPosition, wxSize (256, -1)); + add_label_to_sizer (table, this, "Name", true); + _name = new wxTextCtrl (this, wxID_ANY, std_to_wx (name), wxDefaultPosition, wxSize (320, -1)); table->Add (_name, 1, wxEXPAND); + add_label_to_sizer (table, this, "Certificate", true); + _certificate_load = new wxButton (this, wxID_ANY, wxT ("Load from file...")); + table->Add (_certificate_load, 1, wxEXPAND); + + table->AddSpacer (0); + _certificate_text = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, wxSize (320, 256), wxTE_MULTILINE | wxTE_READONLY); + if (certificate) { + _certificate_text->SetValue (certificate->certificate ()); + } + wxFont font = wxSystemSettings::GetFont (wxSYS_ANSI_FIXED_FONT); + font.SetPointSize (font.GetPointSize() / 2); + _certificate_text->SetFont (font); + table->Add (_certificate_text, 1, wxEXPAND); + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); overall_sizer->Add (table, 1, wxEXPAND | wxALL, 6); @@ -43,6 +64,10 @@ ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name) SetSizer (overall_sizer); overall_sizer->Layout (); overall_sizer->SetSizeHints (this); + + _certificate_load->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ScreenDialog::load_certificate, this)); + + setup_sensitivity (); } string @@ -50,3 +75,35 @@ ScreenDialog::name () const { return wx_to_std (_name->GetValue()); } + +shared_ptr +ScreenDialog::certificate () const +{ + return _certificate; +} + +void +ScreenDialog::load_certificate () +{ + wxFileDialog* d = new wxFileDialog (this, _("Select Certificate File")); + + if (d->ShowModal () == wxID_OK) { + try { + _certificate.reset (new dcp::Certificate (boost::filesystem::path (wx_to_std (d->GetPath ())))); + _certificate_text->SetValue (_certificate->certificate ()); + } catch (dcp::MiscError& e) { + error_dialog (this, String::compose ("Could not read certificate file (%1)", e.what())); + } + } + + d->Destroy (); + + setup_sensitivity (); +} + +void +ScreenDialog::setup_sensitivity () +{ + wxButton* ok = dynamic_cast (FindWindowById (wxID_OK, this)); + ok->Enable (_certificate.get ()); +}