q->parseReply( reply->readAll() );
if ( isValid() ) {
+ qDebug() << label() << "becomeValid" << this;
emit( becomeValid() );
}
}
m_valid = false;
} else {
qDebug() << "(" << m_x << "," << m_y << ")";
+ qDebug() << "is now valid";
m_valid = true;
}
}
#include "locations.h"
#include <QDebug>
+#include <QHash>
+#include <QSettings>
+#include <QString>
+#include <QStringList>
+#include <QCoreApplication>
QHash<QString,Location *> Locations::locationHash;
+Locations Locations::singleton;
Locations::Locations()
{
+ QCoreApplication::setOrganizationName("ZouBa");
+ QCoreApplication::setOrganizationDomain("zouba.yi.org");
+ QCoreApplication::setOrganizationName("ZouBa");
+
+ restoreLocations();
}
Locations::~Locations()
{
}
+Locations *Locations::instance()
+{
+ return &singleton;
+}
+
bool Locations::addLocation( Location *location )
{
bool succeeded=false;
+ // if it's valid now, save the setting
+ if ( location->isValid() ) {
+ saveLocation( location );
+ }
+
if ( !locationHash.contains( location->label() ) ) {
qDebug() << "Adding location" << location->label();
locationHash[ location->label() ] = location;
succeeded = true;
+ } else {
+ qDebug() << "FAILED to add location" << location->label();
}
return succeeded;
}
+void Locations::restoreLocations()
+{
+ QSettings settings;
+
+ settings.beginGroup( "Locations" );
+ QStringList labels = settings.childGroups();
+
+ for( int i=0; i<labels.size(); ++i ) {
+ QString label = labels[i];
+ qDebug() << "restoring" << label;
+ settings.beginGroup( label );
+ QString x = settings.value( "x" ).toString();
+ QString y = settings.value( "y" ).toString();
+ settings.endGroup();
+
+ Location *location = new Location( x, y, label );
+ location->setAddress( settings.value( "address" ).toString() );
+
+ locationHash[ location->label() ] = location;
+ }
+
+ settings.endGroup();
+}
+
+void Locations::saveLocation( Location *location )
+{
+ qDebug() << "Saving location" << location->label();
+ QSettings settings;
+ settings.beginGroup( "Locations" );
+ settings.beginGroup( location->label() );
+ settings.setValue( "address", location->address() );
+ settings.setValue( "x", location->x() );
+ settings.setValue( "y", location->y() );
+ settings.endGroup();
+ settings.endGroup();
+}
+
+void Locations::saveLocation()
+{
+ Location *location = qobject_cast<Location*>(sender());
+
+ saveLocation( location );
+}
+
Location *Locations::location( const QString &label )
{
+ qDebug() << "requesting location" << label;
Location *retVal = 0;
if ( locationHash.contains( label ) ) {
+ qDebug() << "found location" << label;
retVal = locationHash[ label ];
+ } else {
+ qDebug() << "didn't find location" << label;
}
return retVal;
#include <QHash>
#include <QString>
+#include <QObject>
-class Locations
+class Locations: public QObject
{
+ Q_OBJECT
+
public:
Locations();
~Locations();
+ static Locations *instance();
bool addLocation( Location *location );
Location *location( const QString &label );
+public Q_SLOTS:
+ void saveLocation();
+
private:
+ void restoreLocations();
static QHash<QString,Location *> locationHash;
+ static Locations singleton;
+
+ void saveLocation( Location *location );
};
#endif // LOCATIONS_H
{
qInstallMsgHandler( messageHandler );
QApplication app(argc, argv);
+
QMainWindow *mainWindow = new QMainWindow;
Ui ui;
ui.setupUi(mainWindow);
void Ui::setAddress( const QString &label )
{
+ Locations *locations=Locations::instance();
+ Location *location=locations->location( label );
+
bool ok;
QString address = QInputDialog::getText(
centralWidget,
tr("Enter address for \""+QString(label).toLatin1()+"\""),
tr("Address"),
QLineEdit::Normal,
- "",
+ location->address(),
&ok
);
if ( ok ) {
qDebug() << "new address" << address;
- Locations locations;
- Location *location = locations.location( label );
+ Locations *locations=Locations::instance();
+ Location *location = locations->location( label );
qDebug() << "location" << location;
if ( location ) {
location->resolveAddress( address );
UiController::UiController( Ui *ui ) :
ui(ui)
{
- Location *homeLocation = new Location( "home" );
- Location *workLocation = new Location( "work" );
-
- Locations locations;
- locations.addLocation( homeLocation );
- locations.addLocation( workLocation );
+ Locations *locations = Locations::instance();
+ Location *homeLocation = locations->location( "home" );
+ Location *workLocation = locations->location( "work" );
connect(
homeLocation, SIGNAL( becomeValid() ),
this, SLOT( setHomeButtonValid() )
);
connect(
+ homeLocation, SIGNAL( becomeValid() ),
+ locations, SLOT( saveLocation() )
+ );
+
+ connect(
workLocation, SIGNAL( becomeValid() ),
this, SLOT( setWorkButtonValid() )
);
+ connect(
+ workLocation, SIGNAL( becomeValid() ),
+ locations, SLOT( saveLocation() )
+ );
homeLocation->resolveAddress( Ytv::Home );
workLocation->resolveAddress( Ytv::Work );
void UiController::setHomeButtonValid()
{
+ qDebug() << "setting home button valid";
setButtonValid( Ui::HomeButtonId );
}
route_p.cpp \
uicontroller.cpp \
location.cpp \
- locations.cpp \
location_p.cpp \
+ locations.cpp \
gpscontroller.cpp \
ui.cpp \
messagetable.cpp \
uicontroller.h \
location.h \
location_p.h \
+ locations.h \
ytv.h \
gpscontroller.h \
ui.h \