We have no plans to implement alerts so far
[yandex-traffic] / settingsDialog.cpp
1 #include <QtGui>
2
3 #ifdef Q_WS_MAEMO_5
4 #include <QtMaemo5>
5 #else
6 #include "QtMaemo5Adapters.hpp"
7 #endif
8
9 #include "settingsDialog.hpp"
10
11
12 // --------------------------------------------------
13 // SettingsDialog
14 // --------------------------------------------------
15 SettingsDialog::SettingsDialog (Settings *settings)
16     : QDialog (),
17       _settings (settings)
18 {
19     setWindowTitle (tr ("Settings"));
20
21     QVBoxLayout *layout = new QVBoxLayout (this);
22
23     _displayButton = new QMaemo5ValueButton (tr ("Display"), this);
24     layout->addWidget (_displayButton);
25     _updateButton = new QMaemo5ValueButton (tr ("Update"), this);
26     layout->addWidget (_updateButton);
27
28     connect (_displayButton, SIGNAL (clicked ()), SLOT (displayClicked ()));
29     connect (_updateButton, SIGNAL (clicked ()), SLOT (updateClicked ()));
30 }
31
32
33 void SettingsDialog::displayClicked ()
34 {
35     DisplaySettingsDialog dlg (_settings);
36     dlg.exec ();
37 }
38
39
40 void SettingsDialog::updateClicked ()
41 {
42     UpdateSettingsDialog dlg (_settings);
43     dlg.exec ();
44 }
45
46
47 // --------------------------------------------------
48 // BaseSettingsDialog
49 // --------------------------------------------------
50 BaseSettingsDialog::BaseSettingsDialog (Settings *settings)
51     : QDialog (),
52       _settings (settings),
53       _layout (new QVBoxLayout)
54 {
55     QHBoxLayout *layout = new QHBoxLayout (this);
56     QVBoxLayout *right_layout = new QVBoxLayout ();
57     QSizePolicy policy;
58
59     // Right side
60     _saveButton = new QPushButton (tr ("Save"), this);
61     policy = _saveButton->sizePolicy ();
62     policy.setHorizontalPolicy (QSizePolicy::Maximum);
63     _saveButton->setSizePolicy (policy);
64     connect (_saveButton, SIGNAL (clicked ()), SLOT (saveClicked ()));
65
66     right_layout->addStretch ();
67     right_layout->addWidget (_saveButton);
68
69     // Path them together
70     layout->addLayout (_layout);
71     layout->addLayout (right_layout);
72
73     // Left side would be initialized later
74 }
75
76
77 void BaseSettingsDialog::saveClicked ()
78 {
79     saveSettings ();
80     _settings->save ();
81     accept ();
82 }
83
84
85 // --------------------------------------------------
86 // DisplaySettingsDialog
87 // --------------------------------------------------
88 DisplaySettingsDialog::DisplaySettingsDialog (Settings *_settings)
89     : BaseSettingsDialog (_settings)
90 {
91     setWindowTitle (tr ("Display settings"));
92     setMinimumSize (300, 400);
93
94     initCities (layout ());
95     initChecks (layout ());
96 }
97
98
99 void DisplaySettingsDialog::initCities (QBoxLayout *layout)
100 {
101     _cities = new QListWidget (this);
102     QMap<QString, QString> cities_map = settings ()->cities ();
103     QMap<QString, QString>::iterator it = cities_map.begin ();
104
105     // Populate list with cities
106     while (it != cities_map.end ()) {
107         QListWidgetItem *item = new QListWidgetItem (it.value (), _cities);
108
109         item->setData (Qt::UserRole, QVariant (it.key ()));
110         if (it.key () == settings ()->regionID ())
111             _cities->setCurrentItem (item);
112         it++;
113     }
114
115     layout->addWidget (_cities);
116 }
117
118
119 void DisplaySettingsDialog::initChecks (QBoxLayout *layout)
120 {
121     QGridLayout *grid = new QGridLayout;
122
123     _showLight = new QCheckBox (tr ("Light"), this);
124     _showLight->setChecked (settings ()->check (Settings::C_ShowLight));
125     _showRank = new QCheckBox (tr ("Rank"), this);
126     _showRank->setChecked (settings ()->check (Settings::C_ShowRank));
127     _showTime = new QCheckBox (tr ("Time"), this);
128     _showTime->setChecked (settings ()->check (Settings::C_ShowTime));
129     _showHint = new QCheckBox (tr ("Hint"), this);
130     _showHint->setChecked (settings ()->check (Settings::C_ShowHint));
131
132     grid->addWidget (_showLight, 0, 0);
133     grid->addWidget (_showRank, 0, 1);
134     grid->addWidget (_showTime, 1, 0);
135     grid->addWidget (_showHint, 1, 1);
136
137     layout->addLayout (grid);
138 }
139
140
141 void DisplaySettingsDialog::saveSettings ()
142 {
143     QListWidgetItem *cur = _cities->currentItem ();
144
145     if (cur)
146         settings ()->setRegionID (cur->data (Qt::UserRole).toString ());
147
148     settings ()->setCheck (Settings::C_ShowLight, _showLight->isChecked ());
149     settings ()->setCheck (Settings::C_ShowRank,  _showRank->isChecked ());
150     settings ()->setCheck (Settings::C_ShowTime,  _showTime->isChecked ());
151     settings ()->setCheck (Settings::C_ShowHint,  _showHint->isChecked ());
152 }
153
154
155 // --------------------------------------------------
156 // UpdateSettingsDialog
157 // --------------------------------------------------
158 UpdateSettingsDialog::UpdateSettingsDialog (Settings *_settings)
159     : BaseSettingsDialog (_settings)
160 {
161     setWindowTitle (tr ("Update settings"));
162
163     _wifiUpdate = new QCheckBox (tr ("Update on WiFi connection"), this);
164     _wifiUpdate->setChecked (settings ()->check (Settings::C_UpdateOnWiFi));
165     _gsmUpdate  = new QCheckBox (tr ("Update on GSM connection"), this);
166     _gsmUpdate->setChecked (settings ()->check (Settings::C_UpdateOnGSM));
167
168     initUpdateInterval (layout ());
169
170     layout ()->addWidget (_wifiUpdate);
171     layout ()->addWidget (_gsmUpdate);
172 }
173
174
175 void UpdateSettingsDialog::saveSettings ()
176 {
177 #ifdef Q_WS_MAEMO_5
178     QMaemo5ListPickSelector *selector = static_cast<QMaemo5ListPickSelector*> (_intervalButton->pickSelector ());
179
180     if (selector)
181         settings ()->setUpdateIntervalIndex (selector->currentIndex ());
182 #endif
183     settings ()->setCheck (Settings::C_UpdateOnWiFi, _wifiUpdate->isChecked ());
184     settings ()->setCheck (Settings::C_UpdateOnGSM,  _gsmUpdate->isChecked ());
185 }
186
187
188 void UpdateSettingsDialog::initUpdateInterval (QBoxLayout *layout)
189 {
190     _intervalButton = new QMaemo5ValueButton (tr ("Update interval"), this);
191     layout->addWidget (_intervalButton);
192
193 #ifdef Q_WS_MAEMO_5
194     QMaemo5ListPickSelector *selector = new QMaemo5ListPickSelector;
195     QStandardItemModel *model = new QStandardItemModel (0, 1);
196     QStringList updateIntervals = settings ()->updateIntervals ();
197     QStringList::iterator it = updateIntervals.begin ();
198
199     while (it != updateIntervals.end ()) {
200         model->appendRow (new QStandardItem (*it));
201         it++;
202     }
203
204     selector->setModel (model);
205     selector->setCurrentIndex (settings ()->getUpdateIntervalIndex ());
206
207     _intervalButton->setPickSelector (selector);
208 #endif
209 }