#include "gpscontroller.h"
#include "gpscontroller_p.h"
-#include "locations.h"
-
#include <QObject>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>
Location *location;
if ( q->useFakeLocation() ) {
- Locations *locations = Locations::instance();
- location = locations->location( q->fakeLocationLabel() );
+ location = q->fakeLocation();
} else {
location = q->liveLocation();
}
{
qDebug() << "using fake gps (" << fakeLocationLabel << ")";
- Locations *locations = Locations::instance();
- Location *fakeLocation = locations->location( fakeLocationLabel );
+ q->setFakeLocationLabel( fakeLocationLabel );
+ Location *fakeLocation = q->fakeLocation();
if ( fakeLocation == 0 ) {
qDebug() << "invalid fake location label; cannot use fake location";
} else {
q->stopGps();
q->setUseFakeLocation( true );
- q->setFakeLocationLabel( fakeLocationLabel );
emit locationChanged( fakeLocation );
}
}
#include "gpscontroller_p.h"
#include "location.h"
+#include "locations.h"
#include <QObject>
#include <QGeoPositionInfo>
return m_liveLocation;
}
+Location *GpsControllerPrivate::fakeLocation()
+{
+ Locations *locations = Locations::instance();
+ Location *location = locations->location( fakeLocationLabel() );
+ return location;
+}
+
QString GpsControllerPrivate::fakeLocationLabel()
{
return m_fakeLocationLabel;
virtual QGeoPositionInfoSource *gps();
virtual Location *liveLocation();
+ virtual Location *fakeLocation();
virtual QString fakeLocationLabel();
virtual bool useFakeLocation();
q( new LocationPrivate( x, y, label ) ),
manager( new QNetworkAccessManager(this) )
{
- qDebug() << "Location::Location(" << x << "," << y << "," << label <<")";
connect(
manager, SIGNAL( finished(QNetworkReply*) ),
this, SLOT( replyFinished(QNetworkReply*) )
q( new LocationPrivate( from.label() ) ),
manager(0)
{
- qDebug() << "Location::Location( const Location [" << from.label() << "] )";
q->setAddress( from.address() );
q->setX( from.x() );
q->setY( from.y() );
q( new LocationPrivate( label ) ),
manager( new QNetworkAccessManager(this) )
{
- qDebug() << "Location::Location( const QString &label=" << label << " )";
connect( manager, SIGNAL( finished(QNetworkReply*) ), this, SLOT( replyFinished(QNetworkReply*) ) );
}
Location &Location::operator=( const Location &from )
{
- qDebug() << "Location::Location( const Location &from )";
q = new LocationPrivate( from.label() );
q->setAddress( from.address() );
q->setX( from.x() );
void Location::resolveAddress( const QString &address )
{
- qDebug() << "resolving address";
- qDebug() << address;
+ qDebug() << "resolving address (" << address << ")";
q->setAddress( address );
q->setValid( false );
#include "messagetable.h"
#include "locations.h"
+#include "ytv.h"
#include <QMainWindow>
#include <QRadioButton>
Ui::Ui() :
centralWidget(0),
destinationButtons(0),
- routeTable(0),
+ routeStack(0),
usingFakeGps( false ),
messagesShown( false ),
fakeLocationLabel( "work" )
destinationButtons->addButton( workButton, WorkButtonId );
destinationButtons->setExclusive( true );
- routeTable = new QTableWidget( 1, 2 );
- QStringList columnHeaders;
- columnHeaders << "Time" << "Bus";
- routeTable->setHorizontalHeaderLabels( columnHeaders );
- routeTable->verticalHeader()->hide();
- routeTable->setSelectionMode( QAbstractItemView::SingleSelection );
+ routeStack = new QVBoxLayout();
+ for ( int i=0; i<Ytv::ShowFiveResults; ++i ) {
+ QRadioButton *button = new QRadioButton();
+ button->setObjectName( "routeButton"+i );
+ button->setEnabled( false );
+
+ routeStack->addWidget( button, i );
+ }
+ routeStack->addStretch();
QHBoxLayout *topLayout = new QHBoxLayout();
- topLayout->addWidget( routeTable );
+ topLayout->addLayout( routeStack );
+ topLayout->addStretch();
buttonLayout = new QGridLayout();
buttonLayout->addWidget( homeButton, 0, 0 );
QWidget *centralWidget;
QButtonGroup *destinationButtons;
- QTableWidget *routeTable;
+ QVBoxLayout *routeStack;
static MessageTable *messageTable;
QHBoxLayout *mainLayout;
QGridLayout *buttonLayout;
#include "locations.h"
#include <QObject>
-#include <QTableWidgetItem>
#include <QPushButton>
#include <QDebug>
#include <QButtonGroup>
+#include <QRadioButton>
+#include <QVBoxLayout>
UiController::UiController( Ui *ui ) :
ui(ui)
{
qDebug() << "displaying route";
- ui->routeTable->setRowCount( routeData.count() );
+ for ( int i=0; i<Ytv::ShowFiveResults; ++i ) {
+ QString label;
- for ( int i=0; i<routeData.count(); i++ ) {
- QTableWidgetItem *timeItem = new QTableWidgetItem( routeData.at(i).arrivalTime );
- ui->routeTable->setItem( i, 0, timeItem );
+ QWidget *widget = ui->routeStack->itemAt( i )->widget();
+ QRadioButton *button = qobject_cast<QRadioButton *>(widget);
- QTableWidgetItem *lineItem = new QTableWidgetItem( routeData.at(i).lineCode );
- ui->routeTable->setItem( i, 1, lineItem );
+ if ( i<routeData.count() ) {
+ RouteData thisRouteData = routeData.at(i);
+ label = ( QStringList()
+ << thisRouteData.arrivalTime
+ << thisRouteData.lineCode ).join( "/" );
+ button->setEnabled( true );
+ } else {
+ button->setEnabled( false );
+ }
+
+ button->setText( label );
}
+
}
#############################################################################
# Makefile for building: ut_gpscontroller
-# Generated by qmake (2.01a) (Qt 4.6.2) on: Mon Apr 19 11:20:53 2010
+# Generated by qmake (2.01a) (Qt 4.6.2) on: Tue Apr 20 10:09:10 2010
# Project: ut_gpscontroller.pro
# Template: app
# Command: /usr/bin/qmake -unix -o Makefile ut_gpscontroller.pro
SOURCES = ut_gpscontroller.cpp \
../../src/gpscontroller.cpp \
../../src/gpscontroller_p.cpp \
+ ../../src/locations.cpp \
../../src/location.cpp \
../../src/location_p.cpp moc_ut_gpscontroller.cpp \
moc_gpscontroller.cpp \
moc_gpscontroller_p.cpp \
+ moc_locations.cpp \
moc_location.cpp \
moc_location_p.cpp
OBJECTS = ut_gpscontroller.o \
gpscontroller.o \
gpscontroller_p.o \
+ locations.o \
location.o \
location_p.o \
moc_ut_gpscontroller.o \
moc_gpscontroller.o \
moc_gpscontroller_p.o \
+ moc_locations.o \
moc_location.o \
moc_location_p.o
DIST = /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/common/unix.conf \
dist:
@$(CHK_DIR_EXISTS) .tmp/ut_gpscontroller1.0.0 || $(MKDIR) .tmp/ut_gpscontroller1.0.0
- $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/ut_gpscontroller1.0.0/ && $(COPY_FILE) --parents ut_gpscontroller.h ../../src/gpscontroller.h ../../src/gpscontroller_p.h ../../src/location.h ../../src/location_p.h .tmp/ut_gpscontroller1.0.0/ && $(COPY_FILE) --parents ut_gpscontroller.cpp ../../src/gpscontroller.cpp ../../src/gpscontroller_p.cpp ../../src/location.cpp ../../src/location_p.cpp .tmp/ut_gpscontroller1.0.0/ && (cd `dirname .tmp/ut_gpscontroller1.0.0` && $(TAR) ut_gpscontroller1.0.0.tar ut_gpscontroller1.0.0 && $(COMPRESS) ut_gpscontroller1.0.0.tar) && $(MOVE) `dirname .tmp/ut_gpscontroller1.0.0`/ut_gpscontroller1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/ut_gpscontroller1.0.0
+ $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/ut_gpscontroller1.0.0/ && $(COPY_FILE) --parents ut_gpscontroller.h ../../src/gpscontroller.h ../../src/gpscontroller_p.h ../../src/locations.h ../../src/location.h ../../src/location_p.h .tmp/ut_gpscontroller1.0.0/ && $(COPY_FILE) --parents ut_gpscontroller.cpp ../../src/gpscontroller.cpp ../../src/gpscontroller_p.cpp ../../src/locations.cpp ../../src/location.cpp ../../src/location_p.cpp .tmp/ut_gpscontroller1.0.0/ && (cd `dirname .tmp/ut_gpscontroller1.0.0` && $(TAR) ut_gpscontroller1.0.0.tar ut_gpscontroller1.0.0 && $(COMPRESS) ut_gpscontroller1.0.0.tar) && $(MOVE) `dirname .tmp/ut_gpscontroller1.0.0`/ut_gpscontroller1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/ut_gpscontroller1.0.0
clean:compiler_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
-compiler_moc_header_make_all: moc_ut_gpscontroller.cpp moc_gpscontroller.cpp moc_gpscontroller_p.cpp moc_location.cpp moc_location_p.cpp
+compiler_moc_header_make_all: moc_ut_gpscontroller.cpp moc_gpscontroller.cpp moc_gpscontroller_p.cpp moc_locations.cpp moc_location.cpp moc_location_p.cpp
compiler_moc_header_clean:
- -$(DEL_FILE) moc_ut_gpscontroller.cpp moc_gpscontroller.cpp moc_gpscontroller_p.cpp moc_location.cpp moc_location_p.cpp
+ -$(DEL_FILE) moc_ut_gpscontroller.cpp moc_gpscontroller.cpp moc_gpscontroller_p.cpp moc_locations.cpp moc_location.cpp moc_location_p.cpp
moc_ut_gpscontroller.cpp: ut_gpscontroller.h
/usr/bin/moc $(DEFINES) $(INCPATH) ut_gpscontroller.h -o moc_ut_gpscontroller.cpp
moc_gpscontroller_p.cpp: ../../src/gpscontroller_p.h
/usr/bin/moc $(DEFINES) $(INCPATH) ../../src/gpscontroller_p.h -o moc_gpscontroller_p.cpp
+moc_locations.cpp: ../../src/location.h \
+ ../../src/location_p.h \
+ ../../src/locations.h
+ /usr/bin/moc $(DEFINES) $(INCPATH) ../../src/locations.h -o moc_locations.cpp
+
moc_location.cpp: ../../src/location_p.h \
../../src/location.h
/usr/bin/moc $(DEFINES) $(INCPATH) ../../src/location.h -o moc_location.cpp
gpscontroller_p.o: ../../src/gpscontroller_p.cpp ../../src/gpscontroller_p.h \
../../src/location.h \
- ../../src/location_p.h
+ ../../src/location_p.h \
+ ../../src/locations.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o gpscontroller_p.o ../../src/gpscontroller_p.cpp
+locations.o: ../../src/locations.cpp ../../src/locations.h \
+ ../../src/location.h \
+ ../../src/location_p.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o locations.o ../../src/locations.cpp
+
location.o: ../../src/location.cpp ../../src/location.h \
../../src/location_p.h \
../../src/ytv.h
moc_gpscontroller_p.o: moc_gpscontroller_p.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_gpscontroller_p.o moc_gpscontroller_p.cpp
+moc_locations.o: moc_locations.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_locations.o moc_locations.cpp
+
moc_location.o: moc_location.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_location.o moc_location.cpp
void stopGps();
void setGps( QGeoPositionInfoSource *gps );
- void setCurrentLocation( Location *location );
+ void setFakeLocationLabel( const QString &label );
void setUseFakeLocation( bool useFake );
void updateLocation();
QGeoPositionInfoSource *gps();
- Location *currentLocation();
+ Location *liveLocation();
+ Location *fakeLocation();
bool useFakeLocation();
bool m_gpsOn;
- Location *m_currentLocation;
+ Location *m_liveLocation;
+ Location *m_fakeLocation;
+ QString m_fakeLocationLabel;
bool m_useFakeLocation;
};
MyGpsControllerPrivate::MyGpsControllerPrivate() :
m_gpsOn(false),
- m_currentLocation(0),
+ m_liveLocation( new Location( "livegps" ) ),
+ m_fakeLocation( new Location( "fakegps" ) ),
+ m_fakeLocationLabel(),
m_useFakeLocation(false)
{
}
MyGpsControllerPrivate::~MyGpsControllerPrivate()
{
- delete m_currentLocation;
- m_currentLocation=0;
+ delete m_liveLocation;
+ m_liveLocation = 0;
+ delete m_fakeLocation;
+ m_fakeLocation = 0;
}
void MyGpsControllerPrivate::init()
Q_UNUSED( gps );
}
-Location *MyGpsControllerPrivate::currentLocation()
+Location *MyGpsControllerPrivate::liveLocation()
{
- return m_currentLocation;
+ return m_liveLocation;
}
-void MyGpsControllerPrivate::setCurrentLocation( Location *location )
+Location *MyGpsControllerPrivate::fakeLocation()
{
- m_currentLocation = location;
+ return m_fakeLocation;
+}
+
+void MyGpsControllerPrivate::setFakeLocationLabel( const QString &label )
+{
+ m_fakeLocationLabel = label;
+ m_fakeLocation->setLabel( label );
}
bool MyGpsControllerPrivate::useFakeLocation()
void MyGpsControllerPrivate::updateLocation()
{
- if ( m_currentLocation && m_currentLocation->label() == "livegps" ) {
- delete m_currentLocation;
- }
- m_currentLocation = new Location( "livegps" );
}
void Ut_GpsController::init()
QSignalSpy spy(m_subject, SIGNAL(locationChanged(Location*)));
// this should start the gps,
- // but since there's been no update from the GPS, there should be
- // no signal
+ // one signal to invalidate the previous display
+ // (which could be showing fake results, for example
m_subject->getGps();
QCOMPARE(m_subject_p->m_gpsOn, true);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.count(), 1);
}
void Ut_GpsController::testGetGpsWithGpsUpdates()
{
QSignalSpy spy(m_subject, SIGNAL(locationChanged(Location*)));
- m_subject_p->updateLocation(); // pretend GPS has given an update
-
// make test call
m_subject->getGps();
QCOMPARE(m_subject_p->m_gpsOn, true);
QCOMPARE(spy.count(), 1);
QList<QVariant> arguments = spy.takeFirst();
- QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_currentLocation);
- QVERIFY(m_subject_p->m_currentLocation != 0);
+ QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_liveLocation);
}
void Ut_GpsController::testFakeGps()
{
QSignalSpy spy(m_subject, SIGNAL(locationChanged(Location*)));
- m_subject_p->updateLocation(); // pretend GPS has given an update
- Location *gpsLocation = m_subject_p->m_currentLocation; // position from GPS
- Location *fakeLocation = new Location("fakegps");
+ Location *gpsLocation = m_subject_p->m_liveLocation; // position from GPS
// make test call
- m_subject->useFakeGps( fakeLocation ); // ownership -> m_subject
+ m_subject->useFakeGps( "fakegps" );
m_subject->getGps();
// check effect
// both args should be the fake gps position supplied to useFakeGps()
arguments = spy.takeFirst();
- QCOMPARE( arguments.at(0).value<Location*>(), m_subject_p->m_currentLocation );
+ QCOMPARE( arguments.at(0).value<Location*>(), m_subject_p->m_fakeLocation );
QCOMPARE( arguments.at(0).value<Location*>()->label(), QString( "fakegps" ) );
arguments = spy.takeFirst();
- QCOMPARE( arguments.at(0).value<Location*>(), m_subject_p->m_currentLocation );
+ QCOMPARE( arguments.at(0).value<Location*>(), m_subject_p->m_fakeLocation );
QCOMPARE( arguments.at(0).value<Location*>()->label(), QString( "fakegps" ) );
- QCOMPARE( m_subject_p->m_currentLocation, fakeLocation );
-
- // should not be the gpsLocation or zero
- QVERIFY(m_subject_p->m_currentLocation != gpsLocation);
- QVERIFY(m_subject_p->m_currentLocation != 0);
// switch back to GPS
m_subject->useLiveGps();
// gps should be on
QCOMPARE(m_subject_p->m_gpsOn, true);
- QVERIFY2(spy.count()==1, "should get a locationChanged signal from getGps" );
+ QVERIFY2(spy.count()==2, "should get two locationChanged signals" );
arguments = spy.takeFirst();
- QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_currentLocation);
+ QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_liveLocation);
+ QCOMPARE( arguments.at(0).value<Location*>()->label(), QString( "livegps" ) );
+ arguments = spy.takeFirst();
+ QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_liveLocation);
QCOMPARE( arguments.at(0).value<Location*>()->label(), QString( "livegps" ) );
- QVERIFY(m_subject_p->m_currentLocation != fakeLocation);
-
- // fake a GPS update
- m_subject_p->updateLocation(); // pretend GPS has given an update
// get GPS location
m_subject->getGps();
// check effect
QCOMPARE(spy.count(), 1);
arguments = spy.takeFirst();
- QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_currentLocation);
+ QCOMPARE(arguments.at(0).value<Location*>(), m_subject_p->m_liveLocation);
QCOMPARE( arguments.at(0).value<Location*>()->label(), QString( "livegps" ) );
- QVERIFY(m_subject_p->m_currentLocation != 0);
}
void Ut_GpsController::testLiveToFakeToLive()
{
m_subject_p->updateLocation(); // pretend GPS has given an update
- Location *fakeLocation = new Location();
- m_subject->useFakeGps( fakeLocation ); // ownership -> m_subject
+ m_subject->useFakeGps( "fakegps" );
m_subject->getGps();
// switch back to live GPS
m_subject->useLiveGps();
m_subject->getGps();
- // fake a GPS update
- m_subject_p->updateLocation(); // pretend GPS has given an update
-
- // get GPS location
- m_subject->getGps();
-
- m_subject->useFakeGps( fakeLocation ); // ownership -> m_subject
- m_subject->getGps();
-
- // fake a GPS update
- m_subject_p->updateLocation(); // pretend GPS has given an update
-
- // get GPS location
+ m_subject->useFakeGps( "fakegps" );
m_subject->getGps();
}
ut_gpscontroller.cpp \
$$ZOUBASRC/gpscontroller.cpp \
$$ZOUBASRC/gpscontroller_p.cpp \
+ $$ZOUBASRC/locations.cpp \
$$ZOUBASRC/location.cpp \
$$ZOUBASRC/location_p.cpp \
ut_gpscontroller.h \
$$ZOUBASRC/gpscontroller.h \
$$ZOUBASRC/gpscontroller_p.h \
+ $$ZOUBASRC/locations.h \
$$ZOUBASRC/location.h \
$$ZOUBASRC/location_p.h \