From 02d4f3e14d0347e9bddd8d7c6d8ffaa7ad19010e Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 20 Jun 2018 18:33:46 +0200 Subject: [PATCH 1/4] Provide a callback to libslic3r to translate texts. Moved the "translate" functions to namespaces to avoid clashes between the code in libslic3r and Slic3r GUI projects. --- resources/localization/list.txt | 1 + xs/src/libslic3r/I18N.hpp | 12 +++++++----- xs/src/libslic3r/PrintConfig.cpp | 2 +- xs/src/libslic3r/utils.cpp | 2 +- xs/src/slic3r/GUI/GUI.cpp | 6 +++++- xs/src/slic3r/GUI/GUI.hpp | 13 ++++++++----- 6 files changed, 23 insertions(+), 13 deletions(-) diff --git a/resources/localization/list.txt b/resources/localization/list.txt index 0fd5289943..bc545b1bf3 100644 --- a/resources/localization/list.txt +++ b/resources/localization/list.txt @@ -21,6 +21,7 @@ xs/src/slic3r/GUI/UpdateDialogs.cpp xs/src/slic3r/GUI/WipeTowerDialog.cpp xs/src/slic3r/Utils/OctoPrint.cpp xs/src/slic3r/Utils/PresetUpdater.cpp +xs/src/libslic3r/Print.cpp xs/src/libslic3r/PrintConfig.cpp xs/src/libslic3r/GCode/PreviewData.cpp lib/Slic3r/GUI.pm diff --git a/xs/src/libslic3r/I18N.hpp b/xs/src/libslic3r/I18N.hpp index bc9345f11e..db4fd22dfe 100644 --- a/xs/src/libslic3r/I18N.hpp +++ b/xs/src/libslic3r/I18N.hpp @@ -5,11 +5,13 @@ namespace Slic3r { -typedef std::string (*translate_fn_type)(const char*); -extern translate_fn_type translate_fn; -inline void set_translate_callback(translate_fn_type fn) { translate_fn = fn; } -inline std::string translate(const std::string &s) { return (translate_fn == nullptr) ? s : (*translate_fn)(s.c_str()); } -inline std::string translate(const char *ptr) { return (translate_fn == nullptr) ? std::string(ptr) : (*translate_fn)(ptr); } +namespace I18N { + typedef std::string (*translate_fn_type)(const char*); + extern translate_fn_type translate_fn; + inline void set_translate_callback(translate_fn_type fn) { translate_fn = fn; } + inline std::string translate(const std::string &s) { return (translate_fn == nullptr) ? s : (*translate_fn)(s.c_str()); } + inline std::string translate(const char *ptr) { return (translate_fn == nullptr) ? std::string(ptr) : (*translate_fn)(ptr); } +} // namespace I18N } // namespace Slic3r diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index c5e520b4f0..486e6fe183 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -14,7 +14,7 @@ namespace Slic3r { //! macro used to mark string used at localization, //! return same string -#define L(s) translate(s) +#define L(s) Slic3r::I18N::translate(s) PrintConfigDef::PrintConfigDef() { diff --git a/xs/src/libslic3r/utils.cpp b/xs/src/libslic3r/utils.cpp index 2d177da3cc..991118c149 100644 --- a/xs/src/libslic3r/utils.cpp +++ b/xs/src/libslic3r/utils.cpp @@ -125,7 +125,7 @@ const std::string& localization_dir() } // Translate function callback, to call wxWidgets translate function to convert non-localized UTF8 string to a localized one. -translate_fn_type translate_fn = nullptr; +Slic3r::I18N::translate_fn_type Slic3r::I18N::translate_fn = nullptr; static std::string g_data_dir; diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index e2f3925fcb..825c37dced 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -56,7 +56,7 @@ #include "../Utils/PresetUpdater.hpp" #include "../Config/Snapshot.hpp" - +#include "libslic3r/I18N.hpp" namespace Slic3r { namespace GUI { @@ -149,9 +149,13 @@ void update_label_colours_from_appconfig() } } +static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)); } + void set_wxapp(wxApp *app) { g_wxApp = app; + // Let the libslic3r know the callback, which will translate messages on demand. + Slic3r::I18N::set_translate_callback(libslic3r_translate_callback); init_label_colours(); } diff --git a/xs/src/slic3r/GUI/GUI.hpp b/xs/src/slic3r/GUI/GUI.hpp index 2853544462..83052cb6e3 100644 --- a/xs/src/slic3r/GUI/GUI.hpp +++ b/xs/src/slic3r/GUI/GUI.hpp @@ -33,11 +33,14 @@ class PresetUpdater; class DynamicPrintConfig; class TabIface; -#define _(s) Slic3r::translate((s)) -inline wxString translate(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)); } -inline wxString translate(const wchar_t *s) { return wxGetTranslation(s); } -inline wxString translate(const std::string &s) { return wxGetTranslation(wxString(s.c_str(), wxConvUTF8)); } -inline wxString translate(const std::wstring &s) { return wxGetTranslation(s.c_str()); } +#define _(s) Slic3r::GUI::I18N::translate((s)) + +namespace GUI { namespace I18N { + inline wxString translate(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)); } + inline wxString translate(const wchar_t *s) { return wxGetTranslation(s); } + inline wxString translate(const std::string &s) { return wxGetTranslation(wxString(s.c_str(), wxConvUTF8)); } + inline wxString translate(const std::wstring &s) { return wxGetTranslation(s.c_str()); } +} } // !!! If you needed to translate some wxString, // !!! please use _(L(string)) From ac011aec6dd2793b1e5590e4dccafa618f378c2d Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 20 Jun 2018 18:55:31 +0200 Subject: [PATCH 2/4] Removed dependencies of libslic3r on Slic3r GUI library. --- xs/src/libslic3r/GCode/PreviewData.cpp | 15 ++++++++------- xs/src/libslic3r/Print.cpp | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/xs/src/libslic3r/GCode/PreviewData.cpp b/xs/src/libslic3r/GCode/PreviewData.cpp index 40f0747b28..3833bca06c 100644 --- a/xs/src/libslic3r/GCode/PreviewData.cpp +++ b/xs/src/libslic3r/GCode/PreviewData.cpp @@ -2,7 +2,12 @@ #include "PreviewData.hpp" #include #include -#include "slic3r/GUI/GUI.hpp" +#include + +#include + +//! macro used to mark string used at localization, +#define L(s) (s) namespace Slic3r { @@ -405,7 +410,7 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std:: items.reserve(last_valid - first_valid + 1); for (unsigned int i = (unsigned int)first_valid; i <= (unsigned int)last_valid; ++i) { - items.emplace_back(_CHB(extrusion.role_names[i].c_str()).data(), extrusion.role_colors[i]); + items.emplace_back(Slic3r::I18N::translate(extrusion.role_names[i]), extrusion.role_colors[i]); } break; @@ -436,13 +441,9 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std:: items.reserve(tools_colors_count); for (unsigned int i = 0; i < tools_colors_count; ++i) { - char buf[MIN_BUF_LENGTH_FOR_L]; - sprintf(buf, _CHB(L("Extruder %d")), i + 1); - GCodePreviewData::Color color; ::memcpy((void*)color.rgba, (const void*)(tool_colors.data() + i * 4), 4 * sizeof(float)); - - items.emplace_back(buf, color); + items.emplace_back((boost::format(Slic3r::I18N::translate(L("Extruder %d"))) % (i + 1)).str(), color); } break; diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index c8d3ccde18..5dc84cc726 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -14,7 +14,7 @@ //! macro used to mark string used at localization, //! return same string -#define L(s) translate(s) +#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { From 3a2b501012419b636b525b341e2c7613c97162e3 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 20 Jun 2018 19:07:55 +0200 Subject: [PATCH 3/4] Fixed compilation on OSX --- xs/src/slic3r/GUI/GUI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 825c37dced..6428666069 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -149,7 +149,7 @@ void update_label_colours_from_appconfig() } } -static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)); } +static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str(); } void set_wxapp(wxApp *app) { From 8abe1b3633b9fe6f304eeac2feb7aeeeae0bf8e8 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 20 Jun 2018 19:26:19 +0200 Subject: [PATCH 4/4] Yet another fix for the OSX. --- xs/src/slic3r/GUI/GUI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 6428666069..0360d73d02 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -149,7 +149,7 @@ void update_label_colours_from_appconfig() } } -static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str(); } +static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } void set_wxapp(wxApp *app) {