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)
181 pushButtonUp = new QPushButton(tr("+"));
182 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
184 pushButtonDown = new QPushButton(tr("-"));
185 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
187 pushButtonNext = new QPushButton(tr("Next"));
188 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
190 pushButtonFinish = new QPushButton(tr("Finish"));
191 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
194 void ScoreDialog::init(Course *course, Score *score)
196 QTableWidgetItem *par, *hcp, *scoreItem, *holeNum;
198 for (int i = 0; i < 18; i++) {
199 par = new QTableWidgetItem(course->getPar(i));
200 hcp = new QTableWidgetItem(course->getHcp(i));
202 scoreItem = new QTableWidgetItem(score->getScore(i));
204 scoreItem = new QTableWidgetItem("");
205 holeNum = new QTableWidgetItem(QString::number(i+1));
207 holeNum->setBackgroundColor(ScoreColor::holeBg());
209 par->setTextAlignment(Qt::AlignCenter);
210 hcp->setTextAlignment(Qt::AlignCenter);
211 scoreItem->setTextAlignment(Qt::AlignCenter);
212 holeNum->setTextAlignment(Qt::AlignCenter);
215 table->setItem(ROW_HOLE, i, holeNum);
216 table->setItem(ROW_PAR, i, par);
217 table->setItem(ROW_HCP, i, hcp);
218 table->setItem(ROW_SCORE, i, scoreItem);
221 table->setItem(ROW_HOLE_2, i-9, holeNum);
222 table->setItem(ROW_PAR_2, i-9, par);
223 table->setItem(ROW_HCP_2, i-9, hcp);
224 table->setItem(ROW_SCORE_2, i-9, scoreItem);
228 // Set focus to 1st cell
229 table->setCurrentCell(ROW_SCORE, 0);
231 setDefaultScore(table);
234 // Set default score to par if not set
235 void ScoreDialog::setDefaultScore(QTableWidget *table)
237 int row = table->currentRow();
238 int col = table->currentColumn();
240 if (row == ROW_SCORE)
242 else if (row == ROW_SCORE_2)
245 qDebug() << "ERROR: unknown row in default score";
248 QTableWidgetItem *par = table->item(row, col);
249 QTableWidgetItem *score = table->item(row + 2, col);
251 if (par && score && score->text() == "") {
252 QVariant value(par->text());
253 score->setData(Qt::DisplayRole, value);
257 void ScoreDialog::up(void)
259 QTableWidgetItem *item = table->currentItem();
262 qWarning() << "ERROR: no current item";
266 int i = (item->text()).toInt();
268 item->setData(Qt::DisplayRole, value);
271 void ScoreDialog::down(void)
273 QTableWidgetItem *item = table->currentItem();
278 int i = (item->text()).toInt();
280 item->setData(Qt::DisplayRole, value);
283 void ScoreDialog::next(void)
286 QTableWidgetItem *item = table->currentItem();
287 moveToNextCell(item);
288 setDefaultScore(table);
292 void ScoreDialog::moveToNextCell(QTableWidgetItem *item)
297 QTableWidget *table = item->tableWidget();
302 int row = table->currentRow();
303 int col = table->currentColumn();
305 if (col < (COLS-1)) {
308 else if (col == (COLS-1)) {
310 row = (row == ROW_SCORE_2) ? ROW_SCORE : ROW_SCORE_2;
312 table->setCurrentCell(row, col);
315 void ScoreDialog::results(QVector<QString> &scores)
317 for (int i = 0; i < 9; i++) {
318 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
319 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
322 scores[i] = frontItem->text();
325 scores[i+9] = backItem->text();
329 bool ScoreDialog::validate(void)
331 for (int i=0; i<9; i++) {
332 QTableWidgetItem *frontItem = table->item(ROW_SCORE, i);
333 QTableWidgetItem *backItem = table->item(ROW_SCORE_2, i);
335 if (!frontItem || !backItem)
338 QString str1 = frontItem->text();
339 QString str2 = backItem->text();
341 if (str1.isEmpty() || str2.isEmpty())
347 void ScoreDialog::finish(void)
352 qDebug() << "ScoreDialog: invalid data, cancel or correct";
356 void ScoreDialog::reject(void)