diff options
Diffstat (limited to 'src/qml/debugger/qqmldebugtranslationprotocol_p.h')
-rw-r--r-- | src/qml/debugger/qqmldebugtranslationprotocol_p.h | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/src/qml/debugger/qqmldebugtranslationprotocol_p.h b/src/qml/debugger/qqmldebugtranslationprotocol_p.h new file mode 100644 index 0000000000..d4f5b8e1f4 --- /dev/null +++ b/src/qml/debugger/qqmldebugtranslationprotocol_p.h @@ -0,0 +1,265 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +#ifndef QQMLDEBUGTRANSLATIONPROTOCOL_P_H +#define QQMLDEBUGTRANSLATIONPROTOCOL_P_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// +#include <QtCore/qdatastream.h> +#include <QtCore/qbuffer.h> +#include <QtCore/qurl.h> +#include <QtCore/qobjectdefs.h> +#include <QtCore/qmetaobject.h> +#include <QtCore/private/qglobal_p.h> +#include <tuple> + +QT_BEGIN_NAMESPACE + +namespace QQmlDebugTranslation { + +enum class Request { + ChangeLanguage = 1, + StateList, + ChangeState, + TranslationIssues, + TranslatableTextOccurrences, + WatchTextElides, + DisableWatchTextElides, + // following are obsolete, just provided for compilation compatibility + MissingTranslations +}; + +enum class Reply { + LanguageChanged = 101, + StateList, + StateChanged, + TranslationIssues, + TranslatableTextOccurrences, + // following are obsolete, just provided for compilation compatibility + MissingTranslations, + TextElided +}; + +inline QDataStream &operator<<(QDataStream &ds, Request r) +{ + return ds << int(r); +} + +inline QDataStream &operator>>(QDataStream &ds, Request &r) +{ + int i; + ds >> i; + r = Request(i); + return ds; +} + +inline QDataStream &operator<<(QDataStream &ds, Reply r) +{ + return ds << int(r); +} + +inline QDataStream &operator>>(QDataStream &ds, Reply &r) +{ + int i; + ds >> i; + r = Reply(i); + return ds; +} + +inline QByteArray createChangeLanguageRequest(QDataStream &packet, const QUrl &url, + const QString &locale) +{ + packet << Request::ChangeLanguage << url << locale; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +inline QByteArray createChangeStateRequest(QDataStream &packet, const QString &state) +{ + packet << Request::ChangeState << state; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +inline QByteArray createMissingTranslationsRequest(QDataStream &packet) +{ + packet << Request::MissingTranslations; + 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; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +inline QByteArray createStateListRequest(QDataStream &packet) +{ + packet << Request::StateList; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +inline QByteArray createWatchTextElidesRequest(QDataStream &packet) +{ + packet << Request::WatchTextElides; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +inline QByteArray createDisableWatchTextElidesRequest(QDataStream &packet) +{ + packet << Request::DisableWatchTextElides; + return qobject_cast<QBuffer *>(packet.device())->data(); +} + +class CodeMarker +{ +public: + friend QDataStream &operator>>(QDataStream &stream, CodeMarker &codeMarker) + { + return stream >> codeMarker.url + >> codeMarker.line + >> codeMarker.column; + } + + friend QDataStream &operator<<(QDataStream &stream, const CodeMarker &codeMarker) + { + return stream << codeMarker.url + << codeMarker.line + << codeMarker.column; + } + + friend bool operator<(const CodeMarker &first, const CodeMarker &second) + { + return std::tie(first.url, first.line, first.column) + < std::tie(second.url, second.line, second.column); + } + + friend bool operator==(const CodeMarker &first, const CodeMarker &second) + { + return first.line == second.line + && first.column == second.column + && first.url == second.url; + } + + QUrl url; + int line = -1; + int column = -1; +}; +class TranslationIssue +{ +public: + enum class Type{ + Missing, + Elided + }; + + friend QDataStream &operator>>(QDataStream &stream, TranslationIssue &issue) + { + int t; + stream >> issue.codeMarker + >> issue.language + >> t; + issue.type = Type(t); + return stream; + } + + friend QDataStream &operator<<(QDataStream &stream, const TranslationIssue &issue) + { + return stream << issue.codeMarker + << issue.language + << int(issue.type); + } + + friend bool operator==(const TranslationIssue &first, const TranslationIssue &second) + { + return first.type == second.type + && first.language == second.language + && first.codeMarker == second.codeMarker; + } + + QString toDebugString() const + { + QString debugString(QLatin1String( + "TranslationIssue(type=%1, line=%2, column=%3, url=%4, language=%5)")); + return debugString.arg(type == TranslationIssue::Type::Missing ? QLatin1String("Missing") + : QLatin1String("Elided"), + QString::number(codeMarker.line), QString::number(codeMarker.column), + codeMarker.url.toString(), language); + } + + QString language; + Type type = Type::Missing; + CodeMarker codeMarker; +}; +class QmlElement +{ +public: + QmlElement() = default; + + friend QDataStream &operator>>(QDataStream &stream, QmlElement &qmlElement) + { + return stream >> qmlElement.codeMarker >> qmlElement.elementId >> qmlElement.elementType + >> qmlElement.propertyName >> qmlElement.translationId >> qmlElement.translatedText + >> qmlElement.fontFamily >> qmlElement.fontPointSize >> qmlElement.fontPixelSize + >> qmlElement.fontStyleName >> qmlElement.horizontalAlignment + >> qmlElement.verticalAlignment >> qmlElement.stateName; + } + + friend QDataStream &operator<<(QDataStream &stream, const QmlElement &qmlElement) + { + return stream << qmlElement.codeMarker << qmlElement.elementId << qmlElement.elementType + << qmlElement.propertyName << qmlElement.translationId + << qmlElement.translatedText << qmlElement.fontFamily + << qmlElement.fontPointSize << qmlElement.fontPixelSize + << qmlElement.fontStyleName << qmlElement.horizontalAlignment + << qmlElement.verticalAlignment << qmlElement.stateName; + } + + CodeMarker codeMarker; + QString propertyName; + QString translationId; + QString translatedText; + QString fontFamily; + QString fontStyleName; + QString elementId; + QString elementType; + qreal fontPointSize = 0.0; + QString stateName; + int fontPixelSize = 0; + int horizontalAlignment = 0; + int verticalAlignment = 0; +}; + +class QmlState +{ +public: + QmlState() = default; + + friend QDataStream &operator>>(QDataStream &stream, QmlState &qmlState) + { + return stream >> qmlState.name; + } + + friend QDataStream &operator<<(QDataStream &stream, const QmlState &qmlState) + { + return stream << qmlState.name; + } + + QString name; +}; +} + +QT_END_NAMESPACE + +#endif // QQMLDEBUGTRANSLATIONPROTOCOL_P_H |