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 };