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