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 #pragma once
0007 
0008 #include <QAbstractListModel>
0009 #include <QSortFilterProxyModel>
0010 #include <QTimeZone>
0011 
0012 class TimeZoneFilterProxy : public QSortFilterProxyModel
0013 {
0014     Q_OBJECT
0015     Q_PROPERTY(QString filterString WRITE setFilterString MEMBER m_filterString NOTIFY filterStringChanged)
0016 
0017 public:
0018     explicit TimeZoneFilterProxy(QObject *parent = nullptr);
0019     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0020 
0021     void setFilterString(const QString &filterString);
0022 
0023 Q_SIGNALS:
0024     void filterStringChanged();
0025 
0026 private:
0027     QString m_filterString;
0028     QStringMatcher m_stringMatcher;
0029 };
0030 
0031 class TimeZoneModel : public QAbstractListModel
0032 {
0033     Q_OBJECT
0034 
0035 public:
0036     explicit TimeZoneModel(QObject *parent = nullptr);
0037     ~TimeZoneModel() override;
0038 
0039     enum Roles { TimeZoneIdRole = Qt::UserRole + 1 };
0040 
0041     int rowCount(const QModelIndex &parent) const override;
0042     QVariant data(const QModelIndex &index, int role) const override;
0043 
0044     void update();
0045 
0046 protected:
0047     QHash<int, QByteArray> roleNames() const override;
0048 
0049 private:
0050     QList<QString> m_data;
0051 };