1 #include "settingswindow.h"
6 #include <QStringListModel>
14 QStringList timeIntervalStrings() {
15 QStringList timeIntervals;
16 timeIntervals.append("1 week");
17 timeIntervals.append("1 month");
18 timeIntervals.append("3 months");
19 timeIntervals.append("6 months");
20 timeIntervals.append("1 year");
21 timeIntervals.append("all");
24 int timeIntervalToIndex(int days) {
32 default: Q_ASSERT(0 && "unknown time interval");
34 return 0; //unreachable
36 int indexToTimeInterval(int index) {
44 default: Q_ASSERT(0 && "unknown time interval index");
46 return 0; //unreachable
50 SettingsWindow::SettingsWindow(QWidget *parent) :
54 setAttribute(Qt::WA_Maemo5StackedWindow);
57 setWindowTitle("WeightGraph");
59 QWidget *rootContainer = new QWidget(this);
60 QVBoxLayout *rootLayout = new QVBoxLayout(rootContainer);
62 rootLayout->addWidget(makeGeneralSettingsWidget(rootContainer));
63 rootLayout->addWidget(makeGraphSettingsWidget(rootContainer));
65 setCentralWidget(rootContainer);
68 QWidget *SettingsWindow::makeGeneralSettingsWidget(QWidget *parentContainer) {
69 QWidget *container = new QWidget(parentContainer);
70 QGridLayout *lo = new QGridLayout(container);
72 QStringList units; units.append("kg"); units.append("lb");
73 QStringListModel *weightUnitModel = new QStringListModel(units, container);
75 weightUnit = new QMaemo5ValueButton("Unit", container);
76 weightUnit->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
77 QMaemo5ListPickSelector *weightUnitSelector = new QMaemo5ListPickSelector(container);
78 weightUnitSelector->setModel(weightUnitModel);
79 weightUnitSelector->setCurrentIndex(Settings::weightUnit() == "kg" ? 0 : 1);
80 weightUnit->setPickSelector(weightUnitSelector);
81 connect(weightUnit->pickSelector(), SIGNAL(selected(QString)),
82 Settings::self(), SLOT(setWeightUnitAndSync(QString)));
84 weightUnit = new QComboBox(container);
85 weightUnit->setModel(weightUnitModel);
88 lo->addWidget(weightUnit, 0, 0);
90 QFrame *goalFrame = new QFrame(container);
91 goalFrame->setFrameShadow(QFrame::Sunken);
92 goalFrame->setFrameStyle(QFrame::StyledPanel);
93 goalFrame->setLineWidth(2);
94 goalFrame->setMidLineWidth(2);
95 QHBoxLayout *goalLayout = new QHBoxLayout(goalFrame);
97 goalLayout->addWidget(new QLabel("Goal weight:", container));
99 goalMin = new WeightSpinBox(container);
100 goalMin->setValue(Settings::goalWeightMin());
101 goalLayout->addWidget(goalMin);
103 goalLayout->addWidget(new QLabel("-", container));
105 goalMax = new WeightSpinBox(container);
106 goalMax->setValue(Settings::goalWeightMax());
107 goalLayout->addWidget(goalMax);
108 lo->addWidget(goalFrame, 0, 1);
110 grabZoomKeys = new QPushButton("Use zoom/volume keys to zoom", container);
111 grabZoomKeys->setCheckable(true);
112 grabZoomKeys->setChecked(Settings::grabZoomKeys());
113 lo->addWidget(grabZoomKeys, 1, 0, 1, 2);
118 QWidget *SettingsWindow::makeGraphSettingsWidget(QWidget *parentContainer) {
119 QTabWidget *tabWidget = new QTabWidget(parentContainer);
121 graphSettingsList = new QList<GraphSettingsWidget*>();
123 QStringList graphIds; graphIds.append("Small"); graphIds.append("Big");
124 foreach(QString id, graphIds) {
125 GraphSettingsWidget *gsw = new GraphSettingsWidget(id, tabWidget);
126 graphSettingsList->append(gsw);
127 tabWidget->addTab(gsw, id+" graph");
133 void SettingsWindow::closeEvent(QCloseEvent *event)
135 //Note: Weight unit not saved as it is saved on change.
136 Settings::setGoalWeightMin(goalMin->value());
137 Settings::setGoalWeightMax(goalMax->value());
138 Settings::setGrabZoomKeys(grabZoomKeys->isChecked());
139 foreach(GraphSettingsWidget *gsw, *graphSettingsList) {
141 gs.goalWeightEnabled = gsw->goalWeightEnabled;
143 QMaemo5ListPickSelector *picker =
144 dynamic_cast<QMaemo5ListPickSelector*>(gsw->weightIntervalMode->pickSelector());
145 gs.weightIntervalMode = (GraphSettings::WeightIntervalMode)picker->currentIndex();
147 gs.weightIntervalMode =
148 (GraphSettings::WeightIntervalMode)gsw->weightIntervalMode->currentIndex();
150 gs.weightIntervalMin = gsw->weightIntervalMin->value();
151 gs.weightIntervalMax = gsw->weightIntervalMax->value();
153 QMaemo5ListPickSelector *picker2 =
154 dynamic_cast<QMaemo5ListPickSelector*>(gsw->defaultTimeInterval->pickSelector());
155 gs.defaultTimeInterval = indexToTimeInterval(picker2->currentIndex());
157 gs.defaultTimeInterval
158 = indexToTimeInterval(gsw->defaultTimeInterval->currentIndex());
160 Settings::setGraphSettingsAndSync(gsw->graphId, gs);
162 QMainWindow::closeEvent(event);
165 GraphSettingsWidget::GraphSettingsWidget(QString graphId, QWidget *parent) :
166 QWidget(parent), graphId(graphId) {
167 QWidget *rootContainer = new QWidget(this);
168 QGridLayout *rootLayout = new QGridLayout(rootContainer);
170 QWidget *topSpacer = new QWidget(rootContainer);
171 topSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
172 rootLayout->addWidget(topSpacer, 0, 0);
174 GraphSettings gs = Settings::graphSettings(graphId);
176 goalWeightEnabled = new QPushButton("Show goal weight", rootContainer);
177 goalWeightEnabled->setCheckable(true);
178 goalWeightEnabled->setChecked(gs.goalWeightEnabled);
179 rootLayout->addWidget(goalWeightEnabled, 1, 0);
181 QStringListModel *timeIntervalModel =
182 new QStringListModel(timeIntervalStrings(), rootContainer);
184 defaultTimeInterval= new QMaemo5ValueButton("Time interval", rootContainer);
185 defaultTimeInterval->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
186 QMaemo5ListPickSelector *timeIntervalSelector =
187 new QMaemo5ListPickSelector(rootContainer);
188 timeIntervalSelector->setModel(timeIntervalModel);
189 timeIntervalSelector->setCurrentIndex(timeIntervalToIndex(gs.defaultTimeInterval));
190 defaultTimeInterval->setPickSelector(timeIntervalSelector);
192 defaultTimeInterval = new QComboBox(rootContainer);
193 defaultTimeInterval->setModel(timeIntervalModel);
194 defaultTimeInterval->setCurrentIndex(timeIntervalToIndex(gs.defaultTimeInterval));
196 rootLayout->addWidget(defaultTimeInterval, 2, 0);
198 QFrame *weightFrame = new QFrame(rootContainer);
199 weightFrame->setFrameShadow(QFrame::Sunken);
200 weightFrame->setFrameStyle(QFrame::StyledPanel);
201 weightFrame->setLineWidth(2);
202 weightFrame->setMidLineWidth(2);
203 QGridLayout *weightLayout = new QGridLayout(weightFrame);
205 QStringList weightIntervalModes;
206 weightIntervalModes.append("Auto with goal weight");
207 weightIntervalModes.append("Auto without goal weight");
208 weightIntervalModes.append("Manual");
209 QStringListModel *weightIntervalModeModel =
210 new QStringListModel(weightIntervalModes, rootContainer);
212 weightIntervalMode = new QMaemo5ValueButton("Weight interval mode", rootContainer);
213 weightIntervalMode->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
214 QMaemo5ListPickSelector *weightIntervalModeSelector =
215 new QMaemo5ListPickSelector(rootContainer);
216 weightIntervalModeSelector->setModel(weightIntervalModeModel);
217 weightIntervalModeSelector->setCurrentIndex((int)gs.weightIntervalMode);
218 weightIntervalMode->setPickSelector(weightIntervalModeSelector);
219 connect(weightIntervalMode->pickSelector(), SIGNAL(selected(QString)),
220 this, SLOT(weightIntervalModeChanged(QString)));
222 weightIntervalMode = new QComboBox(rootContainer);
223 weightIntervalMode->setModel(weightIntervalModeModel);
225 weightLayout->addWidget(weightIntervalMode, 0, 0, 1, 3);
228 weightIntervalMin = new WeightSpinBox(rootContainer);
229 weightIntervalMin->setEnabled(gs.weightIntervalMode == GraphSettings::Manual);
230 weightIntervalMin->setValue(gs.weightIntervalMin);
231 weightLayout->addWidget(weightIntervalMin, 1, 0);
233 weightLayout->addWidget(new QLabel("-", rootContainer), 1, 1);
235 weightIntervalMax = new WeightSpinBox(rootContainer);
236 weightIntervalMax->setEnabled(gs.weightIntervalMode == GraphSettings::Manual);
237 weightIntervalMax->setValue(gs.weightIntervalMax);
238 weightLayout->addWidget(weightIntervalMax, 1, 2);
240 rootLayout->addWidget(weightFrame, 1, 1, 2, 1);
242 QWidget *bottomSpacer = new QWidget(rootContainer);
243 bottomSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
244 rootLayout->addWidget(bottomSpacer, 4, 0);
247 void GraphSettingsWidget::weightIntervalModeChanged(QString mode) {
248 bool isManual = mode == "Manual";
249 weightIntervalMin->setEnabled(isManual);
250 weightIntervalMax->setEnabled(isManual);