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