Added edit course functionality
[scorecard] / src / course-dialog.cpp
1 #include <QtGui>
2 #include <QLayout>
3 #include <QLineEdit>
4 #include <QInputContext>
5 #include <QtGui/QTableWidget>
6
7 #include "course-dialog.h"
8 #include "cell-delegate.h"
9
10
11 CourseSelectDialog::CourseSelectDialog(QWidget *parent) : QDialog(parent)
12 {
13   QWidget *centralWidget = new QWidget(this);
14   createLayout(centralWidget);
15
16   setWindowTitle(tr("ScoreCard: New Club and Course"));
17 }
18
19 void CourseSelectDialog::createLayout(QWidget *parent)
20 {
21   labelClub = new QLabel(tr("Club"));
22   labelCourse = new QLabel(tr("Course"));
23   lineEditClub = new QLineEdit;
24   lineEditCourse = new QLineEdit;
25   pushButtonNext = new QPushButton(tr("Next"));
26
27   connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
28
29   leftLayout = new QVBoxLayout;
30   leftLayout->addWidget(lineEditClub);
31   leftLayout->addWidget(lineEditCourse);
32
33   rightLayout = new QVBoxLayout;
34   rightLayout->addStretch();
35   rightLayout->addWidget(pushButtonNext);
36
37   QHBoxLayout *mainLayout = new QHBoxLayout(parent);
38   mainLayout->addLayout(leftLayout);
39   mainLayout->addLayout(rightLayout);
40
41   setLayout(mainLayout);
42 }
43
44 void CourseSelectDialog::results(QString &club, 
45                                  QString &course)
46 {  
47   club = lineEditClub->text();
48   course = lineEditCourse->text();
49 }
50
51 bool CourseSelectDialog::validate(void)
52 {
53   QString str1 = lineEditClub->text();
54   QString str2 = lineEditCourse->text();
55
56   if (str1.isEmpty() || str2.isEmpty())
57     return false;
58   
59   return true;
60 }
61
62 void CourseSelectDialog::next(void)
63 {
64   if (validate())
65     done(1);
66   else {
67     qDebug() << "CourseDialog: invalid data, cancel or correct";
68   }
69 }
70
71 ////////////////////////////////////////////////////////////////////////////////
72 ////////////////////////////////////////////////////////////////////////////////
73 ////////////////////////////////////////////////////////////////////////////////
74
75 CourseDialog::CourseDialog(QWidget *parent) : QDialog(parent)
76 {
77   resize(800, 400);
78
79   QWidget *centralWidget = new QWidget(this);
80
81   createTable();
82   createButton();
83
84   createLayout(centralWidget);
85 }
86
87 void CourseDialog::createLayout(QWidget *parent)
88 {
89   leftLayout = new QVBoxLayout;
90   leftLayout->addWidget(table);
91
92   rightLayout = new QVBoxLayout;
93   rightLayout->addWidget(pushButtonUp);
94   rightLayout->addWidget(pushButtonDown);
95   rightLayout->addWidget(pushButtonNext);
96   rightLayout->addStretch();
97   rightLayout->addWidget(pushButtonFinish);
98
99   QHBoxLayout *mainLayout = new QHBoxLayout(parent);
100   mainLayout->addLayout(leftLayout);
101   mainLayout->addLayout(rightLayout);
102   setLayout(mainLayout);
103 }
104
105 void CourseDialog::createButton(QWidget *parent)
106 {
107   pushButtonUp = new QPushButton(tr("+"));
108   connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
109
110   pushButtonDown = new QPushButton(tr("-"));
111   connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
112
113   pushButtonNext = new QPushButton(tr("Next"));
114   connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
115
116   pushButtonFinish = new QPushButton(tr("Finish"));
117   connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
118 }
119
120 void CourseDialog::createTable(QWidget *parent)
121 {
122   table = new QTableWidget(ROWS, COLS, parent);
123
124   QStringList headers;
125   headers << "" << "Par" << "HCP" << "Len" << "" << "Par" << "HCP" << "Len";
126   table->setVerticalHeaderLabels(headers);
127   table->horizontalHeader()->hide();
128   table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
129   table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
130 }
131
132 void CourseDialog::init(Course *course)
133 {
134   QTableWidgetItem *par, *hcp;
135
136   for (int i=0; i<18; i++) {
137     if (course) {
138       par = new QTableWidgetItem(course->getPar(i));
139       hcp = new QTableWidgetItem(course->getHcp(i));
140     }
141     else {
142       par = new QTableWidgetItem("4");
143       hcp = new QTableWidgetItem("9");
144     }
145     QTableWidgetItem *len = new QTableWidgetItem("");
146
147     QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
148     QColor bgColor(Qt::gray);
149     holeNum->setBackgroundColor(bgColor);
150
151     holeNum->setTextAlignment(Qt::AlignCenter);
152     par->setTextAlignment(Qt::AlignCenter);
153     hcp->setTextAlignment(Qt::AlignCenter);
154     len->setTextAlignment(Qt::AlignCenter);
155     
156     if (i < 9) {
157       table->setItem(0, i, holeNum);
158       table->setItem(1, i, par);
159       table->setItem(2, i, hcp);
160       table->setItem(3, i, len);
161     }
162     else {
163       table->setItem(4, i-9, holeNum);
164       table->setItem(5, i-9, par);
165       table->setItem(6, i-9, hcp);
166       table->setItem(7, i-9, len);
167     }
168   }
169
170 }
171
172 void CourseDialog::up(void)
173 {
174   QTableWidgetItem *item = table->currentItem();
175
176   if (!item)
177     return;
178
179   int i = (item->text()).toInt();
180   QVariant value(i+1);
181   item->setData(Qt::DisplayRole, value);
182 }
183
184 void CourseDialog::down(void)
185 {
186   QTableWidgetItem *item = table->currentItem();
187
188   if (!item)
189     return;
190
191   int i = (item->text()).toInt();
192   QVariant value(i-1);
193   item->setData(Qt::DisplayRole, value);
194 }
195
196 void CourseDialog::next(void)
197 {
198   if (table) {
199     QTableWidgetItem *item = table->currentItem();
200     moveToNextCell(item);
201     //setDefaultScore(table);
202   }
203 }
204
205 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
206 {
207   if (!item)
208     return;
209
210   QTableWidget *table = item->tableWidget();
211
212   if (!table)
213     return;
214
215   int row = table->currentRow();
216   int col = table->currentColumn();
217
218   if (col < (COLS-1)) {
219     col++;
220   }
221   else if (col == (COLS-1)) {
222     col = 0;
223     row = (row == ROW_PAR_2) ? ROW_PAR : ROW_PAR_2;
224   }
225   //qDebug() << "new cell: " << row << "/" << col;
226   table->setCurrentCell(row, col);
227 }
228
229 void CourseDialog::results(QVector<QString> &par,
230                           QVector<QString> &hcp,
231                           QVector<QString> &len)
232 {
233   for (int i = 0; i < 9; i++) {
234     QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
235     QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
236     QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
237     QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
238     QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
239     QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
240
241     if (frontPar)
242       par[i] = frontPar->text();
243     if (backPar)
244       par[i+9] = backPar->text();
245     if (frontHcp)
246       hcp[i] = frontHcp->text();
247     if (backHcp)
248       hcp[i+9] = backHcp->text();
249     if (frontLen)
250       len[i] = frontLen->text();
251     if (backLen)
252       len[i+9] = backLen->text();
253   }
254 }
255
256 // Only par is mandatory
257 bool CourseDialog::validate(void)
258 {
259   for (int i = 0; i < 9; i++) {
260     QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
261     QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
262     
263     if (!frontItem || !backItem)
264       return false;
265     
266     QString str1 = frontItem->text();
267     QString str2 = backItem->text();
268     
269     if (str1.isEmpty() || str2.isEmpty())
270       return false;
271   }
272   return true;
273 }
274
275 void CourseDialog::finish(void)
276 {
277   if (validate())
278     done(1);
279   else {
280     qDebug() << "CourseDialog: invalid data, cancel or correct";
281   }
282 }
283
284