Initial commit
[golf-scorecard] / src / basicscorecard.cpp
1 #include "basicscorecard.h"\r
2 #include "ui_basicscorecard.h"\r
3 #include "datahandling.h"\r
4 #include "courses.h"\r
5 #include <QtDebug>\r
6 \r
7 BasicScorecard::BasicScorecard(QWidget *parent) :\r
8     QMainWindow(parent),\r
9     ui(new Ui::BasicScorecard)\r
10 {\r
11     ui->setupUi(this);\r
12     currentCourse = 1;\r
13     loadPlayers();\r
14     loadCourses();\r
15     hideNotNeededFields();\r
16     drawPlayers();\r
17     displayCourseData();\r
18     calculateHcpsPerCourse();\r
19 }\r
20 \r
21 void BasicScorecard::loadPlayers()\r
22 {\r
23     datahandling *CAPData = datahandling::instance();\r
24 \r
25     players << CAPData->selectedPlayers;\r
26     qDebug() << players;\r
27 \r
28     for(int i = 0; i < players.count(); i++)\r
29     {\r
30         for(int j = 0; j < 19; j++)\r
31         {\r
32             scores[i][j] = 0;\r
33             hcpPerCourse[i][j] = 0;\r
34         }\r
35     }\r
36 \r
37     for(int i = 0; i < players.count(); i++)\r
38     {\r
39         hcp[i] = CAPData->selectedPlayersHandicap[i].toInt();\r
40         qDebug() << hcp[i];\r
41     }\r
42 \r
43     for(int y = 0; y < 19; y++)\r
44     {\r
45         hcpOrder[y] = 0;\r
46     }\r
47 \r
48 \r
49 \r
50 }\r
51 \r
52 void BasicScorecard::drawPlayers()\r
53 {\r
54     if(players.count() >= 1 )\r
55     {\r
56         ui->label_leaderboardPlayer1->setText(players[0]);\r
57         ui->label_player1->setText(players[0]);\r
58     }\r
59     if(players.count() >= 2)\r
60     {\r
61         ui->label_leaderboardPlayer2->setText(players[1]);\r
62         ui->label_player2->setText(players[1]);\r
63     }\r
64     if(players.count() >= 3)\r
65     {\r
66         ui->label_leaderboardPlayer3->setText(players[2]);\r
67         ui->label_player3->setText(players[2]);\r
68     }\r
69     if(players.count() >= 4)\r
70     {\r
71         ui->label_leaderboardPlayer4->setText(players[3]);\r
72         ui->label_player4->setText(players[3]);\r
73     }\r
74 }\r
75 \r
76 void BasicScorecard::saveShots()\r
77 {\r
78     if(players.count() >= 1 )\r
79         scores[0][currentCourse] = ui->label_player1_score->text().toInt();\r
80     if(players.count() >= 2 )\r
81         scores[1][currentCourse] = ui->label_player2_score->text().toInt();\r
82     if(players.count() >= 3 )\r
83         scores[2][currentCourse] = ui->label_player3_score->text().toInt();\r
84     if(players.count() >= 4 )\r
85         scores[3][currentCourse] = ui->label_player4_score->text().toInt();\r
86 }\r
87 \r
88 void BasicScorecard::loadShots()\r
89 {\r
90     if(players.count() >= 1 )\r
91         ui->label_player1_score->setText(QString::number(scores[0][currentCourse]));\r
92     if(players.count() >= 2 )\r
93         ui->label_player2_score->setText(QString::number(scores[1][currentCourse]));\r
94     if(players.count() >= 3 )\r
95         ui->label_player3_score->setText(QString::number(scores[2][currentCourse]));\r
96     if(players.count() >= 4 )\r
97         ui->label_player4_score->setText(QString::number(scores[3][currentCourse]));\r
98 }\r
99 \r
100 void BasicScorecard::loadCourses()\r
101 {\r
102     datahandling *CAPData = datahandling::instance();\r
103 \r
104     const QList<holeData>& holeData_2 = CAPData->getHoleData();\r
105     const QList<whiteTee>& whiteTee_2 = CAPData->getWhiteTee();\r
106     const QList<yellowTee>& yellowTee_2 = CAPData->getYellowTee();\r
107     const QList<blueTee>& blueTee_2 = CAPData->getBlueTee();\r
108     const QList<redTee>& redTee_2 = CAPData->getRedTee();\r
109 \r
110     courseDataName << "";\r
111     courseDataPar << "";\r
112     courseDataHcp << "";\r
113     courseDataWhite << "";\r
114     courseDataYellow << "";\r
115     courseDataRed << "";\r
116     courseDataBlue << "";\r
117 \r
118     foreach(holeData hD, holeData_2)\r
119     {\r
120         courseDataName.push_back(hD.m_id);\r
121         courseDataPar.push_back(hD.m_par);\r
122         courseDataHcp.push_back(hD.m_hcp);\r
123     }\r
124 \r
125     foreach(whiteTee wT, whiteTee_2)\r
126     {\r
127         courseDataWhite.push_back(wT.m_length);\r
128     }\r
129 \r
130     foreach(yellowTee yT, yellowTee_2)\r
131     {\r
132         courseDataYellow.push_back(yT.m_length);\r
133     }\r
134 \r
135     foreach(blueTee bT, blueTee_2)\r
136     {\r
137         courseDataBlue.push_back(bT.m_length);\r
138     }\r
139 \r
140     foreach(redTee rT, redTee_2)\r
141     {\r
142         courseDataRed.push_back(rT.m_length);\r
143     }\r
144 }\r
145 \r
146 void BasicScorecard::displayCourseData()\r
147 {\r
148     ui->label_course->setText(courseDataName[currentCourse]);\r
149     ui->label_par->setText(courseDataPar[currentCourse]);\r
150     ui->label_hcp->setText(courseDataHcp[currentCourse]);\r
151     ui->label_white->setText(courseDataWhite[currentCourse]);\r
152     ui->label_yellow->setText(courseDataYellow[currentCourse]);\r
153     ui->label_red->setText(courseDataRed[currentCourse]);\r
154     ui->label_blue->setText(courseDataBlue[currentCourse]);\r
155 \r
156     for(int i = 0; i < players.count(); i++)\r
157     {\r
158         qDebug() << hcpPerCourse[i][currentCourse];\r
159     }\r
160     qDebug() << "----------";\r
161 \r
162 }\r
163 \r
164 void BasicScorecard::updateLeaderboard()\r
165 {\r
166     int sp[4];\r
167     int hcpsp[4];\r
168     int order[4];\r
169     int flag[4];\r
170     int flag2[4];\r
171     int set = 0;\r
172 \r
173     for(int i = 0; i < 4; i++)\r
174     {\r
175         sp[i] = 0;\r
176         hcpsp[i] = 0;\r
177         order[i] = 0;\r
178         flag[i] = 0;\r
179         flag2[i] = 0;\r
180     }\r
181 \r
182     for(int i = 0; i < players.count(); i++)\r
183     {\r
184         for(int j = 1; j < 19; j++)\r
185         {\r
186             if(scores[i][j] != 0)\r
187             {\r
188                 sp[i] = sp[i] + (scores[i][j] - courseDataPar[j].toInt());\r
189                 hcpsp[i] = hcpsp[i] + (scores[i][j] - hcpPerCourse[i][j] - courseDataPar[j].toInt());\r
190             }\r
191         }\r
192     }\r
193 \r
194     QList<int> list;\r
195     for(int i = 0; i < players.count(); i++)\r
196     {\r
197         list.append(sp[i]);\r
198     }\r
199 \r
200     qSort(list);\r
201 \r
202     for(int i = 0; i < players.count(); i++)\r
203     {\r
204         order[i] = (int)list.takeFirst();\r
205     }\r
206 \r
207     for(int i = 0; i < players.count(); i++)\r
208     {\r
209         for(int j = 0; j < players.count(); j++)\r
210         {\r
211             if((order[i] == sp[j]))\r
212             {\r
213                 if(flag[0] != 1 && set == 0 && flag2[j] == 0)\r
214                 {\r
215                     flag[0] = 1;\r
216                     set = 1;\r
217 \r
218                     if(j == 0)\r
219                         flag2[0] = 1;\r
220                     else if(j == 1 && players.count() >= 2)\r
221                         flag2[1] = 1;\r
222                     else if(j == 2 && players.count() >= 3)\r
223                         flag2[2] = 1;\r
224                     else if(j == 3 && players.count() >= 4)\r
225                         flag2[3] = 1;\r
226 \r
227 \r
228                     ui->label_leaderboardPlayer1->setText(players[j]);\r
229 \r
230                     if(sp[j] > 0)\r
231                         ui->label_leaderboardPlayer1_2->setText("+"+QString::number(sp[j]));\r
232                     else if (sp[j] == 0)\r
233                         ui->label_leaderboardPlayer1_2->setText("PAR");\r
234                     else\r
235                         ui->label_leaderboardPlayer1_2->setText(QString::number(sp[j]));\r
236 \r
237                     if(hcpsp[j] > 0)\r
238                         ui->label_leaderboardPlayer1_3->setText("+"+QString::number(hcpsp[j]));\r
239                     else if (hcpsp[j] == 0)\r
240                         ui->label_leaderboardPlayer1_3->setText("PAR");\r
241                     else\r
242                         ui->label_leaderboardPlayer1_3->setText(QString::number(hcpsp[j]));\r
243                 }\r
244                 else if(flag[1] != 1 && set == 0 && flag2[j] == 0 && players.count() >= 2)\r
245                 {\r
246                     flag[1] = 1;\r
247                     set = 1;\r
248 \r
249                     if(j == 0)\r
250                         flag2[0] = 1;\r
251                     else if(j == 1 && players.count() >= 2)\r
252                         flag2[1] = 1;\r
253                     else if(j == 2 && players.count() >= 3)\r
254                         flag2[2] = 1;\r
255                     else if(j == 3 && players.count() >= 4)\r
256                         flag2[3] = 1;\r
257 \r
258                     ui->label_leaderboardPlayer2->setText(players[j]);\r
259 \r
260                     if(sp[j] > 0)\r
261                         ui->label_leaderboardPlayer2_2->setText("+"+QString::number(sp[j]));\r
262                     else if (sp[j] == 0)\r
263                         ui->label_leaderboardPlayer2_2->setText("PAR");\r
264                     else\r
265                         ui->label_leaderboardPlayer2_2->setText(QString::number(sp[j]));\r
266 \r
267                     if(hcpsp[j] > 0)\r
268                         ui->label_leaderboardPlayer2_3->setText("+"+QString::number(hcpsp[j]));\r
269                     else if (hcpsp[j] == 0)\r
270                         ui->label_leaderboardPlayer2_3->setText("PAR");\r
271                     else\r
272                         ui->label_leaderboardPlayer2_3->setText(QString::number(hcpsp[j]));\r
273                 }\r
274                 else if(flag[2] != 1 && set == 0 && flag2[j] == 0 && players.count() >= 3)\r
275                 {\r
276                     flag[2] = 1;\r
277                     set = 1;\r
278 \r
279                     if(j == 0)\r
280                         flag2[0] = 1;\r
281                     else if(j == 1 && players.count() >= 2)\r
282                         flag2[1] = 1;\r
283                     else if(j == 2 && players.count() >= 3)\r
284                         flag2[2] = 1;\r
285                     else if(j == 3 && players.count() >= 4)\r
286                         flag2[3] = 1;\r
287 \r
288                     ui->label_leaderboardPlayer3->setText(players[j]);\r
289 \r
290                     if(sp[j] > 0)\r
291                         ui->label_leaderboardPlayer3_2->setText("+"+QString::number(sp[j]));\r
292                     else if (sp[j] == 0)\r
293                         ui->label_leaderboardPlayer3_2->setText("PAR");\r
294                     else\r
295                         ui->label_leaderboardPlayer3_2->setText(QString::number(sp[j]));\r
296 \r
297                     if(hcpsp[j] > 0)\r
298                         ui->label_leaderboardPlayer3_3->setText("+"+QString::number(hcpsp[j]));\r
299                     else if (hcpsp[j] == 0)\r
300                         ui->label_leaderboardPlayer3_3->setText("PAR");\r
301                     else\r
302                         ui->label_leaderboardPlayer3_3->setText(QString::number(hcpsp[j]));\r
303                 }\r
304                 else if(flag[3] != 1 && set == 0 && flag2[j] == 0 && players.count() >= 4)\r
305                 {\r
306                     flag[3] = 1;\r
307                     set = 1;\r
308 \r
309                     if(j == 0)\r
310                         flag2[0] = 1;\r
311                     else if(j == 1 && players.count() >= 2)\r
312                         flag2[1] = 1;\r
313                     else if(j == 2 && players.count() >= 3)\r
314                         flag2[2] = 1;\r
315                     else if(j == 3 && players.count() >= 4)\r
316                         flag2[3] = 1;\r
317 \r
318                     ui->label_leaderboardPlayer4->setText(players[j]);\r
319 \r
320                     if(sp[j] > 0)\r
321                         ui->label_leaderboardPlayer4_2->setText("+"+QString::number(sp[j]));\r
322                     else if (sp[j] == 0)\r
323                         ui->label_leaderboardPlayer4_2->setText("PAR");\r
324                     else\r
325                         ui->label_leaderboardPlayer4_2->setText(QString::number(sp[j]));\r
326 \r
327                     if(hcpsp[j] > 0)\r
328                         ui->label_leaderboardPlayer4_3->setText("+"+QString::number(hcpsp[j]));\r
329                     else if (hcpsp[j] == 0)\r
330                         ui->label_leaderboardPlayer4_3->setText("PAR");\r
331                     else\r
332                         ui->label_leaderboardPlayer4_3->setText(QString::number(hcpsp[j]));\r
333                 }\r
334                 set = 0;\r
335             }    \r
336         }\r
337     }\r
338 }\r
339 \r
340 void BasicScorecard::calculateHcpsPerCourse()\r
341 {\r
342     int temp = 1;\r
343     bool found = false;\r
344 \r
345     for(int i = 1; i < 19; i++)\r
346     {\r
347         for(int j = 1; j < 19; j++)\r
348         {\r
349             if(courseDataHcp[j].toInt() == temp && found == false)\r
350             {\r
351                 hcpOrder[i] = j;\r
352                 temp++;\r
353                 found = true;\r
354             }\r
355 \r
356         }\r
357         found = false;\r
358     }\r
359     int k=1;\r
360     int temp2;\r
361     for(int j = 0; j < players.count(); j++)\r
362     {\r
363         for(int i = 0; i < hcp[j]; i++)\r
364         {\r
365             if(k == 19)\r
366                 k = 1;\r
367             temp2 = hcpOrder[k];\r
368             hcpPerCourse[j][temp2]++;\r
369             k++;\r
370         }\r
371         k=1;\r
372     }\r
373 }\r
374 \r
375 void BasicScorecard::on_player1_up_clicked()\r
376 {\r
377     int temp;\r
378     temp = ui->label_player1_score->text().toInt();\r
379     if(temp < 99)\r
380         temp++;\r
381     ui->label_player1_score->setText(QString::number(temp));\r
382 }\r
383 \r
384 void BasicScorecard::on_player1_down_clicked()\r
385 {\r
386     int temp;\r
387     temp = ui->label_player1_score->text().toInt();\r
388     if(temp > 0)\r
389         temp--;\r
390     ui->label_player1_score->setText(QString::number(temp));\r
391 }\r
392 \r
393 void BasicScorecard::on_player2_up_clicked()\r
394 {\r
395     int temp;\r
396     temp = ui->label_player2_score->text().toInt();\r
397     if(temp < 99)\r
398         temp++;\r
399     ui->label_player2_score->setText(QString::number(temp));\r
400 }\r
401 \r
402 void BasicScorecard::on_player2_down_clicked()\r
403 {\r
404     int temp;\r
405     temp = ui->label_player2_score->text().toInt();\r
406     if(temp > 0)\r
407         temp--;\r
408     ui->label_player2_score->setText(QString::number(temp));\r
409 }\r
410 \r
411 void BasicScorecard::on_player3_up_clicked()\r
412 {\r
413     int temp;\r
414     temp = ui->label_player3_score->text().toInt();\r
415     if(temp < 99)\r
416         temp++;\r
417     ui->label_player3_score->setText(QString::number(temp));\r
418 }\r
419 \r
420 void BasicScorecard::on_player3_down_clicked()\r
421 {\r
422     int temp;\r
423     temp = ui->label_player3_score->text().toInt();\r
424     if(temp > 0)\r
425         temp--;\r
426     ui->label_player3_score->setText(QString::number(temp));\r
427 }\r
428 \r
429 void BasicScorecard::on_player4_up_clicked()\r
430 {\r
431     int temp;\r
432     temp = ui->label_player4_score->text().toInt();\r
433     if(temp < 99)\r
434         temp++;\r
435     ui->label_player4_score->setText(QString::number(temp));\r
436 }\r
437 \r
438 void BasicScorecard::on_player4_down_clicked()\r
439 {\r
440     int temp;\r
441     temp = ui->label_player4_score->text().toInt();\r
442     if(temp > 0)\r
443         temp--;\r
444     ui->label_player4_score->setText(QString::number(temp));\r
445 }\r
446 \r
447 void BasicScorecard::on_pushButton_nextCourse_clicked()\r
448 {\r
449     saveShots();\r
450 \r
451     if(currentCourse < 18)\r
452         currentCourse++;\r
453     else\r
454         currentCourse = 1;\r
455 \r
456     loadShots();\r
457     displayCourseData();\r
458     updateLeaderboard();\r
459 \r
460 }\r
461 \r
462 \r
463 void BasicScorecard::on_pushButton_prevCourse_clicked()\r
464 {\r
465     saveShots();\r
466 \r
467     if(currentCourse > 1)\r
468         currentCourse--;\r
469     else\r
470         currentCourse = 18;\r
471 \r
472     loadShots();\r
473     displayCourseData();\r
474     updateLeaderboard();\r
475 }\r
476 \r
477 void BasicScorecard::on_courseMap_clicked()\r
478 {\r
479 \r
480 }\r
481 \r
482 void BasicScorecard::hideNotNeededFields()\r
483 {\r
484     if(players.count() == 1)\r
485     {\r
486         ui->label_player2->setText("");\r
487         ui->label_player2_score->setText("");;\r
488         ui->player2_down->setHidden(true);\r
489         ui->player2_up->setHidden(true);\r
490         ui->label_leaderboardPlayer2->setHidden(true);\r
491         ui->label_leaderboardPlayer2_2->setHidden(true);\r
492         ui->label_leaderboardPlayer2_3->setHidden(true);\r
493 \r
494         ui->label_player3->setText("");\r
495         ui->label_player3_score->setText("");;\r
496         ui->player3_down->setHidden(true);\r
497         ui->player3_up->setHidden(true);\r
498         ui->label_leaderboardPlayer3->setHidden(true);\r
499         ui->label_leaderboardPlayer3_2->setHidden(true);\r
500         ui->label_leaderboardPlayer3_3->setHidden(true);\r
501 \r
502         ui->label_player4->setText("");\r
503         ui->label_player4_score->setText("");;\r
504         ui->player4_down->setHidden(true);\r
505         ui->player4_up->setHidden(true);\r
506         ui->label_leaderboardPlayer4->setHidden(true);\r
507         ui->label_leaderboardPlayer4_2->setHidden(true);\r
508         ui->label_leaderboardPlayer4_3->setHidden(true);\r
509     }\r
510     else if(players.count() == 2)\r
511     {\r
512         ui->label_player3->setText("");\r
513         ui->label_player3_score->setText("");;\r
514         ui->player3_down->setHidden(true);\r
515         ui->player3_up->setHidden(true);\r
516         ui->label_leaderboardPlayer3->setHidden(true);\r
517         ui->label_leaderboardPlayer3_2->setHidden(true);\r
518         ui->label_leaderboardPlayer3_3->setHidden(true);\r
519 \r
520         ui->label_player4->setText("");\r
521         ui->label_player4_score->setText("");;\r
522         ui->player4_down->setHidden(true);\r
523         ui->player4_up->setHidden(true);\r
524         ui->label_leaderboardPlayer4->setHidden(true);\r
525         ui->label_leaderboardPlayer4_2->setHidden(true);\r
526         ui->label_leaderboardPlayer4_3->setHidden(true);\r
527     }\r
528     else if(players.count() == 3)\r
529     {\r
530         ui->label_player4->setText("");\r
531         ui->label_player4_score->setText("");;\r
532         ui->player4_down->setHidden(true);\r
533         ui->player4_up->setHidden(true);\r
534         ui->label_leaderboardPlayer4->setHidden(true);\r
535         ui->label_leaderboardPlayer4_2->setHidden(true);\r
536         ui->label_leaderboardPlayer4_3->setHidden(true);\r
537     }\r
538 }\r