File indexing completed on 2025-03-02 05:10:50

0001 // SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de>
0002 // SPDX-FileCopyrightText: 2014 Martin Klapetek <mklapetek@kde.org>
0003 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "timezonemodel.h"
0007 
0008 #include <KLocalizedString>
0009 
0010 #include <QDebug>
0011 #include <QStringMatcher>
0012 #include <QTimeZone>
0013 
0014 TimeZoneFilterProxy::TimeZoneFilterProxy(QObject *parent)
0015     : QSortFilterProxyModel(parent)
0016 {
0017     m_stringMatcher.setCaseSensitivity(Qt::CaseInsensitive);
0018 }
0019 
0020 bool TimeZoneFilterProxy::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0021 {
0022     if (!sourceModel() || m_filterString.isEmpty()) {
0023         return true;
0024     }
0025     const QString id = sourceModel()->index(source_row, 0, source_parent).data(TimeZoneModel::TimeZoneIdRole).toString();
0026     return m_stringMatcher.indexIn(id) != -1;
0027 }
0028 
0029 void TimeZoneFilterProxy::setFilterString(const QString &filterString)
0030 {
0031     m_filterString = filterString;
0032     m_stringMatcher.setPattern(filterString);
0033     Q_EMIT filterStringChanged();
0034     invalidateFilter();
0035 }
0036 
0037 TimeZoneModel::TimeZoneModel(QObject *parent)
0038     : QAbstractListModel(parent)
0039 {
0040     update();
0041 }
0042 
0043 TimeZoneModel::~TimeZoneModel()
0044 {
0045 }
0046 
0047 int TimeZoneModel::rowCount(const QModelIndex &parent) const
0048 {
0049     Q_UNUSED(parent);
0050     return m_data.count();
0051 }
0052 
0053 QVariant TimeZoneModel::data(const QModelIndex &index, int role) const
0054 {
0055     if (index.isValid()) {
0056         switch (role) {
0057         case TimeZoneIdRole:
0058             return m_data[index.row()];
0059         }
0060     }
0061 
0062     return QVariant();
0063 }
0064 
0065 void TimeZoneModel::update()
0066 {
0067     beginResetModel();
0068     m_data.clear();
0069 
0070     QTimeZone localZone = QTimeZone(QTimeZone::systemTimeZoneId());
0071     m_data.append(localZone.id());
0072 
0073     QStringList cities;
0074     QHash<QString, QTimeZone> zonesByCity;
0075 
0076     const QList<QByteArray> systemTimeZones = QTimeZone::availableTimeZoneIds();
0077 
0078     for (QByteArray arr : systemTimeZones) {
0079         m_data.append(arr);
0080     }
0081 
0082     endResetModel();
0083 }
0084 
0085 QHash<int, QByteArray> TimeZoneModel::roleNames() const
0086 {
0087     return {{TimeZoneIdRole, "timeZoneId"}};
0088 }