Save language settings.
[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 (updateData ()));
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 (tr ("%n point(s)", "", info.level ()));
76             first = false;
77         }
78
79         if (_settings->check (Settings::C_ShowTime)) {
80             if (!first)
81                 data.append (", ");
82             data.append (info.localtime ());
83             first = false;
84         }
85
86         if (_settings->check (Settings::C_ShowHint)) {
87             if (!first)
88                 data.append ("\n");
89             data.append (info.hint ());
90         }
91
92         _label->setText (data);
93     }
94     else {
95         _light->setColor (ExtendedTrafficInfo::Unknown);
96         _label->setText (tr ("No data"));
97     }
98 }
99
100
101 void MainWidget::updateData ()
102 {
103     bool update = true;
104
105 #if CHECK_FOR_CONNECTION
106     update = ConnectionChecker::instance ()->checkConnection (_settings->check (Settings::C_UpdateOnGSM),
107                                                               _settings->check (Settings::C_UpdateOnWiFi));
108     if (!_settings->check (Settings::C_UpdateWhenLocked))
109         update &= !DeviceState::instance ()->locked ();
110 #endif
111
112     if (update)
113         _traffic->update ();
114 }
115
116
117 void MainWidget::settingsDialog ()
118 {
119     SettingsDialog dlg (_settings);
120
121     dlg.exec ();
122
123     applySettings ();
124     trafficUpdated ();
125 }
126
127
128 void MainWidget::updateSize ()
129 {
130     QSize minSize (0, 80);
131
132     if (_settings->check (Settings::C_ShowLight))
133         minSize += QSize (80, 0);
134     if (_settings->check (Settings::C_ShowHint))
135         minSize += QSize (270, 0);
136     else {
137         if (_settings->check (Settings::C_ShowTime))
138             minSize += QSize (75, 0);
139         if (_settings->check (Settings::C_ShowRank))
140             minSize += QSize (75, 0);
141     }
142
143     setFixedSize (minSize);
144 }
145
146
147
148 void MainWidget::applySettings ()
149 {
150     _light->setVisible (_settings->check (Settings::C_ShowLight));
151
152     updateSize ();
153
154     if (_settings->updateInterval () < 0)
155         _timer->stop ();
156     else
157         _timer->setInterval (1000 * 60 * _settings->updateInterval ());
158 }
159
160
161 void MainWidget::mousePressEvent (QMouseEvent *event)
162 {
163     QMenu menu;
164     QAction *settingsAction, *updateAction, *todo;
165
166     settingsAction = menu.addAction (tr ("Settings"));
167     updateAction = menu.addAction (tr ("Update"));
168
169     todo = menu.exec (event->pos ());
170     if (!todo)
171         return;
172
173     if (todo == settingsAction)
174         settingsDialog ();
175     if (todo == updateAction)
176         _traffic->update ();
177 }