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"
13 #include "score-common.h"
15 SelectDialog::SelectDialog(QWidget *parent) : QDialog(parent)
17 QWidget *centralWidget = new QWidget(this);
18 createLayout(centralWidget);
20 setWindowTitle(tr("ScoreCard: Select Course and Date"));
23 void SelectDialog::createLayout(QWidget *parent)
25 listClub = new QListWidget(parent);
26 pushButtonNext = new QPushButton(tr("Next"));
28 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
30 leftLayout = new QVBoxLayout;
31 leftLayout->addWidget(listClub);
34 dateButton = new QMaemo5ValueButton();
35 dateButton->setValueLayout(QMaemo5ValueButton::ValueUnderText);
36 dateButton->setPickSelector(new QMaemo5DatePickSelector());
37 dateButton->setText(QString::fromUtf8("Date"));
38 leftLayout->addWidget(dateButton);
40 QDate today(QDate::currentDate());
41 lineEditDate = new QLineEdit;
42 lineEditDate->setText(today.toString("yyyy-MM-dd"));
44 leftLayout->addWidget(date);
45 leftLayout->addWidget(lineEditDate);
48 rightLayout = new QVBoxLayout;
49 rightLayout->addStretch();
50 rightLayout->addWidget(pushButtonNext);
52 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
53 mainLayout->addLayout(leftLayout);
54 mainLayout->addLayout(rightLayout);
56 setLayout(mainLayout);
59 void SelectDialog::init(QList<Club *> &list)
63 QListIterator<Club *> i(clubList);
67 Club *club = i.next();
69 QList<Course *> courseList = club->getCourseList();
71 QListIterator<Course *> j(courseList);
73 Course *course = j.next();
75 QListWidgetItem *newItem = new QListWidgetItem;
77 QString entry = club->getName() + "," + course->getName();
79 newItem->setText(entry);
80 listClub->insertItem(index, newItem);
87 void SelectDialog::results(QString &club,
91 QListWidgetItem *current = listClub->currentItem();
94 QString tmp = current->text();
96 QStringList stringList = tmp.split(",");
98 course = stringList[1];
100 QMaemo5DatePickSelector *sel = (QMaemo5DatePickSelector *)dateButton->pickSelector();
101 QDate d = sel->currentDate();
102 // TODO: change to QDate
103 date = d.toString(Qt::ISODate);
105 date = lineEditDate->text();
110 bool SelectDialog::validate(void)
115 void SelectDialog::next(void)
120 qDebug() << "SelectDialog: invalid data, cancel or correct";
124 void SelectDialog::reject(void)
129 ////////////////////////////////////////////////////////////////////////////////
130 ////////////////////////////////////////////////////////////////////////////////
131 ////////////////////////////////////////////////////////////////////////////////
133 ScoreDialog::ScoreDialog(QWidget *parent) : QDialog(parent)
137 QWidget *centralWidget = new QWidget(this);
142 createLayout(centralWidget);
145 void ScoreDialog::createLayout(QWidget *parent)
147 leftLayout = new QVBoxLayout;
148 leftLayout->addWidget(table);
150 rightLayout = new QVBoxLayout;
151 rightLayout->addWidget(pushButtonUp);
152 rightLayout->addWidget(pushButtonDown);
153 rightLayout->addWidget(pushButtonNext);
154 rightLayout->addStretch();
155 rightLayout->addWidget(pushButtonFinish);
157 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
158 mainLayout->addLayout(leftLayout);
159 mainLayout->addLayout(rightLayout);
160 setLayout(mainLayout);
163 void ScoreDialog::createTable(QWidget *parent)
165 table = new QTableWidget(ROWS, COLS, parent);
167 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
168 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
169 table->horizontalHeader()->hide();
171 table->setStyleSheet(ScoreColor::styleSheet());
174 headers << "" << "Par" << "HCP" << "Score" << "" << "Par" << "HCP" << "Score";
175 table->setVerticalHeaderLabels(headers);
178 void ScoreDialog::createButton(QWidget *parent)
180 pushButtonUp = new QPushButton(tr("+"));
181 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
183 pushButtonDown = new QPushButton(tr("-"));
184 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
186 pushButtonNext = new QPushButton(tr("Next"));
187 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
189 pushButtonFinish = new QPushButton(tr("Finish"));
190 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
193 void ScoreDialog::init(Course *course, Score *score)
195 QTableWidgetItem *par, *hcp, *scoreItem, *holeNum;
197 for (int i = 0; i < 18; i++) {
198 par = new QTableWidgetItem(course->getPar(i));
199 hcp = new QTableWidgetItem(course->getHcp(i));
201 scoreItem = new QTableWidgetItem(score->getScore(i));
203 scoreItem = new QTableWidgetItem("");
204 holeNum = new QTableWidgetItem(QString::number(i+1));
206 holeNum->setBackgroundColor(ScoreColor::holeBg());
208 par->setTextAlignment(Qt::AlignCenter);
209 hcp->setTextAlignment(Qt::AlignCenter);
210 scoreItem->setTextAlignment(Qt::AlignCenter);
211 holeNum->setTextAlignment(Qt::AlignCenter);
214 table->setItem(ROW_HOLE, i, holeNum);
215 table->setItem(ROW_PAR, i, par);
216 table->setItem(ROW_HCP, i, hcp);
217 table->setItem(ROW_SCORE, i, scoreItem);
220 table->setItem(ROW_HOLE_2, i-9, holeNum);
221 table->setItem(ROW_PAR_2, i-9, par);
222 table->setItem(ROW_HCP_2, i-9, hcp);
223 table->setItem(ROW_SCORE_2, i-9, scoreItem);
227 // Set focus to 1st cell
228 table->setCurrentCell(ROW_SCORE, 0);
230 setDefaultScore(table);
233 // Set default score to par if not set
234 void ScoreDialog::setDefaultScore(QTableWidget *table)
236 int row = table->currentRow();
237 int col = table->currentColumn();
239 if (row == ROW_SCORE)
241 else if (row == ROW_SCORE_2)
244 qDebug() << "ERROR: unknown row in default score";
247 QTableWidgetItem *par = table->item(row, col);
248 QTableWidgetItem *score = table->item(row + 2, col);
250 if (par && score && score->text() == "") {
251 QVariant value(par->text());
252 score->setData(Qt::DisplayRole, value);
256 void ScoreDialog::up(void)
258 QTableWidgetItem *item = table->currentItem();
261 qWarning() << "ERROR: no current item";
265 int i = (item->text()).toInt();
267 item->setData(Qt::DisplayRole, value);
270 void ScoreDialog::down(void)
272 QTableWidgetItem *item = table->currentItem();
277 int i = (item->text()).toInt();
279 item->setData(Qt::DisplayRole, value);
282 void ScoreDialog::next(void)
285 QTableWidgetItem *item = table->currentItem();
286 moveToNextCell(item);
287 setDefaultScore(table);
291 void ScoreDialog::moveToNextCell(QTableWidgetItem *item)
296 QTableWidget *table = item->tableWidget();
301 int row = table->currentRow();
302 int col = table->currentColumn();
304 if (col < (COLS-1)) {
307 else if (col == (COLS-1)) {
309 row = (row == ROW_SCORE_2) ? ROW_SCORE : ROW_SCORE_2;
311 table->setCurrentCell(row, col);
314 void ScoreDialog::results(QVector<QString> &scores)
316 for (int i = 0; i < 9; i++) {
317 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
318 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
321 scores[i] = frontItem->text();
324 scores[i+9] = backItem->text();
328 bool ScoreDialog::validate(void)
330 for (int i=0; i<9; i++) {
331 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
332 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
334 if (!frontItem || !backItem)
337 QString str1 = frontItem->text();
338 QString str2 = backItem->text();
340 if (str1.isEmpty() || str2.isEmpty())
346 void ScoreDialog::finish(void)
351 qDebug() << "ScoreDialog: invalid data, cancel or correct";
355 void ScoreDialog::reject(void)