Changes: layout change ready for multiple routes; change table selection modes
[ptas] / zouba / src / ui.cpp
index b6a029b..7b7c3e8 100644 (file)
@@ -14,6 +14,7 @@
 #include <QMenuBar>
 #include <QHBoxLayout>
 #include <QVBoxLayout>
+#include <QGridLayout>
 #include <QSizePolicy>
 #include <QInputDialog>
 #include <QDebug>
@@ -23,8 +24,16 @@ MessageTable *Ui::messageTable = 0;
 Ui::Ui() :
   centralWidget(0),
   destinationButtons(0),
-  routeTable(0)
+  routeTable(0),
+  usingFakeGps( false ),
+  messagesShown( false ),
+  fakeLocation()
 {
+  Locations *locations = Locations::instance();
+  Location *workLocation = locations->location( "work" );
+  fakeLocation = new Location();
+  *fakeLocation = *workLocation;
+  fakeLocation->setLabel( "fakegps" );
 }
 
 Ui::~Ui()
@@ -38,11 +47,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);
+  toggleMessagesAction = new QAction("Show messages", this);
+  toggleFakeGpsAction  = new QAction("Use fake GPS", this);
   menu->addAction(setHomeAddressAction);
   menu->addAction(setWorkAddressAction);
-  menu->addAction(showMessagesAction);
+  menu->addAction(toggleMessagesAction);
+  menu->addAction(toggleFakeGpsAction);
 
   connect(
       setHomeAddressAction, SIGNAL(triggered()),
@@ -53,12 +63,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())
+      toggleFakeGpsAction, SIGNAL(triggered()),
+      this, SLOT(toggleFakeGps())
       );
 
   centralWidget = new QWidget( mainWindow );
@@ -68,7 +78,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") );
@@ -80,21 +89,20 @@ void Ui::setupUi( QMainWindow *mainWindow )
   destinationButtons->addButton( workButton, WorkButtonId );
   destinationButtons->setExclusive( true );
 
-  buttonLayout = new QVBoxLayout();
-  buttonLayout->addWidget( homeButton );
-  buttonLayout->addWidget( workButton );
-  buttonLayout->addStretch();
-
   routeTable = new QTableWidget( 1, 2 );
   QStringList columnHeaders;
   columnHeaders << "Time" << "Bus";
   routeTable->setHorizontalHeaderLabels( columnHeaders );
   routeTable->verticalHeader()->hide();
+  routeTable->setSelectionMode( QAbstractItemView::SingleSelection );
 
   QHBoxLayout *topLayout = new QHBoxLayout();
-  topLayout->addLayout( buttonLayout );
   topLayout->addWidget( routeTable );
 
+  buttonLayout = new QGridLayout();
+  buttonLayout->addWidget( homeButton, 0, 0 );
+  buttonLayout->addWidget( workButton, 0, 1 );
+
   messageTable = new MessageTable();
   messageTable->setObjectName( QString::fromUtf8("messageTable") );
   messageTable->hide();
@@ -102,6 +110,7 @@ void Ui::setupUi( QMainWindow *mainWindow )
   QVBoxLayout *mainLayout = new QVBoxLayout();
   mainLayout->addLayout( topLayout );
   mainLayout->addWidget( messageTable );
+  mainLayout->addLayout( buttonLayout );
 
   centralWidget->setLayout( mainLayout );
 }
@@ -116,18 +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::toggleFakeGps()
+{
+  usingFakeGps = !usingFakeGps;
+
+  if ( usingFakeGps ) {
+    useFakeGps();
+  } else {
+    useLiveGps();
+  }
+}
+
+void Ui::useFakeGps()
+{
+  emit fakeGpsPressed( fakeLocation );
+  toggleFakeGpsAction->setText( "Use Live GPS" );
+}
+
+void Ui::useLiveGps()
+{
+  emit liveGpsPressed();
+  toggleFakeGpsAction->setText( "Use Fake GPS" );
 }
 
 void Ui::setAddress( const QString &label )
@@ -145,8 +186,6 @@ void Ui::setAddress( const QString &label )
      &ok
      );
 
-  qDebug() << "ok=" << ok;
-
   if ( ok ) {
     qDebug() << "new address" << address;
     Locations *locations = Locations::instance();