Changes: display route legs in table; removed message table/button
[ptas] / zouba / src / ui.cpp
1 #include "ui.h"
2
3 #include "locations.h"
4 #include "ytv.h"
5
6 #include <QMainWindow>
7 #include <QRadioButton>
8 #include <QTableWidget>
9 #include <QString>
10 #include <QRect>
11 #include <QButtonGroup>
12 #include <QHeaderView>
13 #include <QObject>
14 #include <QMenuBar>
15 #include <QHBoxLayout>
16 #include <QVBoxLayout>
17 #include <QGridLayout>
18 #include <QSizePolicy>
19 #include <QInputDialog>
20 #include <QDebug>
21
22 Ui::Ui() :
23   m_centralWidget(0),
24   m_destinationButtons(0),
25   m_routeStack(0),
26   m_usingFakeGps( false ),
27   m_fakeLocationLabel( "work" )
28 {
29 }
30
31 Ui::~Ui()
32 {
33 }
34
35 void Ui::setupUi( QMainWindow *mainWindow )
36 {
37   m_mainWindow = mainWindow;
38   m_mainWindow->resize(800,480);
39
40   m_menu = mainWindow->menuBar()->addMenu("Settings");
41
42   QAction *setHomeAddressAction = new QAction("Set home address", this);
43   QAction *setWorkAddressAction = new QAction("Set work address", this);
44   m_toggleFakeGpsAction  = new QAction("Use fake GPS", this);
45   m_menu->addAction(setHomeAddressAction);
46   m_menu->addAction(setWorkAddressAction);
47   m_menu->addAction(m_toggleFakeGpsAction);
48
49   connect(
50       setHomeAddressAction, SIGNAL(triggered()),
51       this, SLOT(setHomeAddress())
52       );
53   connect(
54       setWorkAddressAction, SIGNAL(triggered()),
55       this, SLOT(setWorkAddress())
56       );
57   connect(
58       m_toggleFakeGpsAction, SIGNAL(triggered()),
59       this, SLOT(toggleFakeGps())
60       );
61
62   m_centralWidget = new QWidget( m_mainWindow );
63   m_mainWindow->setCentralWidget( m_centralWidget);
64
65   QRadioButton *homeButton = new QRadioButton();
66   homeButton->setObjectName( QString::fromUtf8("homeButton") );
67   homeButton->setText( "GPS->HOME" );
68   homeButton->setEnabled(false);
69
70   QRadioButton *workButton = new QRadioButton();
71   workButton->setObjectName( QString::fromUtf8("workButton") );
72   workButton->setText( "GPS->WORK" );
73   workButton->setEnabled(false);
74
75   m_destinationButtons = new QButtonGroup();
76   m_destinationButtons->addButton( homeButton, HomeButtonId );
77   m_destinationButtons->addButton( workButton, WorkButtonId );
78   m_destinationButtons->setExclusive( true );
79
80   m_routeButtons = new QButtonGroup();
81   m_routeButtons->setExclusive( true );
82   m_routeStack = new QVBoxLayout();
83   for ( int i=0; i<Ytv::ShowFiveResults; ++i ) {
84     QRadioButton *button = new QRadioButton();
85     button->setObjectName( "routeButton"+i );
86     button->setEnabled( false );
87
88     m_routeStack->addWidget( button, i );
89     m_routeButtons->addButton( button, i );
90   }
91   m_routeStack->addStretch();
92
93   m_routeDetailTable = new QTableWidget();
94   m_routeDetailTable->setColumnCount(6);
95
96   QHBoxLayout *topLayout = new QHBoxLayout();
97   topLayout->addLayout( m_routeStack );
98   topLayout->addWidget( m_routeDetailTable );
99
100   m_buttonLayout = new QGridLayout();
101   m_buttonLayout->addWidget( homeButton, 0, 0 );
102   m_buttonLayout->addWidget( workButton, 0, 1 );
103
104   m_mainLayout = new QVBoxLayout();
105   m_mainLayout->addLayout( topLayout );
106   m_mainLayout->addLayout( m_buttonLayout );
107
108   m_centralWidget->setLayout( m_mainLayout );
109 }
110
111 void Ui::setHomeAddress()
112 {
113   setAddress( "home" );
114 }
115
116 void Ui::setWorkAddress()
117 {
118   setAddress( "work" );
119 }
120
121 void Ui::toggleFakeGps()
122 {
123   m_usingFakeGps = !m_usingFakeGps;
124
125   if ( m_usingFakeGps ) {
126     useFakeGps();
127   } else {
128     useLiveGps();
129   }
130 }
131
132 void Ui::useFakeGps()
133 {
134   emit fakeGpsPressed( m_fakeLocationLabel );
135   m_toggleFakeGpsAction->setText( "Use Live GPS" );
136 }
137
138 void Ui::useLiveGps()
139 {
140   emit liveGpsPressed();
141   m_toggleFakeGpsAction->setText( "Use Fake GPS" );
142 }
143
144 void Ui::setAddress( const QString &label )
145 {
146   Locations *locations=Locations::instance();
147   Location *location=locations->location( label );
148
149   bool ok;
150   QString address = QInputDialog::getText(
151      m_centralWidget,
152      tr("Enter address for \""+QString(label).toLatin1()+"\""),
153      tr("Address"),
154      QLineEdit::Normal,
155      location->address(),
156      &ok
157      );
158
159   if ( ok ) {
160     qDebug() << "new address" << address;
161     Locations *locations = Locations::instance();
162     Location  *location  = locations->location( label );
163     qDebug() << "location" << location;
164     if ( location ) {
165       location->resolveAddress( address );
166     }
167   }
168 }
169
170 void Ui::setBusy( bool busy )
171 {
172   m_mainWindow->setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
173 }