diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2021-10-12 13:38:44 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2021-10-15 06:08:14 +0200 |
commit | a15f7105ff458dd765a6cd96745a70ae345832ed (patch) | |
tree | 9b9f687a7550e91560a80111ad3b3f5f9e334aa7 /src | |
parent | 071daed9a9a1a76ec59b56ec8c651dbe8b23db4d (diff) |
Qmldebugtranslator: report elide issues correctly inside layouts
Task-number: QTBUG-96991
Change-Id: I911044893fb6eac54c6fb8f2b236f422bd04a7ae
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
(cherry picked from commit dd96e919c1a69f40329c5b6a33029ab559636397)
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src')
6 files changed, 34 insertions, 85 deletions
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp index 854937f4ae..8cc8c9bd41 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp @@ -241,10 +241,10 @@ public: emit q->messageToClient(q->name(), packet.data()); } - void sendMissingTranslations() + void sendTranslationIssues() { QVersionedPacket<QQmlDebugConnector> packet; - packet << Reply::MissingTranslations; + packet << Reply::TranslationIssues; QVector<TranslationIssue> issues; for (auto &&information : qAsConst(objectTranslationBindingMultiMap)) { @@ -255,6 +255,18 @@ public: issue.language = proxyTranslator->currentUILanguages(); issues.append(issue); } + + QObject *scopeObject = information.scopeObject; + QQuickText *quickText = static_cast<QQuickText*>(scopeObject); + if (quickText) { + if (quickText->truncated()) { + TranslationIssue issue; + issue.type = TranslationIssue::Type::Elided; + issue.codeMarker = codeMarker(information); + issue.language = proxyTranslator->currentUILanguages(); + issues.append(issue); + } + } } std::sort(issues.begin(), issues.end(), [](const auto &l1, const auto &l2){ return l1.codeMarker < l2.codeMarker; @@ -263,20 +275,6 @@ public: emit q->messageToClient(q->name(), packet.data()); } - void sendElidedTextWarning(const TranslationBindingInformation &information) - { - QVersionedPacket<QQmlDebugConnector> packet; - packet << Reply::TextElided; - - TranslationIssue issue; - issue.type = TranslationIssue::Type::Elided; - issue.codeMarker = codeMarker(information); - issue.language = proxyTranslator->currentUILanguages(); - - packet << issue; - emit q->messageToClient(q->name(), packet.data()); - } - QQmlDebugTranslationServiceImpl *q; bool watchTextElides = false; @@ -335,8 +333,8 @@ QQmlDebugTranslationServiceImpl::QQmlDebugTranslationServiceImpl(QObject *parent d, &QQmlDebugTranslationServicePrivate::sendLanguageChanged, Qt::QueuedConnection); - connect(this, &QQmlDebugTranslationServiceImpl::missingTranslations, - d, &QQmlDebugTranslationServicePrivate::sendMissingTranslations, + connect(this, &QQmlDebugTranslationServiceImpl::translationIssues, + d, &QQmlDebugTranslationServicePrivate::sendTranslationIssues, Qt::QueuedConnection); connect(this, &QQmlDebugTranslationServiceImpl::sendTranslatableTextOccurrences, @@ -374,8 +372,8 @@ void QQmlDebugTranslationServiceImpl::messageReceived(const QByteArray &message) emit stateList(); break; } - case QQmlDebugTranslation::Request::MissingTranslations: { - emit missingTranslations(); + case QQmlDebugTranslation::Request::TranslationIssues: { + emit translationIssues(); break; } case QQmlDebugTranslation::Request::TranslatableTextOccurrences: { @@ -415,57 +413,6 @@ void QQmlDebugTranslationServiceImpl::engineAboutToBeRemoved(QJSEngine *engine) emit detachedFromEngine(engine); } -QString QQmlDebugTranslationServiceImpl::foundElidedText(QObject *textObject, const QString &layoutText, const QString &elideText) -{ - Q_UNUSED(layoutText) - QString elidedTextResult = elideText; - // do the check only for text objects which have translation bindings - auto it = d->objectTranslationBindingMultiMap.find(textObject); - if (it != d->objectTranslationBindingMultiMap.end()) { - if (QQuickItem* quickItem = qobject_cast<QQuickItem*>(textObject)) { - const TranslationBindingInformation information = d->objectTranslationBindingMultiMap.value(quickItem); - - QQuickItem* parentItem = quickItem->parentItem(); - QString parentTypeName = parentItem->metaObject()->className(); - - // Currently text fields inside a layout give false signals about elides - // so we just omit them - - if (d->watchTextElides && !parentTypeName.endsWith("Layout")) { - d->sendElidedTextWarning(information); - } - - if (!d->elideConnections.contains(quickItem)) { - // add "refresh" elide state connections which remove themself - auto clearElideInformation = [=]() { - //quickItem->setColor(originColor); - for (QMetaObject::Connection connection : d->elideConnections.value(quickItem)) - quickItem->disconnect(connection); - d->elideConnections.remove(quickItem); - }; - - auto connectWithChangedWidthThreshold = [=] () { - return connect(quickItem, &QQuickItem::widthChanged, [=]() { - if (quickItem->implicitWidth() <= quickItem->width()) - clearElideInformation(); - }); - }; - auto connectImplicitWidthChangedThreshold = [=] () { - return connect(quickItem, &QQuickItem::implicitWidthChanged, [=]() { - if (quickItem->implicitWidth() <= quickItem->width()) - clearElideInformation(); - }); - }; - - d->elideConnections.insert(quickItem, - {connectWithChangedWidthThreshold(), - connectImplicitWidthChangedThreshold()}); - } - } - } - return elidedTextResult; -} - void QQmlDebugTranslationServiceImpl::foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation) { QObject *scopeObject = translationBindingInformation.scopeObject; diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h index 72e70f4b29..e0d1b2d9a8 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h +++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h @@ -68,7 +68,6 @@ public: QQmlDebugTranslationServiceImpl(QObject *parent = 0); ~QQmlDebugTranslationServiceImpl(); - QString foundElidedText(QObject *textObject, const QString &layoutText, const QString &elideText) override; void foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation) override; void messageReceived(const QByteArray &message) override; @@ -80,7 +79,8 @@ signals: void state(const QString &stateName); void stateList(); void watchTextElides(bool); - void missingTranslations(); + void translationIssues(); + void elidedTranslations(); void sendTranslatableTextOccurrences(); private: diff --git a/src/qml/debugger/qqmldebugserviceinterfaces_p.h b/src/qml/debugger/qqmldebugserviceinterfaces_p.h index 5d58e4d2e0..d01e472edb 100644 --- a/src/qml/debugger/qqmldebugserviceinterfaces_p.h +++ b/src/qml/debugger/qqmldebugserviceinterfaces_p.h @@ -108,7 +108,6 @@ class QQmlEngineControlService {}; class QQmlNativeDebugService {}; class QQmlDebugTranslationService { public: - virtual QString foundElidedText(QObject *, const QString &, const QString &) {return {};} virtual void foundTranslationBinding(const TranslationBindingInformation &) {} }; @@ -186,7 +185,6 @@ class Q_QML_PRIVATE_EXPORT QQmlDebugTranslationService : public QQmlDebugService public: static const QString s_key; - virtual QString foundElidedText(QObject *qQuickTextObject, const QString &layoutText, const QString &elideText) = 0; virtual void foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation) = 0; protected: friend class QQmlDebugConnector; diff --git a/src/qml/debugger/qqmldebugtranslationprotocol_p.h b/src/qml/debugger/qqmldebugtranslationprotocol_p.h index 10010f6507..06d3850510 100644 --- a/src/qml/debugger/qqmldebugtranslationprotocol_p.h +++ b/src/qml/debugger/qqmldebugtranslationprotocol_p.h @@ -64,19 +64,23 @@ enum class Request { ChangeLanguage = 1, StateList, ChangeState, - MissingTranslations, + TranslationIssues, TranslatableTextOccurrences, WatchTextElides, DisableWatchTextElides, + // following are obsolete, just provided for compilation compatibility + MissingTranslations }; enum class Reply { LanguageChanged = 101, StateList, StateChanged, - MissingTranslations, + TranslationIssues, TranslatableTextOccurrences, - TextElided, + // following are obsolete, just provided for compilation compatibility + MissingTranslations, + TextElided }; inline QByteArray createChangeLanguageRequest(QDataStream &packet, const QUrl &url, @@ -98,6 +102,12 @@ inline QByteArray createMissingTranslationsRequest(QDataStream &packet) return qobject_cast<QBuffer *>(packet.device())->data(); } +inline QByteArray createTranslationIssuesRequest(QDataStream &packet) +{ + packet << Request::TranslationIssues; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + inline QByteArray createTranslatableTextOccurrencesRequest(QDataStream &packet) { packet << Request::TranslatableTextOccurrences; diff --git a/src/qmldebug/qqmldebugtranslationclient.cpp b/src/qmldebug/qqmldebugtranslationclient.cpp index a93184b95d..431cb67283 100644 --- a/src/qmldebug/qqmldebugtranslationclient.cpp +++ b/src/qmldebug/qqmldebugtranslationclient.cpp @@ -59,7 +59,7 @@ void QQmlDebugTranslationClient::messageReceived(const QByteArray &message) packet >> type; switch (type) { - case QQmlDebugTranslation::Reply::MissingTranslations: { + case QQmlDebugTranslation::Reply::TranslationIssues: { packet >> translationIssues; break; } diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 0f17af1975..2b8517e9cf 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -1153,12 +1153,6 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline) elideLayout->setFont(layout.font()); elideLayout->setTextOption(layout.textOption()); -#if QT_CONFIG(translation) && QT_CONFIG(qml_debug) - if (QQmlDebugTranslationService *service - = QQmlDebugConnector::service<QQmlDebugTranslationService>()) { - elideText = service->foundElidedText(q, layoutText, elideText); - } -#endif //QT_CONFIG(translation) elideLayout->setText(elideText); elideLayout->beginLayout(); |