diff options
author | Tuomo Pelkonen <tuomo.pelkonen@qt.io> | 2021-09-06 10:45:24 +0300 |
---|---|---|
committer | Tuomo Pelkonen <tuomo.pelkonen@qt.io> | 2021-09-08 10:34:57 +0000 |
commit | cc0210ade262582534958efd2618a7f312afc604 (patch) | |
tree | 1ac2c6e3c6597bb1e93fb14f07ee2ddb94a7c5aa /src | |
parent | bfe4778808bf32c2ae0b6b58a59ae1350ebe9e6f (diff) |
Add all qml debug translation fixes and functionalities from 5.15
* Add current state name in the protocol
* Get style name in correct format
* Get correct root item after changing new file
Task-number: QTBUG-96052
Change-Id: I5a7b9e29ec83e6258505cedbd55edf376386f783
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
(cherry picked from commit 1a85f784132f83211de431193d72cdf1e850f778)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit c02f52fc452c1488c56453f1e9709968be33948f)
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
Diffstat (limited to 'src')
6 files changed, 68 insertions, 25 deletions
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp index 4f9d76432f..516ff33e1e 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp @@ -39,6 +39,7 @@ #include "qqmldebugtranslationservice.h" #include "proxytranslator.h" +#include "qqmlpreviewservice.h" #include <QtCore/qtranslator.h> #include <QtCore/qdebug.h> @@ -96,8 +97,7 @@ public: void setState(const QString &stateName) { - if (currentQuickView) { - QQuickItem *rootItem = currentQuickView->rootObject(); + if (QQuickItem *rootItem = currentRootItem()) { QQuickStateGroup *stateGroup = QQuickItemPrivate::get(rootItem)->_states(); if (stateGroup->findState(stateName)) { connect(stateGroup, &QQuickStateGroup::stateChanged, @@ -106,17 +106,16 @@ public: stateGroup->setState(stateName); } else - qWarning() << QString("Could not switch the state to %1").arg(stateName); + qWarning() << "Could not switch the state" << stateName << "at" << rootItem; } } void sendStateChanged() { - QString stateName; if (QQuickStateGroup *stateGroup = qobject_cast<QQuickStateGroup*>(sender())) - stateName = stateGroup->state(); + currentStateName = stateGroup->state(); QVersionedPacket<QQmlDebugConnector> packet; - packet << Reply::StateChanged << stateName; + packet << Reply::StateChanged << currentStateName; emit q->messageToClient(q->name(), packet.data()); } @@ -124,17 +123,18 @@ public: { QVersionedPacket<QQmlDebugConnector> packet; packet << Reply::StateList; + QVector<QmlState> qmlStates; - QQuickItem *rootItem = currentQuickView->rootObject(); - QQuickStateGroup *stateGroup = QQuickItemPrivate::get(rootItem)->_states(); + if (QQuickItem *rootItem = currentRootItem()) { + QQuickStateGroup *stateGroup = QQuickItemPrivate::get(rootItem)->_states(); - QList<QQuickState *> states = stateGroup->states(); - QVector<QmlState> qmlStates; + QList<QQuickState *> states = stateGroup->states(); - for (QQuickState *state : states) { - QmlState qmlState; - qmlState.name = state->name(); - qmlStates.append(qmlState); + for (QQuickState *state : states) { + QmlState qmlState; + qmlState.name = state->name(); + qmlStates.append(qmlState); + } } packet << qmlStates; @@ -157,6 +157,22 @@ public: } } + QString getStyleNameForFont(const QFont& font) + { + if (font.styleName() != "") + return font.styleName(); + QString styleName; + if (font.bold()) + styleName.append("Bold "); + if (font.italic()) + styleName.append("Italic " ); + if (font.strikeOut()) + styleName.append("StrikeThrough "); + if (font.underline()) + styleName.append("Underline "); + return styleName.trimmed(); + } + void sendTranslatableTextOccurrences() { @@ -193,13 +209,14 @@ public: qmlElement.fontFamily = font.family(); qmlElement.fontPointSize = font.pointSize(); qmlElement.fontPixelSize = font.pixelSize(); - qmlElement.fontStyleName = font.styleName(); + qmlElement.fontStyleName = getStyleNameForFont(font); qmlElement.horizontalAlignment = scopeObject->property("horizontalAlignment").toInt(); qmlElement.verticalAlignment = scopeObject->property("verticalAlignment").toInt(); QQmlType qmlType = QQmlMetaType::qmlType(metaObject); qmlElement.elementType = qmlType.qmlTypeName() + "/" + qmlType.typeName(); + qmlElement.stateName = currentStateName; qmlElements.append(qmlElement); } else { @@ -271,7 +288,13 @@ public: QTimer translatableTextOccurrenceTimer; QList<QPointer<QQuickItem>> translatableTextOccurrences; - QPointer<QQuickView> currentQuickView; + QQuickItem *currentRootItem() + { + if (QQmlPreviewServiceImpl *service = QQmlDebugConnector::service<QQmlPreviewServiceImpl>()) + return service->currentRootItem(); + return nullptr; + } + private: CodeMarker codeMarker(const TranslationBindingInformation &information) { @@ -281,6 +304,7 @@ private: c.column = information.compiledBinding->valueLocation.column; return c; } + QString currentStateName; }; QQmlDebugTranslationServiceImpl::QQmlDebugTranslationServiceImpl(QObject *parent) @@ -300,14 +324,17 @@ QQmlDebugTranslationServiceImpl::QQmlDebugTranslationServiceImpl(QObject *parent d, &QQmlDebugTranslationServicePrivate::setState, Qt::QueuedConnection); - connect(this, &QQmlDebugTranslationServiceImpl::stateList, d, - &QQmlDebugTranslationServicePrivate::sendStateList, Qt::QueuedConnection); + connect(this, &QQmlDebugTranslationServiceImpl::stateList, + d, &QQmlDebugTranslationServicePrivate::sendStateList, + Qt::QueuedConnection); connect(d->proxyTranslator, &ProxyTranslator::languageChanged, - d, &QQmlDebugTranslationServicePrivate::sendLanguageChanged); + d, &QQmlDebugTranslationServicePrivate::sendLanguageChanged, + Qt::QueuedConnection); connect(this, &QQmlDebugTranslationServiceImpl::missingTranslations, - d, &QQmlDebugTranslationServicePrivate::sendMissingTranslations); + d, &QQmlDebugTranslationServicePrivate::sendMissingTranslations, + Qt::QueuedConnection); connect(this, &QQmlDebugTranslationServiceImpl::sendTranslatableTextOccurrences, d, &QQmlDebugTranslationServicePrivate::sendTranslatableTextOccurrences, @@ -372,9 +399,6 @@ void QQmlDebugTranslationServiceImpl::engineAboutToBeAdded(QJSEngine *engine) if (QQmlEngine *qmlEngine = qobject_cast<QQmlEngine *>(engine)) d->proxyTranslator->addEngine(qmlEngine); - if (engine->parent()) - d->currentQuickView = qobject_cast<QQuickView*>(engine->parent()); - emit attachedToEngine(engine); } diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp index b8453128d8..f73d6770c5 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp @@ -112,6 +112,11 @@ bool QQmlPreviewHandler::eventFilter(QObject *obj, QEvent *event) return QObject::eventFilter(obj, event); } +QQuickItem *QQmlPreviewHandler::currentRootItem() +{ + return m_currentRootItem; +} + void QQmlPreviewHandler::addEngine(QQmlEngine *qmlEngine) { m_engines.append(qmlEngine); @@ -288,6 +293,8 @@ void QQmlPreviewHandler::showObject(QObject *object) item->setParentItem(m_currentWindow->contentItem()); m_currentWindow->resize(item->size().toSize()); + // used by debug translation service to get the states + m_currentRootItem = item; } else { emit error(QLatin1String("Created object is neither a QWindow nor a QQuickItem.")); } diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.h b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.h index b7ee8fa09b..4e9a092a58 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.h +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.h @@ -74,6 +74,8 @@ public: explicit QQmlPreviewHandler(QObject *parent = nullptr); ~QQmlPreviewHandler(); + QQuickItem *currentRootItem(); + void addEngine(QQmlEngine *engine); void removeEngine(QQmlEngine *engine); @@ -116,6 +118,7 @@ private: QScopedPointer<QQuickItem> m_dummyItem; QList<QQmlEngine *> m_engines; + QPointer<QQuickItem> m_currentRootItem; QVector<QPointer<QObject>> m_createdObjects; QScopedPointer<QQmlComponent> m_component; QPointer<QQuickWindow> m_currentWindow; diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp index b6d6a7a220..0a74fc717a 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp @@ -183,4 +183,9 @@ void QQmlPreviewServiceImpl::forwardFps(const QQmlPreviewHandler::FpsInfo &frame emit messageToClient(name(), packet.data()); } +QQuickItem *QQmlPreviewServiceImpl::currentRootItem() +{ + return m_handler.currentRootItem(); +} + QT_END_NAMESPACE diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h index 56deb7f092..39d68bbc39 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h @@ -90,6 +90,8 @@ public: void forwardError(const QString &error); void forwardFps(const QQmlPreviewHandler::FpsInfo &frames); + QQuickItem *currentRootItem(); + signals: void error(const QString &file); void file(const QString &file, const QByteArray &contents); diff --git a/src/qml/debugger/qqmldebugtranslationprotocol_p.h b/src/qml/debugger/qqmldebugtranslationprotocol_p.h index 467b34d509..10010f6507 100644 --- a/src/qml/debugger/qqmldebugtranslationprotocol_p.h +++ b/src/qml/debugger/qqmldebugtranslationprotocol_p.h @@ -210,7 +210,7 @@ public: >> qmlElement.propertyName >> qmlElement.translationId >> qmlElement.translatedText >> qmlElement.fontFamily >> qmlElement.fontPointSize >> qmlElement.fontPixelSize >> qmlElement.fontStyleName >> qmlElement.horizontalAlignment - >> qmlElement.verticalAlignment; + >> qmlElement.verticalAlignment >> qmlElement.stateName; } friend QDataStream &operator<<(QDataStream &stream, const QmlElement &qmlElement) @@ -220,7 +220,7 @@ public: << qmlElement.translatedText << qmlElement.fontFamily << qmlElement.fontPointSize << qmlElement.fontPixelSize << qmlElement.fontStyleName << qmlElement.horizontalAlignment - << qmlElement.verticalAlignment; + << qmlElement.verticalAlignment << qmlElement.stateName; } CodeMarker codeMarker; @@ -232,10 +232,12 @@ public: QString elementId; QString elementType; qreal fontPointSize = 0.0; + QString stateName; int fontPixelSize = 0; int horizontalAlignment = 0; int verticalAlignment = 0; }; + class QmlState { public: |