From 4061c047a0b30fdf4661719d4f38f1ec49e74dfd Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 26 Oct 2021 16:58:42 +0200 Subject: [PATCH] Base: implement a way to test translator for testing purposes --- src/Base/Translate.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ src/Base/Translate.h | 9 +++++++++ 2 files changed, 50 insertions(+) diff --git a/src/Base/Translate.cpp b/src/Base/Translate.cpp index 50eeddfed5..2c6db05c5f 100644 --- a/src/Base/Translate.cpp +++ b/src/Base/Translate.cpp @@ -24,6 +24,7 @@ #include "Translate.h" #include +#include using namespace Base; @@ -62,6 +63,12 @@ Translate::Translate() &Translate::trNoop, "QT_TR_NOOP_UTF8(sourcetext)\n" "Same as QT_TR_NOOP"); + add_varargs_method("installTranslator", + &Translate::installTranslator, + "Install a translator for testing purposes"); + add_varargs_method("removeTranslators", + &Translate::removeTranslators, + "Remove test translators"); initialize("This module is the Translate module"); // register with Python } @@ -109,3 +116,37 @@ Py::Object Translate::trNoop(const Py::Tuple& args) throw Py::Exception(); return Py::Object(arg1); } + +Py::Object Translate::installTranslator(const Py::Tuple& args) +{ + char* Name; + if (!PyArg_ParseTuple(args.ptr(), "et","utf-8",&Name)) + throw Py::Exception(); + QString filename = QString::fromUtf8(Name); + PyMem_Free(Name); + + bool ok = false; + QFileInfo fi(filename); + std::shared_ptr translator(std::make_shared(nullptr)); + translator->setObjectName(fi.fileName()); + if (translator->load(filename)) { + qApp->installTranslator(translator.get()); + translators.push_back(translator); + ok = true; + } + + return Py::Boolean(ok); +} + +Py::Object Translate::removeTranslators(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + bool ok = true; + for (const auto& it : translators) { + ok &= QCoreApplication::removeTranslator(it.get()); + } + + translators.clear(); + return Py::Boolean(ok); +} diff --git a/src/Base/Translate.h b/src/Base/Translate.h index 1b75a2fe26..bb73095db8 100644 --- a/src/Base/Translate.h +++ b/src/Base/Translate.h @@ -26,10 +26,14 @@ #include #include +#include +#include +#include #ifndef FC_GLOBAL_H #include #endif + namespace Base { class BaseExport Translate : public Py::ExtensionModule @@ -43,6 +47,11 @@ private: Py::Object translateNoop(const Py::Tuple& args); Py::Object translateNoop3(const Py::Tuple& args); Py::Object trNoop(const Py::Tuple& args); + Py::Object installTranslator(const Py::Tuple& args); + Py::Object removeTranslators(const Py::Tuple& args); + +private: + std::list> translators; }; } // namespace Base