Added menu option to show/hide messages table.
[ptas] / zouba / 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 Locations Locations::singleton;
12
13 Locations::Locations()
14 {
15   QCoreApplication::setOrganizationName("ZouBa");
16   QCoreApplication::setOrganizationDomain("zouba.yi.org");
17   QCoreApplication::setOrganizationName("ZouBa");
18
19   restoreLocations();
20 }
21
22 Locations::~Locations()
23 {
24 }
25
26 Locations *Locations::instance()
27 {
28   return &singleton;
29 }
30
31 bool Locations::addLocation( Location *location )
32 {
33   bool succeeded=false;
34
35   // if it's valid now, save the setting
36   if ( location->isValid() ) {
37     saveLocation( location );
38   }
39
40   if ( !locationHash.contains( location->label() ) ) {
41     qDebug() << "Adding location" << location->label();
42     locationHash[ location->label() ] = location;
43     succeeded = true;
44   } else {
45     qDebug() << "FAILED to add location" << location->label();
46   }
47
48   return succeeded;
49 }
50
51 void Locations::restoreLocations()
52 {
53   QSettings settings;
54
55   settings.beginGroup( "Locations" );
56   QStringList labels = settings.childGroups();
57
58   for( int i=0; i<labels.size(); ++i ) {
59     QString label = labels[i];
60     settings.beginGroup( label );
61     QString x       = settings.value( "x" ).toString();
62     QString y       = settings.value( "y" ).toString();
63     QString address = settings.value( "address" ).toString();
64     settings.endGroup();
65
66     qDebug() << "restoring" << label;
67     Location *location = new Location( x, y, label );
68     location->setAddress( address );
69
70     locationHash[ label ] = location;
71   }
72
73   settings.endGroup();
74 }
75
76 void Locations::saveLocation( Location *location )
77 {
78   qDebug() << "Saving location" << location->label();
79   QSettings settings;
80   settings.beginGroup( "Locations" );
81   settings.beginGroup( location->label() );
82   settings.setValue( "address", location->address() );
83   settings.setValue( "x", location->x() );
84   settings.setValue( "y", location->y() );
85   settings.endGroup();
86   settings.endGroup();
87 }
88
89 void Locations::saveLocation()
90 {
91   Location *location = qobject_cast<Location*>(sender());
92
93   saveLocation( location );
94 }
95
96 Location *Locations::location( const QString &label )
97 {
98   qDebug() << "requesting location" << label;
99   Location *retVal = 0;
100
101   if ( locationHash.contains( label ) ) {
102     qDebug() << "found location" << label;
103     retVal = locationHash[ label ];
104   } else {
105     qDebug() << "didn't find location" << label;
106   }
107
108   return retVal;
109 }