diff options
Diffstat (limited to 'src/qml/qml/qqmllocale_p.h')
-rw-r--r-- | src/qml/qml/qqmllocale_p.h | 287 |
1 files changed, 162 insertions, 125 deletions
diff --git a/src/qml/qml/qqmllocale_p.h b/src/qml/qml/qqmllocale_p.h index 10e0dfcc38..5d26bf8a68 100644 --- a/src/qml/qml/qqmllocale_p.h +++ b/src/qml/qml/qqmllocale_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 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 QQMLLOCALE_H #define QQMLLOCALE_H @@ -55,7 +19,7 @@ #include <QtCore/qlocale.h> #include <QtCore/qobject.h> -#include <private/qqmlglobal_p.h> +#include <private/qtqmlglobal_p.h> #include <private/qv4object_p.h> QT_REQUIRE_CONFIG(qml_locale); @@ -91,35 +55,13 @@ private: }; -class Q_QML_PRIVATE_EXPORT QQmlLocale +namespace QQmlLocale { - Q_GADGET + Q_NAMESPACE_EXPORT(Q_QML_EXPORT) QML_NAMED_ELEMENT(Locale) - QML_UNCREATABLE("Locale cannot be instantiated. Use Qt.locale().") - QML_ADDED_IN_MINOR_VERSION(2) - -public: - ~QQmlLocale(); + QML_ADDED_IN_VERSION(2, 2) + QML_NAMESPACE_EXTENDED(QLocale) - enum MeasurementSystem { - MetricSystem = QLocale::MetricSystem, - ImperialSystem = QLocale::ImperialSystem, - ImperialUSSystem = QLocale::ImperialUSSystem, - ImperialUKSystem = QLocale::ImperialUKSystem - }; - Q_ENUM(MeasurementSystem) - enum FormatType { - LongFormat = QLocale::LongFormat, - ShortFormat = QLocale::ShortFormat, - NarrowFormat = QLocale::NarrowFormat - }; - Q_ENUM(FormatType) - enum CurrencySymbolFormat { - CurrencyIsoCode = QLocale::CurrencyIsoCode, - CurrencySymbol = QLocale::CurrencySymbol, - CurrencyDisplayName = QLocale::CurrencyDisplayName - }; - Q_ENUM(CurrencySymbolFormat) // Qt defines Sunday as 7, but JS Date assigns Sunday 0 enum DayOfWeek { Sunday = 0, @@ -130,79 +72,174 @@ public: Friday = Qt::Friday, Saturday = Qt::Saturday }; - Q_ENUM(DayOfWeek) + Q_ENUM_NS(DayOfWeek) - static QV4::ReturnedValue locale(QV4::ExecutionEngine *engine, const QString &localeName); - static QV4::ReturnedValue wrap(QV4::ExecutionEngine *engine, const QLocale &locale); + Q_QML_EXPORT QV4::ReturnedValue locale(QV4::ExecutionEngine *engine, const QString &localeName); + Q_QML_EXPORT void registerStringLocaleCompare(QV4::ExecutionEngine *engine); + Q_QML_EXPORT QV4::ReturnedValue method_localeCompare(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); +}; - static void registerStringLocaleCompare(QV4::ExecutionEngine *engine); +struct DayOfWeekList +{ + Q_GADGET + QML_ANONYMOUS + QML_FOREIGN(QList<QQmlLocale::DayOfWeek>) + QML_SEQUENTIAL_CONTAINER(QQmlLocale::DayOfWeek) +}; -private: - QQmlLocale(); +class QQmlLocaleValueType +{ + QLocale locale; + + Q_PROPERTY(QQmlLocale::DayOfWeek firstDayOfWeek READ firstDayOfWeek CONSTANT) + Q_PROPERTY(QLocale::MeasurementSystem measurementSystem READ measurementSystem CONSTANT) + Q_PROPERTY(Qt::LayoutDirection textDirection READ textDirection CONSTANT) + Q_PROPERTY(QList<QQmlLocale::DayOfWeek> weekDays READ weekDays CONSTANT) + Q_PROPERTY(QStringList uiLanguages READ uiLanguages CONSTANT) + + Q_PROPERTY(QString name READ name CONSTANT) + Q_PROPERTY(QString nativeLanguageName READ nativeLanguageName CONSTANT) +#if QT_DEPRECATED_SINCE(6, 6) + Q_PROPERTY(QString nativeCountryName READ nativeCountryName CONSTANT) +#endif + Q_PROPERTY(QString nativeTerritoryName READ nativeTerritoryName CONSTANT) + Q_PROPERTY(QString decimalPoint READ decimalPoint CONSTANT) + Q_PROPERTY(QString groupSeparator READ groupSeparator CONSTANT) + Q_PROPERTY(QString percent READ percent CONSTANT) + Q_PROPERTY(QString zeroDigit READ zeroDigit CONSTANT) + Q_PROPERTY(QString negativeSign READ negativeSign CONSTANT) + Q_PROPERTY(QString positiveSign READ positiveSign CONSTANT) + Q_PROPERTY(QString exponential READ exponential CONSTANT) + Q_PROPERTY(QString amText READ amText CONSTANT) + Q_PROPERTY(QString pmText READ pmText CONSTANT) + + Q_PROPERTY(QLocale::NumberOptions numberOptions READ numberOptions WRITE setNumberOptions) - static QV4::ReturnedValue method_localeCompare(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); -}; + Q_GADGET + QML_ANONYMOUS + QML_FOREIGN(QLocale) + QML_EXTENDED(QQmlLocaleValueType) + QML_CONSTRUCTIBLE_VALUE -namespace QV4 { +public: + Q_INVOKABLE QQmlLocaleValueType(const QString &name) : locale(name) {} -namespace Heap { + Q_INVOKABLE QString currencySymbol( + QLocale::CurrencySymbolFormat format = QLocale::CurrencySymbol) const + { + return locale.currencySymbol(format); + } -struct QQmlLocaleData : Object { - inline void init() { locale = new QLocale; } - void destroy() { - delete locale; - Object::destroy(); + Q_INVOKABLE QString dateTimeFormat(QLocale::FormatType format = QLocale::LongFormat) const + { + return locale.dateTimeFormat(format); } - QLocale *locale; -}; -} + Q_INVOKABLE QString timeFormat(QLocale::FormatType format = QLocale::LongFormat) const + { + return locale.timeFormat(format); + } -struct QQmlLocaleData : public QV4::Object -{ - V4_OBJECT2(QQmlLocaleData, Object) - V4_NEEDS_DESTROY - - static QLocale *getThisLocale(QV4::Scope &scope, const QV4::Value *thisObject) { - const QV4::Object *o = thisObject->as<Object>(); - const QQmlLocaleData *data = o ? o->as<QQmlLocaleData>() : nullptr; - if (!data) { - scope.engine->throwTypeError(); - return nullptr; - } - return data->d()->locale; + Q_INVOKABLE QString dateFormat(QLocale::FormatType format = QLocale::LongFormat) const + { + return locale.dateFormat(format); } - static QV4::ReturnedValue method_currencySymbol(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_dateTimeFormat(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_timeFormat(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_dateFormat(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_monthName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_standaloneMonthName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_dayName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_standaloneDayName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - - static QV4::ReturnedValue method_get_firstDayOfWeek(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_measurementSystem(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_textDirection(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_weekDays(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_uiLanguages(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - - static QV4::ReturnedValue method_get_name(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_nativeLanguageName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_nativeCountryName(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_decimalPoint(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_groupSeparator(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_percent(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_zeroDigit(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_negativeSign(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_positiveSign(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_exponential(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_amText(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); - static QV4::ReturnedValue method_get_pmText(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); -}; + Q_INVOKABLE QString monthName(int index, QLocale::FormatType format = QLocale::LongFormat) const + { + // +1 added to idx because JS is 0-based, whereas QLocale months begin at 1. + return locale.monthName(index + 1, format); + } + + Q_INVOKABLE QString standaloneMonthName( + int index, QLocale::FormatType format = QLocale::LongFormat) const + { + // +1 added to idx because JS is 0-based, whereas QLocale months begin at 1. + return locale.standaloneMonthName(index + 1, format); + } + + Q_INVOKABLE QString dayName(int index, QLocale::FormatType format = QLocale::LongFormat) const + { + // 0 -> 7 as Qt::Sunday is 7, but Sunday is 0 in JS Date + return locale.dayName(index == 0 ? 7 : index, format); + } + + Q_INVOKABLE QString standaloneDayName( + int index, QLocale::FormatType format = QLocale::LongFormat) const + { + // 0 -> 7 as Qt::Sunday is 7, but Sunday is 0 in JS Date + return locale.standaloneDayName(index == 0 ? 7 : index, format); + } + + Q_INVOKABLE void formattedDataSize(QQmlV4FunctionPtr args) const; + Q_INVOKABLE QString formattedDataSize( + double bytes, int precision = 2, + QLocale::DataSizeFormats format = QLocale::DataSizeIecFormat) const + { + return locale.formattedDataSize( + qint64(QV4::Value::toInteger(bytes)), precision, format); + } + + Q_INVOKABLE void toString(QQmlV4FunctionPtr args) const; -} + // As a special (undocumented) case, when called with no arguments, + // just forward to QDebug. This makes it consistent with other types + // in JS that can be converted to a string via toString(). + Q_INVOKABLE QString toString() const { return QDebug::toString(locale); } + + Q_INVOKABLE QString toString(int i) const { return locale.toString(i); } + Q_INVOKABLE QString toString(double f) const + { + return QJSNumberCoercion::isInteger(f) ? toString(int(f)) : locale.toString(f); + } + Q_INVOKABLE QString toString(double f, const QString &format, int precision = 6) const + { + // Lacking a char type, we have to use QString here + return format.length() < 1 + ? QString() + : locale.toString(f, format.at(0).toLatin1(), precision); + } + Q_INVOKABLE QString toString(const QDateTime &dateTime, const QString &format) const + { + return locale.toString(dateTime, format); + } + Q_INVOKABLE QString toString( + const QDateTime &dateTime, QLocale::FormatType format = QLocale::LongFormat) const + { + return locale.toString(dateTime, format); + } + + QQmlLocale::DayOfWeek firstDayOfWeek() const; + QLocale::MeasurementSystem measurementSystem() const { return locale.measurementSystem(); } + Qt::LayoutDirection textDirection() const { return locale.textDirection(); } + QList<QQmlLocale::DayOfWeek> weekDays() const; + QStringList uiLanguages() const { return locale.uiLanguages(); } + + QString name() const { return locale.name(); } + QString nativeLanguageName() const { return locale.nativeLanguageName(); } +#if QT_DEPRECATED_SINCE(6, 6) + QString nativeCountryName() const + { + QT_IGNORE_DEPRECATIONS(return locale.nativeCountryName();) + } +#endif + QString nativeTerritoryName() const { return locale.nativeTerritoryName(); } + QString decimalPoint() const { return locale.decimalPoint(); } + QString groupSeparator() const { return locale.groupSeparator(); } + QString percent() const { return locale.percent(); } + QString zeroDigit() const { return locale.zeroDigit(); } + QString negativeSign() const { return locale.negativeSign(); } + QString positiveSign() const { return locale.positiveSign(); } + QString exponential() const { return locale.exponential(); } + QString amText() const { return locale.amText(); } + QString pmText() const { return locale.pmText(); } + + QLocale::NumberOptions numberOptions() const { return locale.numberOptions(); } + void setNumberOptions(const QLocale::NumberOptions &numberOptions) + { + locale.setNumberOptions(numberOptions); + } +}; QT_END_NAMESPACE |