From cbd0649e3becd5712183d6a3d4f4f0629a12c80d Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Mon, 18 May 2020 23:39:18 +0200 Subject: [PATCH] qmlpuppet: enable the use of multilanguage database Change-Id: I2277348ac1e6b5025e75c640da83da30294c9d10 Reviewed-by: Tim Jenssen --- .../instances/nodeinstanceserver.cpp | 20 +++++++++- .../qml2puppet/instances/nodeinstanceserver.h | 39 +++++++++++++++++++ .../qml/qmlpuppet/qml2puppet/qml2puppet.pri | 7 ++++ .../designercore/instances/puppetcreator.cpp | 17 ++++++++ .../designercore/instances/puppetcreator.h | 1 + 5 files changed, 82 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 0bfa289769d..561076d080b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -69,6 +69,7 @@ #include #include #include +#include #include #include @@ -1397,7 +1398,22 @@ void NodeInstanceServer::view3DAction(const View3DActionCommand &command) Q_UNUSED(command) } -void NodeInstanceServer::changeLanguage(const ChangeLanguageCommand &) {} +void NodeInstanceServer::changeLanguage(const ChangeLanguageCommand &command) +{ + static QPointer multilanguageTranslator; + if (!MultiLanguage::databaseFilePath().isEmpty()) { + if (!multilanguageLink) { + multilanguageLink = std::make_unique(); + multilanguageTranslator = multilanguageLink->translator().release(); + QCoreApplication::installTranslator(multilanguageTranslator); + } + if (multilanguageTranslator) + multilanguageTranslator->setLanguage(command.language); + } + QEvent ev(QEvent::LanguageChange); + QCoreApplication::sendEvent(QCoreApplication::instance(), &ev); + engine()->retranslate(); +} -void NodeInstanceServer::changePreviewImageSize(const ChangePreviewImageSizeCommand &command) {} +void NodeInstanceServer::changePreviewImageSize(const ChangePreviewImageSizeCommand &) {} } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index fe1d767c88a..cecef865412 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -31,6 +31,13 @@ #include #include +#ifdef MULTILANGUAGE_TRANSLATIONPROVIDER +#include +#endif + +#include +#include + #include #include "servernodeinstance.h" #include "debugoutputcommand.h" @@ -47,6 +54,37 @@ QListtoList(const QSet &set) } } //QtHelpers +#ifndef MULTILANGUAGE_TRANSLATIONPROVIDER +namespace MultiLanguage { +static QByteArray databaseFilePath() +{ + return {}; +} + +class Translator : public QTranslator +{ +public: + void setLanguage(const QString&) {} +}; + +class Link +{ +public: + Link() + { + if (qEnvironmentVariableIsSet("QT_MULTILANGUAGE_DATABASE")) + qWarning() << "QT_MULTILANGUAGE_DATABASE is set but QQmlDebugTranslationService is without MULTILANGUAGE_TRANSLATIONPROVIDER support compiled."; + } + std::unique_ptr translator() { + //should never be called + Q_ASSERT(false); + return std::make_unique(); + } + const bool isActivated = false; +}; +} //namespace MultiLanguage +#endif + QT_BEGIN_NAMESPACE class QFileSystemWatcher; class QQmlView; @@ -250,6 +288,7 @@ private: QPointer m_dummyContextObject; QPointer m_importComponent; QPointer m_importComponentObject; + std::unique_ptr multilanguageLink; }; } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pri b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pri index b8013102767..a2b3219327b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pri +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pri @@ -5,6 +5,13 @@ CONFIG += c++11 DEFINES -= QT_CREATOR +# This .pri file contains classes to enable a special multilanguage translator debug service +MULTILANGUAGE_SUPPORT_PRI=$$(MULTILANGUAGE_SUPPORT_PRI) +!isEmpty(MULTILANGUAGE_SUPPORT_PRI) { + include($$(MULTILANGUAGE_SUPPORT_PRI)) + DEFINES += MULTILANGUAGE_TRANSLATIONPROVIDER +} + include (editor3d/editor3d.pri) include (../instances/instances.pri) include (instances/instances.pri) diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index 6e6660a5cbb..a33d7f1f5a0 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -162,6 +162,18 @@ QString PuppetCreator::getStyleConfigFileName() const return QString(); } +QString PuppetCreator::getMultilanguageDatabaseFilePath() const +{ +#ifndef QMLDESIGNER_TEST + if (m_target) { + auto filePath = m_target->project()->projectDirectory().pathAppended("/multilanguage-experimental-v1.db"); + if (filePath.exists()) + return filePath.toString(); + } +#endif + return {}; +} + PuppetCreator::PuppetCreator(ProjectExplorer::Target *target, const Model *model) : m_target(target) @@ -482,6 +494,11 @@ QProcessEnvironment PuppetCreator::processEnvironment() const environment.set("QMLDESIGNER_RC_PATHS", m_qrcMapping); } + const QString multilanguageDatabaseFilePath = getMultilanguageDatabaseFilePath(); + + if (!multilanguageDatabaseFilePath.isEmpty()) + environment.set("QT_MULTILANGUAGE_DATABASE", multilanguageDatabaseFilePath); + #ifndef QMLDESIGNER_TEST auto view = QmlDesignerPlugin::instance()->viewManager().nodeInstanceView(); view->emitCustomNotification("PuppetStatus", {}, {QVariant(m_qrcMapping)}); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h index bafea8fa3e6..f8033fd3e19 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h @@ -102,6 +102,7 @@ protected: bool useOnlyFallbackPuppet() const; QString getStyleConfigFileName() const; + QString getMultilanguageDatabaseFilePath() const; private: mutable QString m_compileLog;