1 #include "editwindow.h"
7 #include <QMaemo5DatePickSelector>
9 extern WeightDataModel *wdm;
11 EditWindow::EditWindow(QWidget *parent) :
12 QMainWindow(parent), shown(false)
15 setAttribute(Qt::WA_Maemo5StackedWindow);
18 setWindowTitle("WeightGraph");
20 QWidget *centralContainer = new QWidget(parent);
21 QHBoxLayout *horiz = new QHBoxLayout(centralContainer);
23 weightView.setModel(wdm);
24 weightView.setMinimumWidth(540);
25 horiz->addWidget(&weightView);
27 QWidget *rightContainer = new QWidget(centralContainer);
28 QVBoxLayout *right = new QVBoxLayout(rightContainer);
30 addButton.setText("Add");
31 addButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
32 connect(&addButton, SIGNAL(clicked()), this, SLOT(addWeight()));
33 right->addWidget(&addButton);
35 removeButton.setText("Remove");
36 removeButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
37 connect(&removeButton, SIGNAL(clicked()), this, SLOT(removeSelected()));
38 right->addWidget(&removeButton);
40 editButton.setText("Edit");
41 editButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
42 connect(&editButton, SIGNAL(clicked()), this, SLOT(editSelected()));
43 right->addWidget(&editButton);
45 horiz->addWidget(rightContainer);
47 setCentralWidget(centralContainer);
49 connect(weightView.selectionModel(),
50 SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
51 this, SLOT(updateButtons()));
55 AddWeightDialog::AddWeightDialog(QWidget *parent)
59 QGridLayout *layout = new QGridLayout(this);
61 QLabel *dateLabel = new QLabel("Date:", this);
62 layout->addWidget(dateLabel, 0, 0);
65 date = new QMaemo5ValueButton(this);
66 QMaemo5DatePickSelector *picker = new QMaemo5DatePickSelector(this);
67 picker->setCurrentDate(QDate::currentDate());
68 date->setPickSelector(picker);
70 date = new QDateEdit(this);
71 date->setDate(QDate::currentDate());
72 date->setDisplayFormat("yyyy-MM-dd");
74 layout->addWidget(date, 1, 0);
76 QLabel *weightLabel = new QLabel("Weight:", this);
77 layout->addWidget(weightLabel, 0, 1);
79 weight = new WeightSpinBox(this);
80 layout->addWidget(weight, 1, 1);
82 QPushButton *cancelButton = new QPushButton("Cancel", this);
83 connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
84 layout->addWidget(cancelButton, 2, 0);
86 QPushButton *addButton = new QPushButton("Add", this);
87 connect(addButton, SIGNAL(clicked()), this, SLOT(accept()));
88 layout->addWidget(addButton, 2, 1);
90 WeightDataModel::DateWeight AddWeightDialog::getDateWeight()
92 WeightDataModel::DateWeight ret;
94 ret.date = dynamic_cast<QMaemo5DatePickSelector*>(date->pickSelector())->currentDate();
96 ret.date = date->date();
98 ret.weight = weight->value();
102 void EditWindow::updateButtons()
104 if (weightView.selectionModel()->selection().indexes().size() == 1) {
105 removeButton.setEnabled(true);
106 editButton.setEnabled(true);
109 removeButton.setEnabled(false);
110 editButton.setEnabled(false);
114 extern WeightDataModel *wdm;
115 void EditWindow::addWeight()
119 if (code == QDialog::Accepted) {
120 WeightDataModel::DateWeight dw = d.getDateWeight();
121 if (wdm->dateExists(dw.date)) {
122 QMessageBox::warning(this, "Duplicate", "A weight for this date already exists.\n"
123 "Only one weight per date allowed.");
126 wdm->setWeightForDate(dw);
127 weightView.scrollTo(wdm->indexOfDate(dw.date), QAbstractItemView::PositionAtCenter);
131 void EditWindow::removeSelected()
134 QMessageBox::question(this, "Remove?", "Really remove selected entry?",
135 QMessageBox::No, QMessageBox::Yes);
136 if (answer == QMessageBox::Yes) {
137 QModelIndexList indexes = weightView.selectionModel()->selection().indexes();
138 foreach(QModelIndex i, indexes)
139 wdm->removeRows(i.row(), 1);
143 void EditWindow::editSelected()
145 QModelIndexList indexes = weightView.selectionModel()->selection().indexes();
146 if (indexes.size() == 1)
147 weightView.edit(wdm->index(indexes.first().row(), 1));
150 void EditWindow::show()
153 // scrollToBottom must be here: it will not scroll all the way
154 // to the bottom when called in the constructor because it'll
155 // receive the wrong window geometry while hidden.
157 weightView.scrollToBottom();