Reorganization of settings dialog to eliminate code duplication.
[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
60     // Right side
61     _saveButton = new QPushButton (tr ("Save"), this);
62     connect (_saveButton, SIGNAL (clicked ()), SLOT (saveClicked ()));
63
64     right_layout->addStretch ();
65     right_layout->addWidget (_saveButton);
66
67     // Path them together
68     layout->addLayout (_layout);
69     layout->addLayout (right_layout);
70
71     // Left side would be initialized later
72 }
73
74
75 void BaseSettingsDialog::saveClicked ()
76 {
77     saveSettings ();
78     _settings->save ();
79     accept ();
80 }
81
82
83 // --------------------------------------------------
84 // DisplaySettingsDialog
85 // --------------------------------------------------
86 DisplaySettingsDialog::DisplaySettingsDialog (Settings *settings)
87     : BaseSettingsDialog (settings)
88 {
89     setWindowTitle (tr ("Display settings"));
90     setMinimumSize (300, 400);
91
92     initCities (layout ());
93     initChecks (layout ());
94 }
95
96
97 void DisplaySettingsDialog::initCities (QBoxLayout *layout)
98 {
99     _cities = new QListWidget (this);
100     QMap<QString, QString> cities_map = settings ()->cities ();
101     QMap<QString, QString>::iterator it = cities_map.begin ();
102
103     // Populate list with cities
104     while (it != cities_map.end ()) {
105         QListWidgetItem *item = new QListWidgetItem (it.value (), _cities);
106
107         item->setData (Qt::UserRole, QVariant (it.key ()));
108         if (it.key () == settings ()->regionID ())
109             _cities->setCurrentItem (item);
110         it++;
111     }
112
113     layout->addWidget (_cities);
114 }
115
116
117 void DisplaySettingsDialog::initChecks (QBoxLayout *layout)
118 {
119     QGridLayout *grid = new QGridLayout;
120
121     _showLight = new QCheckBox ("Light", this);
122     _showLight->setChecked (settings ()->check (Settings::C_Light));
123     _showRank = new QCheckBox ("Rank", this);
124     _showRank->setChecked (settings ()->check (Settings::C_Rank));
125     _showTime = new QCheckBox ("Time", this);
126     _showTime->setChecked (settings ()->check (Settings::C_Time));
127     _showHint = new QCheckBox ("Hint", this);
128     _showHint->setChecked (settings ()->check (Settings::C_Hint));
129
130     grid->addWidget (_showLight, 0, 0);
131     grid->addWidget (_showRank, 0, 1);
132     grid->addWidget (_showTime, 1, 0);
133     grid->addWidget (_showHint, 1, 1);
134
135     layout->addLayout (grid);
136 }
137
138
139 void DisplaySettingsDialog::saveSettings ()
140 {
141     QListWidgetItem *cur = _cities->currentItem ();
142
143     if (cur)
144         settings ()->setRegionID (cur->data (Qt::UserRole).toString ());
145
146     settings ()->setCheck (Settings::C_Light, _showLight->isChecked ());
147     settings ()->setCheck (Settings::C_Rank,  _showRank->isChecked ());
148     settings ()->setCheck (Settings::C_Time,  _showTime->isChecked ());
149     settings ()->setCheck (Settings::C_Hint,  _showHint->isChecked ());
150 }
151
152
153 // --------------------------------------------------
154 // UpdateSettingsDialog
155 // --------------------------------------------------
156 UpdateSettingsDialog::UpdateSettingsDialog (Settings *settings)
157     : BaseSettingsDialog (settings)
158 {
159     setWindowTitle (tr ("Update settings"));
160 }
161
162
163 void UpdateSettingsDialog::saveSettings ()
164 {
165 }