File indexing completed on 2024-06-23 05:45:40

0001 /*
0002  * Copyright 2020 Han Young <hanyoung@protonmail.com>
0003  * Copyright 2020-2021 Devin Lin <devin@kde.org>
0004  * Copyright 2019 Nick Reitemeyer <nick.reitemeyer@web.de>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #pragma once
0010 
0011 #include "kclockformat.h"
0012 
0013 #include <QAbstractListModel>
0014 #include <QSet>
0015 #include <QSortFilterProxyModel>
0016 #include <QTimeZone>
0017 #include <QTimer>
0018 
0019 class AddLocationModel : public QAbstractListModel
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     static AddLocationModel *instance();
0025 
0026     explicit AddLocationModel(QObject *parent = nullptr);
0027 
0028     enum Roles {
0029         CityRole = Qt::DisplayRole,
0030         CountryRole = Qt::DisplayRole + 1,
0031         TimeZoneRole = Qt::UserRole + 0,
0032         CurrentTimeRole = Qt::UserRole + 1,
0033         AddedRole = Qt::UserRole + 2,
0034         IdRole
0035     };
0036 
0037     int rowCount(const QModelIndex &parent) const override;
0038     QVariant data(const QModelIndex &index, int role) const override;
0039     Qt::ItemFlags flags(const QModelIndex &index) const override;
0040     QHash<int, QByteArray> roleNames() const override;
0041 
0042 public Q_SLOTS:
0043     void load();
0044 
0045 private:
0046     QList<QTimeZone> m_list;
0047     QSet<QString> m_addedLocations;
0048 };
0049 
0050 class AddLocationSearchModel : public QSortFilterProxyModel
0051 {
0052     Q_OBJECT
0053 
0054 public:
0055     static AddLocationSearchModel *instance();
0056 
0057     explicit AddLocationSearchModel(QObject *parent = nullptr);
0058 
0059     Q_INVOKABLE void addLocation(int index);
0060 
0061 protected:
0062     bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
0063 };