Check for device state on update.
[yandex-traffic] / mainwidget.cpp
1 #include <QtGui>
2
3 #include "mainwidget.hpp"
4 #include "settingsDialog.hpp"
5 #include "connection.hpp"
6
7
8 // --------------------------------------------------
9 // MainWidget
10 // --------------------------------------------------
11 MainWidget::MainWidget ()
12     : QWidget ()
13 {
14 #ifdef Q_WS_MAEMO_5
15     setAttribute(Qt::WA_TranslucentBackground);
16 #endif
17     _light = new TrafficLight (this);
18     _label = new QLabel (this);
19     _timer = new QTimer (this);
20
21     _label->setAlignment (Qt::AlignHCenter | Qt::AlignVCenter);
22
23     _traffic = new Traffic;
24     _regions = new RegionsTable;
25     _settings = new Settings;
26
27     QHBoxLayout *layout = new QHBoxLayout;
28     layout->addWidget (_light);
29     layout->addWidget (_label);
30     setLayout (layout);
31
32     applySettings ();
33
34     connect (_traffic, SIGNAL (updated ()), SLOT (trafficUpdated ()));
35     connect (_timer, SIGNAL (timeout ()), SLOT (updateDate ()));
36
37     updateData ();
38 }
39
40
41 MainWidget::~MainWidget ()
42 {
43     delete _traffic;
44     delete _regions;
45     delete _settings;
46
47     delete _light;
48     delete _label;
49 }
50
51
52 void MainWidget::paintEvent(QPaintEvent *event)
53 {
54     QPainter p(this);
55     p.setBrush (QColor(0, 0, 0, 128));
56     p.setPen (Qt::NoPen);
57     p.drawRoundedRect (rect(), 10, 10);
58     p.end ();
59
60     QWidget::paintEvent (event);
61 }
62
63
64
65 void MainWidget::trafficUpdated ()
66 {
67     ExtendedTrafficInfo info = _traffic->lookup_ext (_settings->regionID ());
68
69     if (info.valid ()) {
70         QString data;
71         bool first = true;
72         _light->setColor (info.color ());
73
74         if (_settings->check (Settings::C_ShowRank)) {
75             data.append (QString::number (info.level ()));
76             data.append (info.level () > 1 ? tr (" points") : tr (" point"));
77             first = false;
78         }
79
80         if (_settings->check (Settings::C_ShowTime)) {
81             if (!first)
82                 data.append (", ");
83             data.append (info.localtime ());
84             first = false;
85         }
86
87         if (_settings->check (Settings::C_ShowHint)) {
88             if (!first)
89                 data.append ("\n");
90             data.append (info.hint ());
91         }
92
93         _label->setText (data);
94     }
95     else {
96         _light->setColor (ExtendedTrafficInfo::Unknown);
97         _label->setText (tr ("No data"));
98     }
99 }
100
101
102 void MainWidget::updateData ()
103 {
104     bool update = true;
105
106 #if CHECK_FOR_CONNECTION
107     update = ConnectionChecker::instance ()->checkConnection (_settings->check (Settings::C_UpdateOnGSM),
108                                                               _settings->check (Settings::C_UpdateOnWiFi));
109     if (!_settings->check (Settings::C_UpdateWhenLocked))
110         update &= !DeviceState::instance ()->locked ();
111 #endif
112
113     if (update)
114         _traffic->update ();
115 }
116
117
118 void MainWidget::settingsDialog ()
119 {
120     SettingsDialog dlg (_settings);
121
122     dlg.exec ();
123
124     applySettings ();
125     trafficUpdated ();
126 }
127
128
129 void MainWidget::updateSize ()
130 {
131     QSize minSize (0, 80);
132
133     if (_settings->check (Settings::C_ShowLight))
134         minSize += QSize (80, 0);
135     if (_settings->check (Settings::C_ShowHint))
136         minSize += QSize (270, 0);
137     else {
138         if (_settings->check (Settings::C_ShowTime))
139             minSize += QSize (75, 0);
140         if (_settings->check (Settings::C_ShowRank))
141             minSize += QSize (75, 0);
142     }
143
144     setFixedSize (minSize);
145 }
146
147
148
149 void MainWidget::applySettings ()
150 {
151     _light->setVisible (_settings->check (Settings::C_ShowLight));
152
153     updateSize ();
154
155     if (_settings->updateInterval () < 0)
156         _timer->stop ();
157     else
158         _timer->setInterval (1000 * 60 * _settings->updateInterval ());
159 }
160
161
162 void MainWidget::mousePressEvent (QMouseEvent *event)
163 {
164     QMenu menu;
165     QAction *settingsAction, *updateAction, *todo;
166
167     settingsAction = menu.addAction (tr ("Settings"));
168     updateAction = menu.addAction (tr ("Update"));
169
170     todo = menu.exec (event->pos ());
171     if (!todo)
172         return;
173
174     if (todo == settingsAction)
175         settingsDialog ();
176     if (todo == updateAction)
177         _traffic->update ();
178 }