From 3576381aa294d45472ce60034e725a440d638531 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 16 Dec 2014 12:38:58 +0000 Subject: [PATCH] Allow setting of font files. --- src/wx/fonts_dialog.cc | 57 ++++++++++++++++++++++++++++++++++++++++-- src/wx/fonts_dialog.h | 6 ++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/wx/fonts_dialog.cc b/src/wx/fonts_dialog.cc index 37df8f368..1edfcf100 100644 --- a/src/wx/fonts_dialog.cc +++ b/src/wx/fonts_dialog.cc @@ -24,10 +24,12 @@ #include using std::list; +using std::string; using boost::shared_ptr; FontsDialog::FontsDialog (wxWindow* parent, shared_ptr content) : wxDialog (parent, wxID_ANY, _("Fonts")) + , _content (content) { _fonts = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize (400, 200), wxLC_REPORT | wxLC_SINGLE_SEL); @@ -52,8 +54,8 @@ FontsDialog::FontsDialog (wxWindow* parent, shared_ptr content) { wxSizer* s = new wxBoxSizer (wxVERTICAL); - _edit = new wxButton (this, wxID_ANY, _("Edit...")); - s->Add (_edit, 0, wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); + _set_file = new wxButton (this, wxID_ANY, _("Set file...")); + s->Add (_set_file, 0, wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); sizer->Add (s, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); } @@ -67,6 +69,20 @@ FontsDialog::FontsDialog (wxWindow* parent, shared_ptr content) SetSizerAndFit (overall_sizer); + _set_file->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FontsDialog::set_file_clicked, this)); + + setup (); +} + +void +FontsDialog::setup () +{ + shared_ptr content = _content.lock (); + if (!content) { + return; + } + + _fonts->DeleteAllItems (); list > fonts = content->fonts (); size_t n = 0; for (list >::const_iterator i = fonts.begin(); i != fonts.end(); ++i) { @@ -81,3 +97,40 @@ FontsDialog::FontsDialog (wxWindow* parent, shared_ptr content) } } +void +FontsDialog::set_file_clicked () +{ + shared_ptr content = _content.lock (); + if (!content) { + return; + } + + int item = _fonts->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (item == -1) { + return; + } + + /* The wxFD_CHANGE_DIR here prevents a `could not set working directory' error 123 on Windows when using + non-Latin filenames or paths. + */ + wxFileDialog* d = new wxFileDialog (this, _("Choose a font file"), wxT (""), wxT (""), wxT ("*.ttf"), wxFD_CHANGE_DIR); + int const r = d->ShowModal (); + + if (r != wxID_OK) { + d->Destroy (); + return; + } + + string id = wx_to_std (_fonts->GetItemText (item, 0)); + + list > fonts = content->fonts (); + for (list >::iterator i = fonts.begin(); i != fonts.end(); ++i) { + if ((*i)->id == id) { + (*i)->file = wx_to_std (d->GetPath ()); + } + } + + d->Destroy (); + + setup (); +} diff --git a/src/wx/fonts_dialog.h b/src/wx/fonts_dialog.h index 32fc65f45..c7ca789b8 100644 --- a/src/wx/fonts_dialog.h +++ b/src/wx/fonts_dialog.h @@ -29,6 +29,10 @@ public: FontsDialog (wxWindow* parent, boost::shared_ptr); private: + void setup (); + void set_file_clicked (); + + boost::weak_ptr _content; wxListCtrl* _fonts; - wxButton* _edit; + wxButton* _set_file; }; -- 2.30.2