Incorporated changes from bus project.
[ptas] / src / locations.cpp
1 #include "locations.h"
2
3 #include <QDebug>
4 #include <QHash>
5 #include <QSettings>
6 #include <QString>
7 #include <QStringList>
8 #include <QCoreApplication>
9
10 QHash<QString,Location *> Locations::locationHash;
11 bool Locations::initialised = false;
12
13 Locations::Locations()
14 {
15     if (!initialised) {
16         qDebug() << "Initialising locations";
17         QCoreApplication::setOrganizationDomain("zouba.maemo.org");
18         QCoreApplication::setOrganizationName("ZouBa");
19         QCoreApplication::setApplicationName("ZouBa");
20
21         restoreLocations();
22         initialised = true;
23     }
24 }
25
26 Locations::~Locations()
27 {
28 }
29
30 bool Locations::addLocation(Location *location)
31 {
32     bool succeeded=false;
33
34     // if it's valid now, save the setting
35     if (location->isValid()) {
36         saveLocation(location);
37     } else {
38         qDebug() << "Location not valid, so not saving";
39     }
40
41     if (!locationHash.contains(location->label())) {
42         qDebug() << "Adding location" << location->label();
43         locationHash[ location->label() ] = location;
44         succeeded = true;
45     } else {
46         qDebug() << "FAILED to add location" << location->label();
47     }
48
49     return succeeded;
50 }
51
52 void Locations::restoreLocations()
53 {
54     QSettings settings;
55
56     settings.beginGroup("Locations");
57     QStringList labels = settings.childGroups();
58
59     for(int i=0; i<labels.size(); ++i) {
60         QString label = labels[i];
61         settings.beginGroup(label);
62         QString longitude = settings.value("longitude").toString();
63         QString latitude  = settings.value("latitude").toString();
64         QString address   = settings.value("address").toString();
65         settings.endGroup();
66
67         qDebug() << "restoring" << label;
68         Location *location = new Location(longitude, latitude , label);
69         location->setAddress(address);
70
71         locationHash[ label ] = location;
72     }
73
74     settings.endGroup();
75 }
76
77 void Locations::saveLocation(Location *location)
78 {
79     qDebug() << "Saving location" << location->label();
80     QSettings settings;
81     settings.beginGroup("Locations");
82     settings.beginGroup(location->label());
83     settings.setValue("address", location->address());
84     settings.setValue("longitude", location->longitude());
85     settings.setValue("latitude", location->latitude());
86     settings.endGroup();
87     settings.endGroup();
88 }
89
90 void Locations::saveLocation()
91 {
92     qDebug() << "Saving location (slot)";
93     Location *location = qobject_cast<Location*>(sender());
94
95     saveLocation(location);
96 }
97
98 Location *Locations::location(const QString &label)
99 {
100     qDebug() << "requesting location" << label;
101     Location *retVal = 0;
102
103     if (locationHash.contains(label)) {
104         qDebug() << "found location" << label;
105         retVal = locationHash[ label ];
106     } else {
107         qDebug() << "didn't find location" << label;
108     }
109
110     return retVal;
111 }