Reorganization of settings dialog to eliminate code duplication.
[yandex-traffic] / mainwidget.cpp
1 #include <QtGui>
2
3 #include "mainwidget.hpp"
4 #include "settingsDialog.hpp"
5
6
7 // --------------------------------------------------
8 // MainWidget
9 // --------------------------------------------------
10 MainWidget::MainWidget ()
11     : QWidget ()
12 {
13 #ifdef Q_WS_MAEMO_5
14     setAttribute(Qt::WA_TranslucentBackground);
15 #endif
16     _light = new TrafficLight (this);
17     _label = new QLabel (this);
18
19     _label->setAlignment (Qt::AlignHCenter | Qt::AlignVCenter);
20
21     _traffic = new Traffic;
22     _regions = new RegionsTable;
23     _settings = new Settings;
24
25     QHBoxLayout *layout = new QHBoxLayout;
26     layout->addWidget (_light);
27     layout->addWidget (_label);
28     setLayout (layout);
29
30     _light->setVisible (_settings->check (Settings::C_Light));
31
32     updateSize ();
33
34     connect (_traffic, SIGNAL (updated ()), SLOT (trafficUpdated ()));
35
36     // every 5 minutes (TODO, make option)
37     startTimer (5*60*1000);
38
39     updateData ();
40 }
41
42
43 MainWidget::~MainWidget ()
44 {
45     delete _traffic;
46     delete _regions;
47     delete _settings;
48
49     delete _light;
50     delete _label;
51 }
52
53
54 void MainWidget::paintEvent(QPaintEvent *event)
55 {
56     QPainter p(this);
57     p.setBrush (QColor(0, 0, 0, 128));
58     p.setPen (Qt::NoPen);
59     p.drawRoundedRect (rect(), 10, 10);
60     p.end ();
61
62     QWidget::paintEvent (event);
63 }
64
65
66 void MainWidget::timerEvent (QTimerEvent *)
67 {
68     updateData ();
69 }
70
71
72
73 void MainWidget::trafficUpdated ()
74 {
75     ExtendedTrafficInfo info = _traffic->lookup_ext ("1");
76
77     if (info.valid ()) {
78         QString data;
79         bool first = true;
80         _light->setColor (info.color ());
81
82         if (_settings->check (Settings::C_Rank)) {
83             data.append (QString::number (info.level ()));
84             data.append (info.level () > 1 ? tr (" points") : tr (" point"));
85             first = false;
86         }
87
88         if (_settings->check (Settings::C_Time)) {
89             if (!first)
90                 data.append (", ");
91             data.append (info.localtime ());
92             first = false;
93         }
94
95         if (_settings->check (Settings::C_Hint)) {
96             if (!first)
97                 data.append ("\n");
98             data.append (info.hint ());
99         }
100
101         _label->setText (data);
102     }
103     else
104         _light->setColor (ExtendedTrafficInfo::Unknown);
105 }
106
107
108 void MainWidget::updateData ()
109 {
110     // Here we need to check for internet connection
111     _traffic->update ();
112 }
113
114
115 void MainWidget::settingsDialog ()
116 {
117     SettingsDialog dlg (_settings);
118
119     dlg.exec ();
120
121     // Handle settings
122     _light->setVisible (_settings->check (Settings::C_Light));
123
124     updateSize ();
125     trafficUpdated ();
126 }
127
128
129 void MainWidget::updateSize ()
130 {
131     QSize minSize (0, 80);
132
133     if (_settings->check (Settings::C_Light))
134         minSize += QSize (80, 0);
135     if (_settings->check (Settings::C_Hint))
136         minSize += QSize (270, 0);
137     else {
138         if (_settings->check (Settings::C_Time))
139             minSize += QSize (75, 0);
140         if (_settings->check (Settings::C_Rank))
141             minSize += QSize (75, 0);
142     }
143
144     setFixedSize (minSize);
145 }