2 * Copyright (C) 2009 Sakari Poussa
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.
10 #include <QInputContext>
12 #include "score-dialog.h"
14 SelectDialog::SelectDialog(QWidget *parent) : QDialog(parent)
16 QWidget *centralWidget = new QWidget(this);
17 createLayout(centralWidget);
19 setWindowTitle(tr("ScoreCard: Select Course and Date"));
22 void SelectDialog::createLayout(QWidget *parent)
24 listClub = new QListWidget(parent);
25 lineEditDate = new QLineEdit;
26 pushButtonNext = new QPushButton(tr("Next"));
28 QDate today(QDate::currentDate());
29 lineEditDate->setText(today.toString("yyyy-MM-dd"));
32 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
34 leftLayout = new QVBoxLayout;
35 leftLayout->addWidget(listClub);
36 //leftLayout->addWidget(date);
37 leftLayout->addWidget(lineEditDate);
39 rightLayout = new QVBoxLayout;
40 rightLayout->addStretch();
41 rightLayout->addWidget(pushButtonNext);
43 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
44 mainLayout->addLayout(leftLayout);
45 mainLayout->addLayout(rightLayout);
47 setLayout(mainLayout);
50 void SelectDialog::init(QList<Club *> &list)
54 QListIterator<Club *> i(clubList);
58 Club *club = i.next();
60 QList<Course *> courseList = club->getCourseList();
62 QListIterator<Course *> j(courseList);
64 Course *course = j.next();
66 QListWidgetItem *newItem = new QListWidgetItem;
68 QString entry = club->getName() + "," + course->getName();
70 newItem->setText(entry);
71 listClub->insertItem(index, newItem);
78 void SelectDialog::results(QString &club,
82 QListWidgetItem *current = listClub->currentItem();
85 QString tmp = current->text();
87 QStringList stringList = tmp.split(",");
89 course = stringList[1];
90 date = lineEditDate->text();
94 bool SelectDialog::validate(void)
99 void SelectDialog::next(void)
104 qDebug() << "SelectDialog: invalid data, cancel or correct";
108 void SelectDialog::reject(void)
113 ////////////////////////////////////////////////////////////////////////////////
114 ////////////////////////////////////////////////////////////////////////////////
115 ////////////////////////////////////////////////////////////////////////////////
117 ScoreDialog::ScoreDialog(QWidget *parent) : QDialog(parent)
121 QWidget *centralWidget = new QWidget(this);
126 createLayout(centralWidget);
129 void ScoreDialog::createLayout(QWidget *parent)
131 leftLayout = new QVBoxLayout;
132 leftLayout->addWidget(table);
134 rightLayout = new QVBoxLayout;
135 rightLayout->addWidget(pushButtonUp);
136 rightLayout->addWidget(pushButtonDown);
137 rightLayout->addWidget(pushButtonNext);
138 rightLayout->addStretch();
139 rightLayout->addWidget(pushButtonFinish);
141 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
142 mainLayout->addLayout(leftLayout);
143 mainLayout->addLayout(rightLayout);
144 setLayout(mainLayout);
147 void ScoreDialog::createTable(QWidget *parent)
149 table = new QTableWidget(ROWS, COLS, parent);
151 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
152 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
153 table->horizontalHeader()->hide();
156 headers << "" << "Par" << "HCP" << "Score" << "" << "Par" << "HCP" << "Score";
157 table->setVerticalHeaderLabels(headers);
160 void ScoreDialog::createButton(QWidget *parent)
162 pushButtonUp = new QPushButton(tr("+"));
163 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
165 pushButtonDown = new QPushButton(tr("-"));
166 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
168 pushButtonNext = new QPushButton(tr("Next"));
169 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
171 pushButtonFinish = new QPushButton(tr("Finish"));
172 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
175 void ScoreDialog::init(Course *course, Score *score)
177 QTableWidgetItem *par, *hcp, *scoreItem, *holeNum;
178 QColor fgColor(Qt::white);
179 QColor bgColor(Qt::darkGray);
181 for (int i = 0; i < 18; i++) {
182 par = new QTableWidgetItem(course->getPar(i));
183 hcp = new QTableWidgetItem(course->getHcp(i));
185 scoreItem = new QTableWidgetItem(score->getScore(i));
187 scoreItem = new QTableWidgetItem("");
188 holeNum = new QTableWidgetItem(QString::number(i+1));
190 holeNum->setTextColor(fgColor);
191 holeNum->setBackgroundColor(bgColor);
193 par->setTextAlignment(Qt::AlignCenter);
194 hcp->setTextAlignment(Qt::AlignCenter);
195 scoreItem->setTextAlignment(Qt::AlignCenter);
196 holeNum->setTextAlignment(Qt::AlignCenter);
199 table->setItem(ROW_HOLE, i, holeNum);
200 table->setItem(ROW_PAR, i, par);
201 table->setItem(ROW_HCP, i, hcp);
202 table->setItem(ROW_SCORE, i, scoreItem);
205 table->setItem(ROW_HOLE_2, i-9, holeNum);
206 table->setItem(ROW_PAR_2, i-9, par);
207 table->setItem(ROW_HCP_2, i-9, hcp);
208 table->setItem(ROW_SCORE_2, i-9, scoreItem);
212 // Set focus to 1st cell
213 table->setCurrentCell(ROW_SCORE, 0);
215 setDefaultScore(table);
218 // Set default score to par if not set
219 void ScoreDialog::setDefaultScore(QTableWidget *table)
221 int row = table->currentRow();
222 int col = table->currentColumn();
224 if (row == ROW_SCORE)
226 else if (row == ROW_SCORE_2)
229 qDebug() << "ERROR: unknown row in default score";
232 QTableWidgetItem *par = table->item(row, col);
233 QTableWidgetItem *score = table->item(row + 2, col);
235 if (par && score && score->text() == "") {
236 QVariant value(par->text());
237 score->setData(Qt::DisplayRole, value);
241 void ScoreDialog::up(void)
243 QTableWidgetItem *item = table->currentItem();
246 qWarning() << "ERROR: no current item";
250 int i = (item->text()).toInt();
252 item->setData(Qt::DisplayRole, value);
255 void ScoreDialog::down(void)
257 QTableWidgetItem *item = table->currentItem();
262 int i = (item->text()).toInt();
264 item->setData(Qt::DisplayRole, value);
267 void ScoreDialog::next(void)
270 QTableWidgetItem *item = table->currentItem();
271 moveToNextCell(item);
272 setDefaultScore(table);
276 void ScoreDialog::moveToNextCell(QTableWidgetItem *item)
281 QTableWidget *table = item->tableWidget();
286 int row = table->currentRow();
287 int col = table->currentColumn();
289 if (col < (COLS-1)) {
292 else if (col == (COLS-1)) {
294 row = (row == ROW_SCORE_2) ? ROW_SCORE : ROW_SCORE_2;
296 table->setCurrentCell(row, col);
299 void ScoreDialog::results(QVector<QString> &scores)
301 for (int i = 0; i < 9; i++) {
302 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
303 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
306 scores[i] = frontItem->text();
309 scores[i+9] = backItem->text();
313 bool ScoreDialog::validate(void)
315 for (int i=0; i<9; i++) {
316 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
317 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
319 if (!frontItem || !backItem)
322 QString str1 = frontItem->text();
323 QString str2 = backItem->text();
325 if (str1.isEmpty() || str2.isEmpty())
331 void ScoreDialog::finish(void)
336 qDebug() << "ScoreDialog: invalid data, cancel or correct";
340 void ScoreDialog::reject(void)