~ubuntu-clock-dev/ubuntu-clock-app/reboot-packaging

« back to all changes in this revision

Viewing changes to backend/modules/Timezone/timezonemodel.h

  • Committer: Nekhelesh Ramananthan
  • Date: 2014-07-15 12:50:49 UTC
  • mfrom: (20.1.24 10-world-clocks)
  • Revision ID: krnekhelesh@gmail.com-20140715125049-hhsn7hpe6tqrn3vz
- Added a page to select world cities. It provides search as you type using the new SDK SortFilterModel feature.
- Added a XML file with a list of popular cities.
- The local time at the cities are retrieved using QTimezone and QDateTime classes and used via a QAbstractListModel to automatically update the city list every second.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2014 Canonical Ltd
 
3
 *
 
4
 * This program is free software: you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License version 3 as
 
6
 * published by the Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful,
 
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
 * GNU General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU General Public License
 
14
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 */
 
16
 
 
17
#ifndef TIMEZONEMODEL_H
 
18
#define TIMEZONEMODEL_H
 
19
 
 
20
#include <QAbstractListModel>
 
21
#include <QTimer>
 
22
 
 
23
/*
 
24
  TimeZoneModel class based on QAbstractListModel to make it compatible with
 
25
  QML's ListView.
 
26
*/
 
27
class TimeZoneModel: public QAbstractListModel
 
28
{
 
29
    Q_OBJECT
 
30
 
 
31
    /*
 
32
      Property to determine the interval before updating the time (default is 0)
 
33
    */
 
34
    Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval NOTIFY updateIntervalChanged)
 
35
 
 
36
public:
 
37
    enum Roles {
 
38
        RoleCityName,
 
39
        RoleCountryName,
 
40
        RoleTimeZoneId,
 
41
        RoleTimeString
 
42
    };
 
43
 
 
44
    /*
 
45
     A simple constructor initialize variable values. Added the standard QObject
 
46
    *parent parameter to help Qt with "garbage collection.
 
47
    */
 
48
    TimeZoneModel(QObject *parent = 0);
 
49
 
 
50
    /*
 
51
     Let's override the pure virtual functions (the ones marked as
 
52
     "virtual" and have "= 0" in the end.
 
53
    */
 
54
    int rowCount(const QModelIndex &parent) const override;
 
55
    QVariant data(const QModelIndex &index, int role) const override;
 
56
 
 
57
    /*
 
58
     As QML can't really deal with the Roles enum above, we need a mapping
 
59
     between the enum and strings
 
60
    */
 
61
    QHash<int, QByteArray> roleNames() const override;
 
62
 
 
63
    // Function to read the update interval
 
64
    int updateInterval() const;
 
65
 
 
66
    // Function to set the update interval
 
67
    void setUpdateInterval(int updateInterval);
 
68
 
 
69
signals:
 
70
    // Signal to notify the updateInterval change to QML
 
71
    void updateIntervalChanged();
 
72
 
 
73
private slots:
 
74
    // Private slot that gets called by the updateTimer
 
75
    void update();
 
76
 
 
77
private:
 
78
    // Timer to update the model at a set interval
 
79
    QTimer m_updateTimer;
 
80
 
 
81
protected:
 
82
    // Create a simple container class to hold our information
 
83
    struct TimeZone{
 
84
        QString cityName;
 
85
        QString country;
 
86
        QString timeZoneId;
 
87
    };
 
88
 
 
89
    // Keep a list of TimeZone objects, holding all our timeZones.
 
90
    QList<TimeZone> m_timeZones;
 
91
};
 
92
 
 
93
#endif