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 }