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.
11 #include <QMaemo5InformationBox>
15 #include <QInputContext>
16 #include <QtGui/QTableWidget>
18 #include "course-dialog.h"
19 #include "score-common.h"
20 #include "table-model.h"
22 ////////////////////////////////////////////////////////////////////////////////
23 // CourseWindow based on QMainWindow
24 ////////////////////////////////////////////////////////////////////////////////
25 CourseWindow::CourseWindow(QWidget *parent) : QMainWindow(parent)
28 setAttribute(Qt::WA_Maemo5StackedWindow);
31 QAction *editAction = new QAction(tr("Edit"), this);
32 connect(editAction, SIGNAL(triggered()), parent, SLOT(editCourse()));
33 menuBar()->addAction(editAction);
35 QAction *delAction = new QAction(tr("Delete"), this);
36 connect(delAction, SIGNAL(triggered()), parent, SLOT(deleteCourse()));
37 menuBar()->addAction(delAction);
39 model = new CourseTableModel;
41 QTableView * table = new QTableView;
43 table->setSelectionMode(QAbstractItemView::NoSelection);
44 table->setStyleSheet(defaultStyleSheet);
45 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
46 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
47 table->horizontalHeader()->hide();
48 table->setModel(model);
50 QWidget *central = new QWidget(this);
51 setCentralWidget(central);
53 QVBoxLayout *layout = new QVBoxLayout;
54 layout->addWidget(table);
56 central->setLayout(layout);
59 void CourseWindow::setup(Course *course)
61 QString title = QString("Course: %1, Par - %2").arg(course->getName()).arg(course->getTotal(Total));
62 setWindowTitle(title);
67 ////////////////////////////////////////////////////////////////////////////////
68 // CourseSelectDialog based on QDialog
69 ////////////////////////////////////////////////////////////////////////////////
70 CourseSelectDialog::CourseSelectDialog(QWidget *parent) : QDialog(parent)
72 QWidget *centralWidget = new QWidget(this);
73 createLayout(centralWidget);
75 setWindowTitle(tr("ScoreCard: New Club and Course"));
78 void CourseSelectDialog::createLayout(QWidget *parent)
80 labelClub = new QLabel(tr("Club"));
81 labelCourse = new QLabel(tr("Course"));
82 lineEditClub = new QLineEdit;
83 lineEditCourse = new QLineEdit;
84 pushButtonNext = new QPushButton(tr("Next"));
86 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
88 QDialogButtonBox * buttonBox = new QDialogButtonBox(Qt::Vertical);
89 buttonBox->addButton(pushButtonNext, QDialogButtonBox::ActionRole);
91 leftLayout = new QVBoxLayout;
92 leftLayout->addWidget(lineEditClub);
93 leftLayout->addWidget(lineEditCourse);
95 rightLayout = new QVBoxLayout;
96 rightLayout->addStretch();
97 rightLayout->addWidget(buttonBox);
99 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
100 mainLayout->addLayout(leftLayout);
101 mainLayout->addLayout(rightLayout);
103 setLayout(mainLayout);
106 void CourseSelectDialog::showNote(QString msg)
109 QMaemo5InformationBox::information(this,
111 QMaemo5InformationBox::DefaultTimeout);
115 void CourseSelectDialog::results(QString &club,
118 club = lineEditClub->text();
119 course = lineEditCourse->text();
122 bool CourseSelectDialog::validate(void)
124 QString str1 = lineEditClub->text();
125 QString str2 = lineEditCourse->text();
127 if (str1.isEmpty() || str2.isEmpty())
130 if (str1.contains(",") || str2.contains(","))
136 void CourseSelectDialog::next(void)
141 showNote(tr("Invalid club or course name"));
145 ////////////////////////////////////////////////////////////////////////////////
146 // CourseDialog based on QDialog
147 ////////////////////////////////////////////////////////////////////////////////
148 CourseDialog::CourseDialog(QWidget *parent) : QDialog(parent)
152 QWidget *centralWidget = new QWidget(this);
157 createLayout(centralWidget);
160 void CourseDialog::createLayout(QWidget *parent)
162 leftLayout = new QVBoxLayout;
163 leftLayout->addWidget(table);
165 QDialogButtonBox * buttonBoxUp = new QDialogButtonBox(Qt::Vertical);
166 buttonBoxUp->addButton(pushButtonUp, QDialogButtonBox::ActionRole);
167 buttonBoxUp->addButton(pushButtonDown, QDialogButtonBox::ActionRole);
168 buttonBoxUp->addButton(pushButtonNext, QDialogButtonBox::ActionRole);
170 QDialogButtonBox * buttonBoxDown = new QDialogButtonBox(Qt::Vertical);
171 buttonBoxDown->addButton(pushButtonFinish, QDialogButtonBox::ActionRole);
173 rightLayout = new QVBoxLayout;
174 rightLayout->addWidget(buttonBoxUp);
175 rightLayout->addStretch();
176 rightLayout->addWidget(buttonBoxDown);
178 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
179 mainLayout->addLayout(leftLayout);
180 mainLayout->addLayout(rightLayout);
181 setLayout(mainLayout);
184 void CourseDialog::createButton(QWidget *parent)
187 pushButtonUp = new QPushButton(tr("+"));
188 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
190 pushButtonDown = new QPushButton(tr("-"));
191 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
193 pushButtonNext = new QPushButton(tr("Next"));
194 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
196 pushButtonFinish = new QPushButton(tr("Finish"));
197 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
200 void CourseDialog::createTable(QWidget *parent)
202 table = new QTableWidget(ROWS, COLS, parent);
205 headers << "" << "Par" << "HCP" << "Len" << "" << "Par" << "HCP" << "Len";
206 table->setVerticalHeaderLabels(headers);
207 table->horizontalHeader()->hide();
208 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
209 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
210 table->setStyleSheet(defaultStyleSheet);
213 void CourseDialog::init(Course *course)
215 QTableWidgetItem *par, *hcp;
217 for (int i=0; i<18; i++) {
219 // TODO: del or allocate statically...
220 par = new QTableWidgetItem(course->getPar(i));
221 hcp = new QTableWidgetItem(course->getHcp(i));
224 par = new QTableWidgetItem("4");
226 hcp = new QTableWidgetItem("9");
228 hcp = new QTableWidgetItem("10");
230 QTableWidgetItem *len = new QTableWidgetItem("");
232 QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
233 holeNum->setForeground(ScoreColor::holeBg());
234 holeNum->setFlags(Qt::NoItemFlags);
236 holeNum->setTextAlignment(Qt::AlignCenter);
237 par->setTextAlignment(Qt::AlignCenter);
238 hcp->setTextAlignment(Qt::AlignCenter);
239 len->setTextAlignment(Qt::AlignCenter);
240 // len is not in use - here just to confuse ;(
241 len->setFlags(Qt::NoItemFlags);
244 table->setItem(0, i, holeNum);
245 table->setItem(1, i, par);
246 table->setItem(2, i, hcp);
247 table->setItem(3, i, len);
250 table->setItem(4, i-9, holeNum);
251 table->setItem(5, i-9, par);
252 table->setItem(6, i-9, hcp);
253 table->setItem(7, i-9, len);
256 table->setCurrentCell(1, 0);
259 void CourseDialog::up(void)
262 QTableWidgetItem *item = table->currentItem();
267 int i = (item->text()).toInt();
268 if (item->row() == ROW_HCP || item->row() == ROW_HCP_2)
273 item->setData(Qt::DisplayRole, value);
276 void CourseDialog::down(void)
279 QTableWidgetItem *item = table->currentItem();
284 int i = (item->text()).toInt();
285 if (item->row() == ROW_HCP || item->row() == ROW_HCP_2)
290 item->setData(Qt::DisplayRole, value);
293 void CourseDialog::next(void)
296 QTableWidgetItem *item = table->currentItem();
297 moveToNextCell(item);
298 //setDefaultScore(table);
302 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
307 QTableWidget *table = item->tableWidget();
312 int row = table->currentRow();
313 int col = table->currentColumn();
315 if (col < (COLS-1)) {
318 else if (col == (COLS-1)) {
322 else if (row == ROW_PAR_2)
324 else if (row == ROW_HCP_2)
326 else if (row == ROW_HCP)
329 //qDebug() << "new cell: " << row << "/" << col;
330 table->setCurrentCell(row, col);
333 void CourseDialog::results(QVector<QString> &par,
334 QVector<QString> &hcp,
335 QVector<QString> &len)
337 for (int i = 0; i < 9; i++) {
338 QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
339 QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
340 QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
341 QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
342 QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
343 QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
346 par[i] = frontPar->text();
348 par[i+9] = backPar->text();
350 hcp[i] = frontHcp->text();
352 hcp[i+9] = backHcp->text();
354 len[i] = frontLen->text();
356 len[i+9] = backLen->text();
360 // Only par is mandatory
361 bool CourseDialog::validate(void)
363 for (int i = 0; i < 9; i++) {
364 QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
365 QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
367 if (!frontItem || !backItem)
370 QString str1 = frontItem->text();
371 QString str2 = backItem->text();
373 if (str1.isEmpty() || str2.isEmpty())
379 void CourseDialog::finish(void)
384 qDebug() << "CourseDialog: invalid data, cancel or correct";