aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates/qquickdayofweekmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates/qquickdayofweekmodel.cpp')
-rw-r--r--src/quicktemplates/qquickdayofweekmodel.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/quicktemplates/qquickdayofweekmodel.cpp b/src/quicktemplates/qquickdayofweekmodel.cpp
new file mode 100644
index 0000000000..477abbae3b
--- /dev/null
+++ b/src/quicktemplates/qquickdayofweekmodel.cpp
@@ -0,0 +1,90 @@
+// 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
+
+#include "qquickdayofweekmodel_p.h"
+
+#include <QtCore/private/qabstractitemmodel_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickDayOfWeekModelPrivate : public QAbstractItemModelPrivate
+{
+ Q_DECLARE_PUBLIC(QQuickDayOfWeekModel)
+
+public:
+ QLocale locale;
+};
+
+QQuickDayOfWeekModel::QQuickDayOfWeekModel(QObject *parent) :
+ QAbstractListModel(*(new QQuickDayOfWeekModelPrivate), parent)
+{
+}
+
+QLocale QQuickDayOfWeekModel::locale() const
+{
+ Q_D(const QQuickDayOfWeekModel);
+ return d->locale;
+}
+
+void QQuickDayOfWeekModel::setLocale(const QLocale &locale)
+{
+ Q_D(QQuickDayOfWeekModel);
+ if (d->locale != locale) {
+ d->locale = locale;
+ emit localeChanged();
+ emit dataChanged(index(0, 0), index(6, 0));
+ }
+}
+
+int QQuickDayOfWeekModel::dayAt(int index) const
+{
+ Q_D(const QQuickDayOfWeekModel);
+ int day = d->locale.firstDayOfWeek() + index;
+ if (day > 7)
+ day -= 7;
+ if (day == 7)
+ day = 0; // Qt::Sunday = 7, but Sunday is 0 in JS Date
+ return day;
+}
+
+QVariant QQuickDayOfWeekModel::data(const QModelIndex &index, int role) const
+{
+ Q_D(const QQuickDayOfWeekModel);
+ if (index.isValid() && index.row() < 7) {
+ int day = dayAt(index.row());
+ switch (role) {
+ case DayRole:
+ return day;
+ case LongNameRole:
+ return d->locale.standaloneDayName(day == 0 ? Qt::Sunday : day, QLocale::LongFormat);
+ case ShortNameRole:
+ return d->locale.standaloneDayName(day == 0 ? Qt::Sunday : day, QLocale::ShortFormat);
+ case NarrowNameRole:
+ return d->locale.standaloneDayName(day == 0 ? Qt::Sunday : day, QLocale::NarrowFormat);
+ default:
+ break;
+ }
+ }
+ return QVariant();
+}
+
+int QQuickDayOfWeekModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+ return 7;
+}
+
+QHash<int, QByteArray> QQuickDayOfWeekModel::roleNames() const
+{
+ QHash<int, QByteArray> roles;
+ roles[DayRole] = QByteArrayLiteral("day");
+ roles[LongNameRole] = QByteArrayLiteral("longName");
+ roles[ShortNameRole] = QByteArrayLiteral("shortName");
+ roles[NarrowNameRole] = QByteArrayLiteral("narrowName");
+ return roles;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickdayofweekmodel_p.cpp"