1d54ac0b4522bfbe9995771702c81993f0f1f8a8
[weightgraph] / weightgraph / editwindow.cpp
1 #include "editwindow.h"
2 #include <QHBoxLayout>
3 #include <QVBoxLayout>
4 #include <QMessageBox>
5 #include <QLabel>
6 #ifdef Q_WS_MAEMO_5
7 #include <QMaemo5DatePickSelector>
8 #endif
9 extern WeightDataModel *wdm;
10
11 EditWindow::EditWindow(QWidget *parent) :
12     QMainWindow(parent)
13 {
14 #ifdef Q_WS_MAEMO_5
15   setAttribute(Qt::WA_Maemo5StackedWindow);
16 #endif
17
18   setWindowTitle("WeightGraph");
19
20   QWidget *centralContainer = new QWidget(parent);
21   QHBoxLayout *horiz = new QHBoxLayout(centralContainer);
22
23   weightView.setModel(wdm);
24   weightView.setMinimumWidth(540);
25   horiz->addWidget(&weightView);
26
27   QWidget *rightContainer = new QWidget(centralContainer);
28   QVBoxLayout *right = new QVBoxLayout(rightContainer);
29
30   addButton.setText("Add");
31   addButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
32   connect(&addButton, SIGNAL(clicked()), this, SLOT(addWeight()));
33   right->addWidget(&addButton);
34
35   removeButton.setText("Remove");
36   removeButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
37   connect(&removeButton, SIGNAL(clicked()), this, SLOT(removeSelected()));
38   right->addWidget(&removeButton);
39
40   editButton.setText("Edit");
41   editButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
42   connect(&editButton, SIGNAL(clicked()), this, SLOT(editSelected()));
43   right->addWidget(&editButton);
44
45   horiz->addWidget(rightContainer);
46
47   setCentralWidget(centralContainer);
48
49   connect(weightView.selectionModel(),
50           SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
51           this, SLOT(updateButtons()));
52   updateButtons();
53
54 }
55 AddWeightDialog::AddWeightDialog(QWidget *parent)
56     : QDialog(parent)
57 {
58   setModal(true);
59   QGridLayout *layout = new QGridLayout(this);
60
61   QLabel *dateLabel = new QLabel("Date:", this);
62   //dateLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Maximum);
63   layout->addWidget(dateLabel, 0, 0);
64
65 #ifdef Q_WS_MAEMO_5
66   date = new QMaemo5ValueButton(this);
67   QMaemo5DatePickSelector *picker = new QMaemo5DatePickSelector(this);
68   picker->setCurrentDate(QDate::currentDate());
69   date->setPickSelector(picker);
70 #else
71   date = new QDateEdit(this);
72   date->setDate(QDate::currentDate());
73   date->setDisplayFormat("yyyy-MM-dd");
74 #endif
75   layout->addWidget(date, 1, 0);
76
77   QLabel *weightLabel = new QLabel("Weight:", this);
78   //weightLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Maximum);
79   layout->addWidget(weightLabel, 0, 1);
80
81   weight = new WeightSpinBox(this);
82   layout->addWidget(weight, 1, 1);
83
84   QPushButton *cancelButton = new QPushButton("Cancel", this);
85   connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
86   layout->addWidget(cancelButton, 2, 0);
87
88   QPushButton *addButton = new QPushButton("Add", this);
89   connect(addButton, SIGNAL(clicked()), this, SLOT(accept()));
90   layout->addWidget(addButton, 2, 1);
91 }
92 WeightDataModel::DateWeight AddWeightDialog::getDateWeight()
93 {
94   WeightDataModel::DateWeight ret;
95 #ifdef Q_WS_MAEMO_5
96   ret.date = dynamic_cast<QMaemo5DatePickSelector*>(date->pickSelector())->currentDate();
97 #else
98   ret.date = date->date();
99 #endif
100   ret.weight = weight->value();
101   return ret;
102 }
103
104 void EditWindow::updateButtons()
105 {
106   if (weightView.selectionModel()->selection().indexes().size() == 1) {
107     removeButton.setEnabled(true);
108     editButton.setEnabled(true);
109   }
110   else {
111     removeButton.setEnabled(false);
112     editButton.setEnabled(false);
113   }
114 }
115
116 extern WeightDataModel *wdm;
117 void EditWindow::addWeight()
118 {
119   AddWeightDialog d;
120   int code = d.exec();
121   if (code == QDialog::Accepted) {
122     WeightDataModel::DateWeight dw = d.getDateWeight();
123     if (wdm->dateExists(dw.date)) {
124       QMessageBox::warning(this, "Duplicate", "A weight for this date already exists.\n"
125                                               "Only one weight per date allowed.");
126       return;
127     }
128     wdm->setWeightForDate(dw);
129   }
130 }
131
132 void EditWindow::removeSelected()
133 {
134   int answer =
135       QMessageBox::question(this, "Remove?", "Really remove selected entry?",
136                             QMessageBox::No, QMessageBox::Yes);
137   if (answer == QMessageBox::Yes) {
138     QModelIndexList indexes = weightView.selectionModel()->selection().indexes();
139     foreach(QModelIndex i, indexes)
140       wdm->removeRows(i.row(), 1);
141   }
142 }
143
144 void EditWindow::editSelected()
145 {
146   QModelIndexList indexes = weightView.selectionModel()->selection().indexes();
147   if (indexes.size() == 1)
148     weightView.edit(wdm->index(indexes.first().row(), 1));
149 }