From 5869a4b402e16ea735fb6902fe7604ec4d0ec0d4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 8 Dec 2018 02:12:56 +0000 Subject: [PATCH] Add sending of translations via email. --- src/tools/dcpomatic.cc | 26 +++++++++++++ src/wx/i18n_hook.cc | 18 ++++----- src/wx/i18n_hook.h | 7 ++++ src/wx/send_i18n_dialog.cc | 76 ++++++++++++++++++++++++++++++++++++++ src/wx/send_i18n_dialog.h | 45 ++++++++++++++++++++++ src/wx/wscript | 1 + 6 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 src/wx/send_i18n_dialog.cc create mode 100644 src/wx/send_i18n_dialog.h diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index c1edbe481..ad1dcde90 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -47,7 +47,10 @@ #include "wx/paste_dialog.h" #include "wx/focus_manager.h" #include "wx/initial_setup_dialog.h" +#include "wx/send_i18n_dialog.h" +#include "wx/i18n_hook.h" #include "lib/film.h" +#include "lib/emailer.h" #include "lib/config.h" #include "lib/util.h" #include "lib/video_content.h" @@ -226,6 +229,7 @@ enum { ID_tools_encoding_servers, ID_tools_manage_templates, ID_tools_check_for_updates, + ID_tools_send_translations, ID_tools_restore_default_preferences, ID_help_report_a_problem, /* IDs for shortcuts (with no associated menu item) */ @@ -312,6 +316,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_encoding_servers, this), ID_tools_encoding_servers); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_manage_templates, this), ID_tools_manage_templates); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_check_for_updates, this), ID_tools_check_for_updates); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_send_translations, this), ID_tools_send_translations); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_restore_default_preferences, this), ID_tools_restore_default_preferences); Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_about, this), wxID_ABOUT); Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this), ID_help_report_a_problem); @@ -975,6 +980,26 @@ private: _update_news_requested = true; } + void tools_send_translations () + { + SendI18NDialog* d = new SendI18NDialog (this); + if (d->ShowModal() == wxID_OK) { + string body; + body += d->name() + "\n"; + body += d->language() + "\n"; + map translations = I18NHook::translations (); + for (map::const_iterator i = translations.begin(); i != translations.end(); ++i) { + body += i->first + "\n" + i->second + "\n"; + } + list to; + to.push_back ("carl@dcpomatic.com"); + Emailer emailer (d->email(), to, "DCP-o-matic translations", body); + emailer.send ("main.carlh.net", 2525); + } + + d->Destroy (); + } + void help_about () { AboutDialog* d = new AboutDialog (this); @@ -1201,6 +1226,7 @@ private: add_item (tools, _("Encoding servers..."), ID_tools_encoding_servers, 0); add_item (tools, _("Manage templates..."), ID_tools_manage_templates, 0); add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0); + add_item (tools, _("Send translations..."), ID_tools_send_translations, 0); tools->AppendSeparator (); add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS); diff --git a/src/wx/i18n_hook.cc b/src/wx/i18n_hook.cc index f7bc4829d..84dcd761f 100644 --- a/src/wx/i18n_hook.cc +++ b/src/wx/i18n_hook.cc @@ -24,7 +24,11 @@ #include "lib/cross.h" #include #include -#include + +using std::map; +using std::string; + +map I18NHook::_translations; I18NHook::I18NHook (wxWindow* window) : _window (window) @@ -40,6 +44,7 @@ I18NHook::handle (wxMouseEvent& ev) InstantI18NDialog* d = new InstantI18NDialog (_window, get_text()); d->ShowModal(); set_text (d->get()); + d->Destroy (); wxWindow* w = _window; while (w) { @@ -51,14 +56,5 @@ I18NHook::handle (wxMouseEvent& ev) ev.Skip (); - boost::filesystem::path file = "instant_i18n"; - - FILE* f = fopen_boost (file, "a"); - if (!f) { - error_dialog (_window, wxString::Format(_("Could not open translation file %s"), std_to_wx(file.string()).data())); - return; - } - fprintf (f, "%s\n", wx_to_std(original).c_str()); - fprintf (f, "%s\n", wx_to_std(get_text()).c_str()); - fclose (f); + _translations[wx_to_std(original)] = wx_to_std(get_text()); } diff --git a/src/wx/i18n_hook.h b/src/wx/i18n_hook.h index 9462e3f7f..106d9d8c4 100644 --- a/src/wx/i18n_hook.h +++ b/src/wx/i18n_hook.h @@ -22,6 +22,7 @@ #define DCPOMATIC_I18N_HOOK_H #include +#include class I18NHook { @@ -31,10 +32,16 @@ public: virtual void set_text (wxString text) = 0; virtual wxString get_text () const = 0; + static std::map translations () { + return _translations; + } + private: void handle (wxMouseEvent &); wxWindow* _window; + + static std::map _translations; }; #endif diff --git a/src/wx/send_i18n_dialog.cc b/src/wx/send_i18n_dialog.cc new file mode 100644 index 000000000..a437c9269 --- /dev/null +++ b/src/wx/send_i18n_dialog.cc @@ -0,0 +1,76 @@ +/* + Copyright (C) 2018 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "send_i18n_dialog.h" +#include "wx_util.h" +#include "i18n_hook.h" +#include + +using std::string; +using std::map; + +SendI18NDialog::SendI18NDialog (wxWindow* parent) + : wxDialog (parent, wxID_ANY, _("Send translations")) +{ + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + table->AddGrowableCol (1, 1); + + add_label_to_sizer (table, this, _("Your name"), true); + _name = new wxTextCtrl (this, wxID_ANY); + table->Add (_name, 0, wxEXPAND); + + add_label_to_sizer (table, this, _("Your email"), true); + _email = new wxTextCtrl (this, wxID_ANY); + table->Add (_email, 0, wxEXPAND); + + add_label_to_sizer (table, this, _("Language"), true); + _language = new wxTextCtrl (this, wxID_ANY); + table->Add (_language, 0, wxEXPAND); + + wxListCtrl* list = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize(800, -1), wxLC_REPORT | wxLC_NO_HEADER); + list->AppendColumn(wxT(""), wxLIST_FORMAT_LEFT, 400); + list->AppendColumn(wxT(""), wxLIST_FORMAT_LEFT, 400); + + map translations = I18NHook::translations (); + int N = 0; + for (map::const_iterator i = translations.begin(); i != translations.end(); ++i) { + wxListItem it; + it.SetId(N); + it.SetColumn(0); + it.SetText(std_to_wx(i->first)); + list->InsertItem(it); + it.SetColumn(1); + it.SetText(std_to_wx(i->second)); + list->SetItem(it); + ++N; + } + + overall_sizer->Add (table, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); + overall_sizer->Add (list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); + + wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); + if (buttons) { + overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } + + SetSizerAndFit (overall_sizer); +} diff --git a/src/wx/send_i18n_dialog.h b/src/wx/send_i18n_dialog.h new file mode 100644 index 000000000..f8d2b5354 --- /dev/null +++ b/src/wx/send_i18n_dialog.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2018 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "wx_util.h" +#include + +class SendI18NDialog : public wxDialog +{ +public: + SendI18NDialog (wxWindow* parent); + + std::string name () { + return wx_to_std (_name->GetValue()); + } + + std::string email () { + return wx_to_std (_email->GetValue()); + } + + std::string language () { + return wx_to_std (_language->GetValue()); + } + +private: + wxTextCtrl* _name; + wxTextCtrl* _email; + wxTextCtrl* _language; +}; diff --git a/src/wx/wscript b/src/wx/wscript index 358d98d70..66d78a2f6 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -107,6 +107,7 @@ sources = """ screen_dialog.cc screens_panel.cc self_dkdm_dialog.cc + send_i18n_dialog.cc server_dialog.cc servers_list_dialog.cc standard_controls.cc -- 2.30.2