Added up, down, next buttons to course dialog.
[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
129   //CellDelegate *cellDelegate = new CellDelegate(this);
130   //table->setItemDelegate(cellDelegate);
131
132   table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
133   table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
134
135   for (int i=0; i<18; i++) {
136     QTableWidgetItem *par = new QTableWidgetItem("4");
137     QTableWidgetItem *hcp = new QTableWidgetItem("9");
138     QTableWidgetItem *len = new QTableWidgetItem("");
139
140     QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
141     QColor bgColor(Qt::gray);
142     holeNum->setBackgroundColor(bgColor);
143
144     holeNum->setTextAlignment(Qt::AlignCenter);
145     par->setTextAlignment(Qt::AlignCenter);
146     hcp->setTextAlignment(Qt::AlignCenter);
147     len->setTextAlignment(Qt::AlignCenter);
148     
149     if (i < 9) {
150       table->setItem(0, i, holeNum);
151       table->setItem(1, i, par);
152       table->setItem(2, i, hcp);
153       table->setItem(3, i, len);
154     }
155     else {
156       table->setItem(4, i-9, holeNum);
157       table->setItem(5, i-9, par);
158       table->setItem(6, i-9, hcp);
159       table->setItem(7, i-9, len);
160     }
161   }
162 }
163
164 void CourseDialog::up(void)
165 {
166   QTableWidgetItem *item = table->currentItem();
167
168   if (!item)
169     return;
170
171   int i = (item->text()).toInt();
172   QVariant value(i+1);
173   item->setData(Qt::DisplayRole, value);
174 }
175
176 void CourseDialog::down(void)
177 {
178   QTableWidgetItem *item = table->currentItem();
179
180   if (!item)
181     return;
182
183   int i = (item->text()).toInt();
184   QVariant value(i-1);
185   item->setData(Qt::DisplayRole, value);
186 }
187
188 void CourseDialog::next(void)
189 {
190   if (table) {
191     QTableWidgetItem *item = table->currentItem();
192     moveToNextCell(item);
193     //setDefaultScore(table);
194   }
195 }
196
197 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
198 {
199   if (!item)
200     return;
201
202   QTableWidget *table = item->tableWidget();
203
204   if (!table)
205     return;
206
207   int row = table->currentRow();
208   int col = table->currentColumn();
209
210   if (col < (COLS-1)) {
211     col++;
212   }
213   else if (col == (COLS-1)) {
214     col = 0;
215     row = (row == ROW_PAR_2) ? ROW_PAR : ROW_PAR_2;
216   }
217   //qDebug() << "new cell: " << row << "/" << col;
218   table->setCurrentCell(row, col);
219 }
220
221 void CourseDialog::results(QVector<QString> &par,
222                           QVector<QString> &hcp,
223                           QVector<QString> &len)
224 {
225   for (int i = 0; i < 9; i++) {
226     QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
227     QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
228     QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
229     QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
230     QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
231     QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
232
233     if (frontPar)
234       par[i] = frontPar->text();
235     if (backPar)
236       par[i+9] = backPar->text();
237     if (frontHcp)
238       hcp[i] = frontHcp->text();
239     if (backHcp)
240       hcp[i+9] = backHcp->text();
241     if (frontLen)
242       len[i] = frontLen->text();
243     if (backLen)
244       len[i+9] = backLen->text();
245   }
246 }
247
248 // Only par is mandatory
249 bool CourseDialog::validate(void)
250 {
251   for (int i = 0; i < 9; i++) {
252     QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
253     QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
254     
255     if (!frontItem || !backItem)
256       return false;
257     
258     QString str1 = frontItem->text();
259     QString str2 = backItem->text();
260     
261     if (str1.isEmpty() || str2.isEmpty())
262       return false;
263   }
264   return true;
265 }
266
267 void CourseDialog::finish(void)
268 {
269   if (validate())
270     done(1);
271   else {
272     qDebug() << "CourseDialog: invalid data, cancel or correct";
273   }
274 }
275
276