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
4#include "qquickvaluetypefromstringcheck_p.h"
5
6#include <private/qqmlstringconverters_p.h>
7
8QT_BEGIN_NAMESPACE
9
10using namespace Qt::StringLiterals;
11
12QQmlJSStructuredTypeError QQuickValueTypeFromStringCheck::check(const QString &typeName,
13 const QString &value)
14{
15 if (typeName == u"QVector2D") {
16 std::array<double, 2> parameters;
17 if (!QQmlStringConverters::isValidNumberString<2, u','>(s: value, numbers: &parameters))
18 return QQmlJSStructuredTypeError::withInvalidString();
19
20 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
21 enhancedString: u"({ x: %1, y: %2 })"_s.arg(a: parameters[0]).arg(a: parameters[1]));
22 return result;
23 } else if (typeName == u"QVector3D") {
24 std::array<double, 3> parameters;
25 if (!QQmlStringConverters::isValidNumberString<3, u',', u','>(s: value, numbers: &parameters))
26 return QQmlJSStructuredTypeError::withInvalidString();
27
28 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
29 enhancedString: u"({ x: %1, y: %2, z: %3 })"_s.arg(a: parameters[0])
30 .arg(a: parameters[1])
31 .arg(a: parameters[2]));
32 return result;
33 } else if (typeName == u"QVector4D") {
34 std::array<double, 4> parameters;
35 if (!QQmlStringConverters::isValidNumberString<4, u',', u',', u','>(s: value, numbers: &parameters))
36 return QQmlJSStructuredTypeError::withInvalidString();
37
38 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
39 enhancedString: u"({ x: %1, y: %2, z: %3, w: %4 })"_s.arg(a: parameters[0])
40 .arg(a: parameters[1])
41 .arg(a: parameters[2])
42 .arg(a: parameters[3]));
43 return result;
44 } else if (typeName == u"QQuaternion") {
45 std::array<double, 4> parameters;
46 if (!QQmlStringConverters::isValidNumberString<4, u',', u',', u','>(s: value, numbers: &parameters))
47 return QQmlJSStructuredTypeError::withInvalidString();
48
49 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(
50 enhancedString: u"({ scalar: %1, x: %2, y: %3, z: %4 })"_s.arg(a: parameters[0])
51 .arg(a: parameters[1])
52 .arg(a: parameters[2])
53 .arg(a: parameters[3]));
54 return result;
55 } else if (typeName == u"QMatrix4x4") {
56 std::array<double, 16> parameters;
57 if (!QQmlStringConverters::isValidNumberString<16, u',', u',', u',', u',', u',', u',', u',',
58 u',', u',', u',', u',', u',', u',', u',',
59 u','>(s: value, numbers: &parameters)) {
60 return QQmlJSStructuredTypeError::withInvalidString();
61 }
62
63 QString construction = u"({ "_s;
64 for (int i = 0; i < 4; ++i) {
65 for (int j = 0; j < 4; ++j) {
66 construction.append(
67 s: u"m%1%2: %3"_s.arg(a: i + 1).arg(a: j + 1).arg(a: parameters[i * 4 + j]));
68 if (!(i == 3 && j == 3))
69 construction.append(s: u", "_s);
70 }
71 }
72 construction.append(s: u" })"_s);
73
74 const auto result = QQmlJSStructuredTypeError::fromSuggestedString(enhancedString: construction);
75 return result;
76 }
77
78 return QQmlJSStructuredTypeError::withValidString();
79}
80
81QT_END_NAMESPACE
82

source code of qtdeclarative/src/plugins/qmllint/quick/qquickvaluetypefromstringcheck.cpp