Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickvaluetypefromstringcheck.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant reason:default
4
6
7#include <private/qqmlstringconverters_p.h>
8
10
11using namespace Qt::StringLiterals;
12
13QQmlJSStructuredTypeError QQuickValueTypeFromStringCheck::check(const QString &typeName,
14 const QString &value)
15{
16 if (typeName == u"QVector2D") {
17 std::array<double, 2> parameters;
18 if (!QQmlStringConverters::isValidNumberString<2, u','>(value, &parameters))
19 return QQmlJSStructuredTypeError::withInvalidString();
20
21 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
22 u"({ x: %1, y: %2 })"_s.arg(parameters[0]).arg(parameters[1]));
23 return result;
24 } else if (typeName == u"QVector3D") {
25 std::array<double, 3> parameters;
26 if (!QQmlStringConverters::isValidNumberString<3, u',', u','>(value, &parameters))
27 return QQmlJSStructuredTypeError::withInvalidString();
28
29 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
30 u"({ x: %1, y: %2, z: %3 })"_s.arg(parameters[0])
31 .arg(parameters[1])
32 .arg(parameters[2]));
33 return result;
34 } else if (typeName == u"QVector4D") {
35 std::array<double, 4> parameters;
36 if (!QQmlStringConverters::isValidNumberString<4, u',', u',', u','>(value, &parameters))
37 return QQmlJSStructuredTypeError::withInvalidString();
38
39 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
40 u"({ x: %1, y: %2, z: %3, w: %4 })"_s.arg(parameters[0])
41 .arg(parameters[1])
42 .arg(parameters[2])
43 .arg(parameters[3]));
44 return result;
45 } else if (typeName == u"QQuaternion") {
46 std::array<double, 4> parameters;
47 if (!QQmlStringConverters::isValidNumberString<4, u',', u',', u','>(value, &parameters))
48 return QQmlJSStructuredTypeError::withInvalidString();
49
50 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
51 u"({ scalar: %1, x: %2, y: %3, z: %4 })"_s.arg(parameters[0])
52 .arg(parameters[1])
53 .arg(parameters[2])
54 .arg(parameters[3]));
55 return result;
56 } else if (typeName == u"QMatrix4x4") {
57 std::array<double, 16> parameters;
58 if (!QQmlStringConverters::isValidNumberString<16, u',', u',', u',', u',', u',', u',', u',',
59 u',', u',', u',', u',', u',', u',', u',',
60 u','>(value, &parameters)) {
61 return QQmlJSStructuredTypeError::withInvalidString();
62 }
63
64 QString construction = u"({ "_s;
65 for (int i = 0; i < 4; ++i) {
66 for (int j = 0; j < 4; ++j) {
67 construction.append(
68 u"m%1%2: %3"_s.arg(i + 1).arg(j + 1).arg(parameters[i * 4 + j]));
69 if (!(i == 3 && j == 3))
70 construction.append(u", "_s);
71 }
72 }
73 construction.append(u" })"_s);
74
75 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(construction);
76 return result;
77 }
78
79 return QQmlJSStructuredTypeError::withValidString();
80}
81
82QT_END_NAMESPACE