1) new status messages
authorMax Waterman <davidmaxwaterman+maemogit@fastmail.co.uk>
Sat, 20 Mar 2010 21:29:26 +0000 (23:29 +0200)
committerMax Waterman <davidmaxwaterman+maemogit@fastmail.co.uk>
Sat, 20 Mar 2010 21:30:43 +0000 (23:30 +0200)
2) new layout

14 files changed:
zouba/gpscontroller.cpp
zouba/location.cpp
zouba/location_p.cpp
zouba/main.cpp
zouba/messagehandler.cpp [new file with mode: 0644]
zouba/messagehandler.h [new file with mode: 0644]
zouba/messagetable.cpp [new file with mode: 0644]
zouba/messagetable.h [new file with mode: 0644]
zouba/route.cpp
zouba/route_p.cpp
zouba/ui.cpp
zouba/ui.h
zouba/uicontroller.cpp
zouba/zouba.pro

index 49335c5..b031b61 100644 (file)
@@ -29,15 +29,20 @@ GpsController::~GpsController()
 
 void GpsController::updateLocation( QGeoPositionInfo positionInfo )
 {
+  qDebug() << "new GPS position";
+
   Location newLocation( positionInfo );
 
   if ( updatesEnabled ) {
+    qDebug() << "from location changed";
     emit locationChanged( newLocation );
     updatesEnabled = false;
+    m_location->setUpdateInterval( 1*60*1000 );
   }
 }
 
 void GpsController::startGps()
 {
   updatesEnabled = true;
+  m_location->setUpdateInterval( 1 );
 }
