1 #include "settingswindow.h"
6 #include <QStringListModel>
13 static QStringList timeIntervalStrings() {
14 QStringList timeIntervals;
15 timeIntervals.append("1 week");
16 timeIntervals.append("1 month");
17 timeIntervals.append("3 months");
18 timeIntervals.append("6 months");
19 timeIntervals.append("1 year");
20 timeIntervals.append("all");
23 static int timeIntervalToIndex(int days) {
31 default: Q_ASSERT(0 && "unknown time interval");
33 return 0; //unreachable
35 static int indexToTimeInterval(int index) {
43 default: Q_ASSERT(0 && "unknown time interval index");
45 return 0; //unreachable
48 SettingsWindow::SettingsWindow(QWidget *parent) :
52 setAttribute(Qt::WA_Maemo5StackedWindow);
55 setWindowTitle("WeightGraph");
57 QWidget *rootContainer = new QWidget(this);
58 QVBoxLayout *rootLayout = new QVBoxLayout(rootContainer);
60 QWidget *topContainer = new QWidget(rootContainer);
61 QGridLayout *topLayout = new QGridLayout(topContainer);
63 QStringList units; units.append("kg"); units.append("lb");
64 QStringListModel *weightUnitModel = new QStringListModel(units, topContainer);
66 weightUnit = new QMaemo5ValueButton("Unit", topContainer);
67 weightUnit->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
68 QMaemo5ListPickSelector *weightUnitSelector = new QMaemo5ListPickSelector(topContainer);
69 weightUnitSelector->setModel(weightUnitModel);
70 weightUnitSelector->setCurrentIndex(Settings::weightUnit() == "kg" ? 0 : 1);
71 weightUnit->setPickSelector(weightUnitSelector);
72 connect(weightUnit->pickSelector(), SIGNAL(selected(QString)),
73 Settings::self(), SLOT(setWeightUnitAndSync(QString)));
75 weightUnit = new QComboBox(topContainer);
76 weightUnit->setModel(weightUnitModel);
79 topLayout->addWidget(weightUnit, 0, 0);
81 // QWidget *spacer = new QWidget(topContainer);
82 // spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
83 // topLayout->addWidget(spacer);
85 QFrame *goalFrame = new QFrame(topContainer);
86 goalFrame->setFrameShadow(QFrame::Sunken);
87 goalFrame->setFrameStyle(QFrame::StyledPanel);
88 goalFrame->setLineWidth(2);
89 goalFrame->setMidLineWidth(2);
90 QHBoxLayout *goalLayout = new QHBoxLayout(goalFrame);
92 goalLayout->addWidget(new QLabel("Goal weight:", topContainer));
94 goalMin = new WeightSpinBox(topContainer);
95 goalMin->setValue(Settings::goalWeightMin());
96 goalLayout->addWidget(goalMin);
98 goalLayout->addWidget(new QLabel("-", topContainer));
100 goalMax = new WeightSpinBox(topContainer);
101 goalMax->setValue(Settings::goalWeightMax());
102 goalLayout->addWidget(goalMax);
103 topLayout->addWidget(goalFrame, 0, 1);
105 grabZoomKeys = new QPushButton("Use zoom/volume keys to zoom", rootContainer);
106 grabZoomKeys->setCheckable(true);
107 grabZoomKeys->setChecked(Settings::grabZoomKeys());
108 topLayout->addWidget(grabZoomKeys, 1, 0, 1, 2);
110 rootLayout->addWidget(topContainer);
112 QTabWidget *tabWidget = new QTabWidget(rootContainer);
114 graphSettingsList = new QList<GraphSettingsWidget*>();
116 QStringList graphIds; graphIds.append("Small"); graphIds.append("Big");
117 foreach(QString id, graphIds) {
118 GraphSettingsWidget *gsw = new GraphSettingsWidget(id, tabWidget);
119 graphSettingsList->append(gsw);
120 tabWidget->addTab(gsw, id+" graph");
123 rootLayout->addWidget(tabWidget);
125 setCentralWidget(rootContainer);
128 void SettingsWindow::closeEvent(QCloseEvent *event)
130 //Note: Weight unit not saved as it is saved on change.
131 Settings::setGoalWeightMin(goalMin->value());
132 Settings::setGoalWeightMax(goalMax->value());
133 Settings::setGrabZoomKeys(grabZoomKeys->isChecked());
134 foreach(GraphSettingsWidget *gsw, *graphSettingsList) {
136 gs.goalWeightEnabled = gsw->goalWeightEnabled;
138 QMaemo5ListPickSelector *picker =
139 dynamic_cast<QMaemo5ListPickSelector*>(gsw->weightIntervalMode->pickSelector());
140 gs.weightIntervalMode = (GraphSettings::WeightIntervalMode)picker->currentIndex();
142 gs.weightIntervalMode =
143 (GraphSettings::WeightIntervalMode)gsw->weightIntervalMode->currentIndex();
145 gs.weightIntervalMin = gsw->weightIntervalMin->value();
146 gs.weightIntervalMax = gsw->weightIntervalMax->value();
148 QMaemo5ListPickSelector *picker2 =
149 dynamic_cast<QMaemo5ListPickSelector*>(gsw->defaultTimeInterval->pickSelector());
150 gs.defaultTimeInterval = indexToTimeInterval(picker2->currentIndex());
152 gs.defaultTimeInterval
153 = indexToTimeInterval(gsw->defaultTimeInterval->currentIndex());
155 Settings::setGraphSettingsAndSync(gsw->graphId, gs);
157 QMainWindow::closeEvent(event);
160 GraphSettingsWidget::GraphSettingsWidget(QString graphId, QWidget *parent) :
161 QWidget(parent), graphId(graphId) {
162 QWidget *rootContainer = new QWidget(this);
163 QGridLayout *rootLayout = new QGridLayout(rootContainer);
165 QWidget *topSpacer = new QWidget(rootContainer);
166 topSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
167 rootLayout->addWidget(topSpacer, 0, 0);
169 GraphSettings gs = Settings::graphSettings(graphId);
171 goalWeightEnabled = new QPushButton("Show goal weight", rootContainer);
172 goalWeightEnabled->setCheckable(true);
173 goalWeightEnabled->setChecked(gs.goalWeightEnabled);
174 rootLayout->addWidget(goalWeightEnabled, 1, 0);
176 QStringListModel *timeIntervalModel =
177 new QStringListModel(timeIntervalStrings(), rootContainer);
179 defaultTimeInterval= new QMaemo5ValueButton("Time interval", rootContainer);
180 defaultTimeInterval->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
181 QMaemo5ListPickSelector *timeIntervalSelector =
182 new QMaemo5ListPickSelector(rootContainer);
183 timeIntervalSelector->setModel(timeIntervalModel);
184 timeIntervalSelector->setCurrentIndex(timeIntervalToIndex(gs.defaultTimeInterval));
185 defaultTimeInterval->setPickSelector(timeIntervalSelector);
187 defaultTimeInterval = new QComboBox(rootContainer);
188 defaultTimeInterval->setModel(timeIntervalModel);
189 defaultTimeInterval->setCurrentIndex(timeIntervalToIndex(gs.defaultTimeInterval));
191 rootLayout->addWidget(defaultTimeInterval, 2, 0);
193 // QWidget *spacer = new QWidget(rootContainer);
194 // spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
195 // rootLayout->addWidget(spacer, 0, 1, 2, 1);
197 QFrame *weightFrame = new QFrame(rootContainer);
198 weightFrame->setFrameShadow(QFrame::Sunken);
199 weightFrame->setFrameStyle(QFrame::StyledPanel);
200 weightFrame->setLineWidth(2);
201 weightFrame->setMidLineWidth(2);
202 QGridLayout *weightLayout = new QGridLayout(weightFrame);
204 QStringList weightIntervalModes;
205 weightIntervalModes.append("Auto with goal weight");
206 weightIntervalModes.append("Auto without goal weight");
207 weightIntervalModes.append("Manual");
208 QStringListModel *weightIntervalModeModel =
209 new QStringListModel(weightIntervalModes, rootContainer);
211 weightIntervalMode = new QMaemo5ValueButton("Weight interval mode", rootContainer);
212 weightIntervalMode->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
213 QMaemo5ListPickSelector *weightIntervalModeSelector =
214 new QMaemo5ListPickSelector(rootContainer);
215 weightIntervalModeSelector->setModel(weightIntervalModeModel);
216 weightIntervalModeSelector->setCurrentIndex((int)gs.weightIntervalMode);
217 weightIntervalMode->setPickSelector(weightIntervalModeSelector);
218 connect(weightIntervalMode->pickSelector(), SIGNAL(selected(QString)),
219 this, SLOT(weightIntervalModeChanged(QString)));
221 weightIntervalMode = new QComboBox(rootContainer);
222 weightIntervalMode->setModel(weightIntervalModeModel);
224 weightLayout->addWidget(weightIntervalMode, 0, 0, 1, 3);
227 weightIntervalMin = new WeightSpinBox(rootContainer);
228 weightIntervalMin->setEnabled(gs.weightIntervalMode == GraphSettings::Manual);
229 weightIntervalMin->setValue(gs.weightIntervalMin);
230 weightLayout->addWidget(weightIntervalMin, 1, 0);
232 weightLayout->addWidget(new QLabel("-", rootContainer), 1, 1);
234 weightIntervalMax = new WeightSpinBox(rootContainer);
235 weightIntervalMax->setEnabled(gs.weightIntervalMode == GraphSettings::Manual);
236 weightIntervalMax->setValue(gs.weightIntervalMax);
237 weightLayout->addWidget(weightIntervalMax, 1, 2);
239 rootLayout->addWidget(weightFrame, 1, 1, 2, 1);
241 QWidget *bottomSpacer = new QWidget(rootContainer);
242 bottomSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
243 rootLayout->addWidget(bottomSpacer, 4, 0);
246 void GraphSettingsWidget::weightIntervalModeChanged(QString mode) {
247 bool isManual = mode == "Manual";
248 weightIntervalMin->setEnabled(isManual);
249 weightIntervalMax->setEnabled(isManual);