Changes: Changed the route table to a layout of buttons and tamed the layouts a bit.
[ptas] / zouba / src / ui.cpp
index 98aac09..1b6784f 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "messagetable.h"
 #include "locations.h"
+#include "ytv.h"
 
 #include <QMainWindow>
 #include <QRadioButton>
@@ -14,6 +15,7 @@
 #include <QMenuBar>
 #include <QHBoxLayout>
 #include <QVBoxLayout>
+#include <QGridLayout>
 #include <QSizePolicy>
 #include <QInputDialog>
 #include <QDebug>
@@ -23,7 +25,10 @@ MessageTable *Ui::messageTable = 0;
 Ui::Ui() :
   centralWidget(0),
   destinationButtons(0),
-  routeTable(0)
+  routeStack(0),
+  usingFakeGps( false ),
+  messagesShown( false ),
+  fakeLocationLabel( "work" )
 {
 }
 
@@ -38,14 +43,12 @@ void Ui::setupUi( QMainWindow *mainWindow )
 
   QAction *setHomeAddressAction = new QAction("Set home address", this);
   QAction *setWorkAddressAction = new QAction("Set work address", this);
-  hideMessagesAction   = new QAction("Hide messages", this);
-  showMessagesAction   = new QAction("Show messages", this);
-  useFakeGpsAction   = new QAction("Use fake GPS", this);
-  useLiveGpsAction   = new QAction("Use live GPS", this);
+  toggleMessagesAction = new QAction("Show messages", this);
+  toggleFakeGpsAction  = new QAction("Use fake GPS", this);
   menu->addAction(setHomeAddressAction);
   menu->addAction(setWorkAddressAction);
-  menu->addAction(showMessagesAction);
-  menu->addAction(useFakeGpsAction);
+  menu->addAction(toggleMessagesAction);
+  menu->addAction(toggleFakeGpsAction);
 
   connect(
       setHomeAddressAction, SIGNAL(triggered()),
@@ -56,20 +59,12 @@ void Ui::setupUi( QMainWindow *mainWindow )
       this, SLOT(setWorkAddress())
       );
   connect(
-      hideMessagesAction, SIGNAL(triggered()),
-      this, SLOT(hideMessages())
+      toggleMessagesAction, SIGNAL(triggered()),
+      this, SLOT(toggleMessages())
       );
   connect(
-      showMessagesAction, SIGNAL(triggered()),
-      this, SLOT(showMessages())
-      );
-  connect(
-      useFakeGpsAction, SIGNAL(triggered()),
-      this, SLOT(useFakeGps())
-      );
-  connect(
-      useLiveGpsAction, SIGNAL(triggered()),
-      this, SLOT(useLiveGps())
+      toggleFakeGpsAction, SIGNAL(triggered()),
+      this, SLOT(toggleFakeGps())
       );
 
   centralWidget = new QWidget( mainWindow );
@@ -79,7 +74,6 @@ void Ui::setupUi( QMainWindow *mainWindow )
   homeButton->setObjectName( QString::fromUtf8("homeButton") );
   homeButton->setText( "GPS->HOME" );
   homeButton->setEnabled(false);
-  homeButton->setFixedSize( QSize( ButtonWidth, ButtonHeight ) );
 
   QRadioButton *workButton = new QRadioButton();
   workButton->setObjectName( QString::fromUtf8("workButton") );
@@ -91,20 +85,23 @@ void Ui::setupUi( QMainWindow *mainWindow )
   destinationButtons->addButton( workButton, WorkButtonId );
   destinationButtons->setExclusive( true );
 
-  buttonLayout = new QVBoxLayout();
-  buttonLayout->addWidget( homeButton );
-  buttonLayout->addWidget( workButton );
-  buttonLayout->addStretch();
+  routeStack = new QVBoxLayout();
+  for ( int i=0; i<Ytv::ShowFiveResults; ++i ) {
+    QRadioButton *button = new QRadioButton();
+    button->setObjectName( "routeButton"+i );
+    button->setEnabled( false );
 
-  routeTable = new QTableWidget( 1, 2 );
-  QStringList columnHeaders;
-  columnHeaders << "Time" << "Bus";
-  routeTable->setHorizontalHeaderLabels( columnHeaders );
-  routeTable->verticalHeader()->hide();
+    routeStack->addWidget( button, i );
+  }
+  routeStack->addStretch();
 
   QHBoxLayout *topLayout = new QHBoxLayout();
-  topLayout->addLayout( buttonLayout );
-  topLayout->addWidget( routeTable );
+  topLayout->addLayout( routeStack );
+  topLayout->addStretch();
+
+  buttonLayout = new QGridLayout();
+  buttonLayout->addWidget( homeButton, 0, 0 );
+  buttonLayout->addWidget( workButton, 0, 1 );
 
   messageTable = new MessageTable();
   messageTable->setObjectName( QString::fromUtf8("messageTable") );
@@ -113,6 +110,7 @@ void Ui::setupUi( QMainWindow *mainWindow )
   QVBoxLayout *mainLayout = new QVBoxLayout();
   mainLayout->addLayout( topLayout );
   mainLayout->addWidget( messageTable );
+  mainLayout->addLayout( buttonLayout );
 
   centralWidget->setLayout( mainLayout );
 }
@@ -127,36 +125,50 @@ void Ui::setWorkAddress()
   setAddress( "work" );
 }
 
+void Ui::toggleMessages()
+{
+  messagesShown = !messagesShown;
+
+  if ( messagesShown ) {
+    showMessages();
+  } else {
+    hideMessages();
+  }
+}
+
 void Ui::hideMessages()
 {
   messageTable->hide();
-  menu->removeAction( hideMessagesAction );
-  menu->addAction( showMessagesAction );
+  toggleMessagesAction->setText( "Show messages" );
 }
 
 void Ui::showMessages()
 {
   messageTable->show();
-  menu->removeAction( showMessagesAction );
-  menu->addAction( hideMessagesAction );
+  toggleMessagesAction->setText( "Hide messages" );
 }
 
-void Ui::useFakeGps()
+void Ui::toggleFakeGps()
 {
-  // really want a dialog here
-  Locations *locations = Locations::instance();
-  Location *fakeLocation = locations->location( "work" );
+  usingFakeGps = !usingFakeGps;
 
-  emit fakeGpsPressed( fakeLocation );
-  menu->removeAction( useFakeGpsAction );
-  menu->addAction( useLiveGpsAction );
+  if ( usingFakeGps ) {
+    useFakeGps();
+  } else {
+    useLiveGps();
+  }
+}
+
+void Ui::useFakeGps()
+{
+  emit fakeGpsPressed( fakeLocationLabel );
+  toggleFakeGpsAction->setText( "Use Live GPS" );
 }
 
 void Ui::useLiveGps()
 {
   emit liveGpsPressed();
-  menu->removeAction( useLiveGpsAction );
-  menu->addAction( useFakeGpsAction );
+  toggleFakeGpsAction->setText( "Use Fake GPS" );
 }
 
 void Ui::setAddress( const QString &label )
@@ -174,8 +186,6 @@ void Ui::setAddress( const QString &label )
      &ok
      );
 
-  qDebug() << "ok=" << ok;
-
   if ( ok ) {
     qDebug() << "new address" << address;
     Locations *locations = Locations::instance();