index 349777d..80a665c 100644 (file)
@@ -100,6 +100,9 @@ Location &Location::operator=( const Location &from )
 
 void Location::resolveAddress( QString address )
 {
+  qDebug() << "resolving address";
+  qDebug() << address;
+
   QUrl fullUrl( Ytv::Url );
 
   fullUrl.addEncodedQueryItem( "key", address.toAscii().toPercentEncoding() );
@@ -107,10 +110,12 @@ void Location::resolveAddress( QString address )
   fullUrl.addQueryItem( "pass", Ytv::Password );
 
   manager->get( QNetworkRequest( fullUrl ) );
+  qDebug() << "waiting for reply from Ytv";
 }
 
 void Location::replyFinished( QNetworkReply * reply )
 {
+  qDebug() << "address resolved";
   q->parseReply( reply->readAll() );
 
   if ( isValid() ) {
index 5e74595..79fb912 100644 (file)
@@ -25,6 +25,7 @@ LocationPrivate::~LocationPrivate()
 
 void LocationPrivate::parseReply( const QByteArray &reply )
 {
+  qDebug() << "parsing";
   QXmlStreamReader xml( reply );
 
   while ( !xml.atEnd() ) {
@@ -45,6 +46,7 @@ void LocationPrivate::parseReply( const QByteArray &reply )
     qDebug() << "xml error";
     m_valid = false;
   } else {
+    qDebug() << "(" << m_x << "," << m_y << ")";
     m_valid = true;
   }
 }
index 97ef478..46632e2 100644 (file)
@@ -4,8 +4,9 @@
 #include "uicontroller.h"
 #include "location.h"
 #include "gpscontroller.h"
-
 #include "ytv.h"
+#include "messagehandler.h"
+#include "messagetable.h"
 
 #include <QDebug>
 #include <QObject>
 
 int main(int argc, char *argv[] )
 {
+  qInstallMsgHandler( messageHandler );
   QApplication app(argc, argv);
   QMainWindow *mainWindow = new QMainWindow;
   Ui ui;
   ui.setupUi(mainWindow);
 
+  qDebug() << "1";
+  qDebug() << "2";
+  qDebug() << "3";
+
   UiController  *uiController  = new UiController( &ui );
   Route         *route         = new Route();
   GpsController *gpsController = new GpsController();
diff --git a/zouba/messagehandler.cpp b/zouba/messagehandler.cpp
new file mode 100644 (file)
index 0000000..7c03d9a
--- /dev/null
@@ -0,0 +1,18 @@
+#include "messagehandler.h"
+
+#include "messagetable.h"
+#include <QString>
+#include <QtGlobal>
+#include <QTime>
+
+void messageHandler( QtMsgType type, const char *msg )
+{
+  Q_UNUSED( type );
+
+  if ( Ui::messageTable != 0 ) {
+    Ui::messageTable->displayMessage( 
+        QTime::currentTime().toString()+" "+QString::fromLatin1( msg )
+        );
+  }
+}
+
diff --git a/zouba/messagehandler.h b/zouba/messagehandler.h
new file mode 100644 (file)
index 0000000..1ab9263
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef MESSAGEHANDLER_H
+#define MESSAGEHANDLER_H
+
+#include "ui.h"
+
+#include <QtGlobal>
+
+void messageHandler( QtMsgType type, const char *msg );
+
+#endif //MESSAGEHANDLER_H
diff --git a/zouba/messagetable.cpp b/zouba/messagetable.cpp
new file mode 100644 (file)
index 0000000..d068bb9
--- /dev/null
@@ -0,0 +1,50 @@
+#include "messagetable.h"
+
+#include <QHeaderView>
+#include <QString>
+#include <QStringList>
+#include <QDebug>
+
+MessageTable::MessageTable( QWidget *parent ) :
+  QTableWidget( NumberOfRows, OneColumn, parent )
+{
+  setHorizontalHeaderLabels( QStringList() << "Messages" );
+  verticalHeader()->hide();
+  setMinimumSize( 250,0 );
+
+  for ( int row=0; row<NumberOfRows; ++row ) {
+    QTableWidgetItem *newRow = new QTableWidgetItem();
+    setItem( row,0, newRow );
+  }
+}
+QSize MessageTable::minimumSizeHint() const
+{
+       QSize size( QTableWidget::sizeHint() );
+
+       size.setWidth( 250 );
+       return size;
+}
+
+QSize MessageTable::sizeHint() const
+{
+       return minimumSizeHint();
+}
+
+MessageTable::~MessageTable()
+{
+}
+
+void MessageTable::displayMessage( const QString &message )
+{
+  // scroll items down from bottom to top
+  for ( int row=NumberOfRows-1; row>0; --row ) {
+    QTableWidgetItem *fromItem = item(0,row-1);
+    QTableWidgetItem *toItem = item(0,row);
+    QString text=fromItem->text();
+    toItem->setText( text );
+  }
+
+  itemAt(0,0)->setText( message );
+
+  resizeColumnsToContents();
+}
diff --git a/zouba/messagetable.h b/zouba/messagetable.h
new file mode 100644 (file)
index 0000000..ea97a20
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef MESSAGETABLE_H
+#define MESSAGETABLE_H
+
+#include <QWidget>
+#include <QTableWidget>
+
+class MessageTable : public QTableWidget
+{
+  Q_OBJECT
+
+  enum {
+    NumberOfRows=5,
+    OneColumn=1
+  };
+
+public:
+  MessageTable( QWidget *parent );
+  ~MessageTable();
+
+  void displayMessage( const QString &message );
+
+  QSize minimumSizeHint() const;
+  QSize sizeHint() const;
+};
+#endif //MESSAGETABLE_H
index d38ac0e..1c3beda 100644 (file)
@@ -30,6 +30,8 @@ Route::~Route()
 
 void Route::getRoute()
 {
+  qDebug() << "getting route from Ytv";
+
   QUrl fullUrl( Ytv::Url );
 
   QStringList a;
@@ -45,10 +47,12 @@ void Route::getRoute()
   fullUrl.addQueryItem( "pass", Ytv::Password );
 
   manager->get( QNetworkRequest( fullUrl ) );
+  qDebug() << "waiting for reply from Ytv";
 }
 
 void Route::replyFinished( QNetworkReply * reply )
 {
+  qDebug() << "have reply from Ytv";
   QList<RouteData> routeData = q->parseReply( reply->readAll() );
 
   emit( routeReady( routeData ) );
@@ -56,6 +60,8 @@ void Route::replyFinished( QNetworkReply * reply )
 
 void Route::setFromLocation( const Location &location )
 {
+  qDebug() << "setting new From location";
+
   if ( location.isValid() ) {
     q->setFromLocation( location );
     if ( q->toValid() ) {
@@ -81,17 +87,28 @@ const Location &Route::fromLocation()
 
 void Route::setToLocation( const Location &location )
 {
+  qDebug() << "setting new To location";
+
   if ( location.isValid() ) {
+    qDebug() << "To is valid";
     q->setToLocation( location );
     if ( q->fromValid() ) {
+      qDebug() << "From is also valid";
       getRoute();
+    } else {
+      qDebug() << "From not valid - waiting";
     }
   } else {
+    qDebug() << "To is not valid";
+    qDebug() << "getting To from signal sender";
     Location *locationPtr = qobject_cast<Location*>(sender());
     if ( locationPtr ) {
       q->setToLocation( *locationPtr );
       if ( q->fromValid() ) {
+        qDebug() << "From is also valid";
         getRoute();
+      } else {
+        qDebug() << "From not valid - waiting";
       }
     } else {
       qDebug() << "locationPtr is zero; cast failed";
index 19105a7..f041392 100644 (file)
@@ -20,6 +20,8 @@ RoutePrivate::~RoutePrivate()
 
 QList<RouteData> RoutePrivate::parseReply( const QByteArray &reply )
 {
+  qDebug() << "parsing route";
+
   QList<RouteData> retVal;
   RouteData routeData;
 
@@ -73,6 +75,10 @@ QList<RouteData> RoutePrivate::parseReply( const QByteArray &reply )
     qDebug() << "xml error";
   }
 
+  if ( retVal.isEmpty() ) {
+    qDebug() << "no routes found";
+  }
+
   return retVal;
 }
 
index e0ceae0..16d4616 100644 (file)
@@ -1,5 +1,7 @@
 #include "ui.h"
 
+#include "messagetable.h"
+
 #include <QMainWindow>
 #include <QPushButton>
 #include <QTableWidget>
@@ -7,6 +9,13 @@
 #include <QRect>
 #include <QButtonGroup>
 #include <QHeaderView>
+#include <QObject>
+#include <QMenuBar>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QSizePolicy>
+
+MessageTable *Ui::messageTable = 0;
 
 Ui::Ui() :
   centralWidget(0),
@@ -22,31 +31,67 @@ Ui::~Ui()
 void Ui::setupUi( QMainWindow *mainWindow )
 {
   mainWindow->resize(800,480);
+  QMenu *menu = mainWindow->menuBar()->addMenu("Settings");
+
+  QAction *setHomeAddressAction = new QAction("Set home address", this);
+  QAction *setWorkAddressAction = new QAction("Set work address", this);
+  menu->addAction(setHomeAddressAction);
+  menu->addAction(setWorkAddressAction);
+
+  connect(
+      setHomeAddressAction, SIGNAL(triggered()),
+      this, SLOT(setHomeAddress())
+      );
+  connect(
+      setWorkAddressAction, SIGNAL(triggered()),
+      this, SLOT(setWorkAddress())
+      );
 
   centralWidget = new QWidget( mainWindow );
   mainWindow->setCentralWidget(centralWidget);
 
-  QPushButton *homeButton = new QPushButton( centralWidget );
+  QPushButton *homeButton = new QPushButton();
   homeButton->setObjectName( QString::fromUtf8("homeButton") );
   homeButton->setText( "HOME" );
-  homeButton->setGeometry( QRect( 0, 0, ButtonWidth, ButtonHeight ) );
   homeButton->setEnabled(false);
+  homeButton->setFixedSize( QSize( ButtonWidth, ButtonHeight ) );
 
-  QPushButton *workButton = new QPushButton( centralWidget );
+  QPushButton *workButton = new QPushButton();
   workButton->setObjectName( QString::fromUtf8("workButton") );
   workButton->setText( "WORK" );
-  workButton->setGeometry( QRect( 0, ButtonHeight, ButtonWidth, ButtonHeight ) );
   workButton->setEnabled(false);
 
-  destinationButtons = new QButtonGroup( centralWidget );
+  destinationButtons = new QButtonGroup();
   destinationButtons->addButton( homeButton, HomeButtonId );
   destinationButtons->addButton( workButton, WorkButtonId );
 
-  table = new QTableWidget( 1, 2, centralWidget );
-  table->setObjectName( QString::fromUtf8("table") );
-  table->setGeometry( QRect( ButtonWidth+1, 0, ScreenWidth-ButtonWidth, ScreenHeight ) );
+  buttonLayout = new QVBoxLayout();
+  buttonLayout->addWidget( homeButton );
+  buttonLayout->addWidget( workButton );
+  buttonLayout->addStretch();
+
+  table = new QTableWidget( 1, 2 );
   QStringList columnHeaders;
   columnHeaders << "Time" << "Bus";
   table->setHorizontalHeaderLabels( columnHeaders );
   table->verticalHeader()->hide();
+
+  QHBoxLayout *topLayout = new QHBoxLayout();
+  topLayout->addLayout( buttonLayout );
+  topLayout->addWidget( table );
+
+  messageTable = new MessageTable( centralWidget );
+  messageTable->setObjectName( QString::fromUtf8("messageTable") );
+
+  QVBoxLayout *mainLayout = new QVBoxLayout( centralWidget );
+  mainLayout->addLayout( topLayout );
+  mainLayout->addWidget( messageTable );
+}
+
+void Ui::setHomeAddress()
+{
+}
+
+void Ui::setWorkAddress()
+{
 }
index 77ba935..460dd88 100644 (file)
@@ -1,13 +1,20 @@
 #ifndef UI_H
 #define UI_H
 
+#include <QObject>
+
 class QMainWindow;
 class QWidget;
 class QTableWidget;
 class QButtonGroup;
+class MessageTable;
+class QHBoxLayout;
+class QVBoxLayout;
 
-class Ui
+class Ui : public QObject
 {
+  Q_OBJECT
+
 public:
   Ui();
   ~Ui();
@@ -22,14 +29,25 @@ public:
     ScreenWidth=800,
     ScreenHeight=480
   };
-
   enum {
-    ButtonWidth=300,
-    ButtonHeight=70
+   ButtonWidth=300,
+   ButtonHeight=70
   };
 
+
   QWidget *centralWidget;
   QButtonGroup *destinationButtons;
   QTableWidget *table;
+  static MessageTable *messageTable;
+  QHBoxLayout *mainLayout;
+  QVBoxLayout *buttonLayout;
+
+Q_SIGNALS:
+  void homeAddressChanged( QString address );
+  void workAddressChanged( QString address );
+
+private Q_SLOTS:
+  void setHomeAddress();
+  void setWorkAddress();
 };
 #endif //UI_H
index cb49179..b599cbd 100644 (file)
@@ -3,6 +3,7 @@
 #include "ui.h"
 #include "ytv.h"
 #include "location.h"
+#include "messagetable.h"
 
 #include <QObject>
 #include <QTableWidgetItem>
@@ -59,6 +60,8 @@ void UiController::setButtonValid( int id )
 
 void UiController::changeDestination( int id )
 {
+  qDebug() << "Button "+QString::number(id)+" clicked";
+
   bool destinationHasChanged = ( currentDestination != id );
   if ( destinationHasChanged ) {
     emit destinationChanged( *(destination[id]) );
@@ -71,6 +74,8 @@ void UiController::changeDestination( int id )
 
 void UiController::displayRoute( const QList<RouteData> &routeData )
 {
+  qDebug() << "displaying route";
+
   ui->table->setRowCount( routeData.count() );
 
   for ( int i=0; i<routeData.count(); i++ ) {
@@ -80,4 +85,6 @@ void UiController::displayRoute( const QList<RouteData> &routeData )
     QTableWidgetItem *lineItem = new QTableWidgetItem( routeData.at(i).lineCode );
     ui->table->setItem( i, 1, lineItem );
   }
+
+  ui->table->resizeColumnsToContents();
 }
index 571eca3..a594ab5 100644 (file)
@@ -17,8 +17,6 @@ QT += \
 
 TEMPLATE = app
 
-#FORMS = zouba.ui
-
 SOURCES += \
     main.cpp \
     route.cpp \
@@ -28,6 +26,8 @@ SOURCES += \
     location_p.cpp \
     gpscontroller.cpp \
     ui.cpp \
+    messagetable.cpp \
+    messagehandler.cpp \
 
 HEADERS += \
     route.h \
@@ -38,4 +38,6 @@ HEADERS += \
     ytv.h \
     gpscontroller.h \
     ui.h \
+    messagetable.h \
+    messagehandler.h \