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.
12 #include <QInputContext>
13 #include <QtGui/QTableWidget>
15 #include "course-dialog.h"
16 #include "score-common.h"
17 #include "table-model.h"
19 ////////////////////////////////////////////////////////////////////////////////
20 // CourseWindow based on QMainWindow
21 ////////////////////////////////////////////////////////////////////////////////
22 CourseWindow::CourseWindow(QWidget *parent) : QMainWindow(parent)
25 setAttribute(Qt::WA_Maemo5StackedWindow);
28 QAction *editAction = new QAction(tr("Edit"), this);
29 connect(editAction, SIGNAL(triggered()), parent, SLOT(editCourse()));
30 menuBar()->addAction(editAction);
32 QAction *delAction = new QAction(tr("Delete"), this);
33 connect(delAction, SIGNAL(triggered()), parent, SLOT(deleteCourse()));
34 menuBar()->addAction(delAction);
36 model = new CourseTableModel;
38 QTableView * table = new QTableView;
40 table->setSelectionMode(QAbstractItemView::NoSelection);
41 table->setStyleSheet(defaultStyleSheet);
42 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
43 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
44 table->horizontalHeader()->hide();
45 table->setModel(model);
47 QWidget *central = new QWidget(this);
48 setCentralWidget(central);
50 QVBoxLayout *layout = new QVBoxLayout;
51 layout->addWidget(table);
53 central->setLayout(layout);
56 void CourseWindow::setup(Course *course)
58 QString title = QString("Course: %1, Par - %2").arg(course->getName()).arg(course->getTotal(Total));
59 setWindowTitle(title);
64 ////////////////////////////////////////////////////////////////////////////////
65 // CourseSelectDialog based on QDialog
66 ////////////////////////////////////////////////////////////////////////////////
67 CourseSelectDialog::CourseSelectDialog(QWidget *parent) : QDialog(parent)
69 QWidget *centralWidget = new QWidget(this);
70 createLayout(centralWidget);
72 setWindowTitle(tr("ScoreCard: New Club and Course"));
75 void CourseSelectDialog::createLayout(QWidget *parent)
77 labelClub = new QLabel(tr("Club"));
78 labelCourse = new QLabel(tr("Course"));
79 lineEditClub = new QLineEdit;
80 lineEditCourse = new QLineEdit;
81 pushButtonNext = new QPushButton(tr("Next"));
83 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
85 QDialogButtonBox * buttonBox = new QDialogButtonBox(Qt::Vertical);
86 buttonBox->addButton(pushButtonNext, QDialogButtonBox::ActionRole);
88 leftLayout = new QVBoxLayout;
89 leftLayout->addWidget(lineEditClub);
90 leftLayout->addWidget(lineEditCourse);
92 rightLayout = new QVBoxLayout;
93 rightLayout->addStretch();
94 rightLayout->addWidget(buttonBox);
96 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
97 mainLayout->addLayout(leftLayout);
98 mainLayout->addLayout(rightLayout);
100 setLayout(mainLayout);
103 void CourseSelectDialog::results(QString &club,
106 club = lineEditClub->text();
107 course = lineEditCourse->text();
110 bool CourseSelectDialog::validate(void)
112 QString str1 = lineEditClub->text();
113 QString str2 = lineEditCourse->text();
115 if (str1.isEmpty() || str2.isEmpty())
121 void CourseSelectDialog::next(void)
126 qDebug() << "CourseDialog: invalid data, cancel or correct";
130 ////////////////////////////////////////////////////////////////////////////////
131 // CourseDialog based on QDialog
132 ////////////////////////////////////////////////////////////////////////////////
133 CourseDialog::CourseDialog(QWidget *parent) : QDialog(parent)
137 QWidget *centralWidget = new QWidget(this);
142 createLayout(centralWidget);
145 void CourseDialog::createLayout(QWidget *parent)
147 leftLayout = new QVBoxLayout;
148 leftLayout->addWidget(table);
150 QDialogButtonBox * buttonBoxUp = new QDialogButtonBox(Qt::Vertical);
151 buttonBoxUp->addButton(pushButtonUp, QDialogButtonBox::ActionRole);
152 buttonBoxUp->addButton(pushButtonDown, QDialogButtonBox::ActionRole);
153 buttonBoxUp->addButton(pushButtonNext, QDialogButtonBox::ActionRole);
155 QDialogButtonBox * buttonBoxDown = new QDialogButtonBox(Qt::Vertical);
156 buttonBoxDown->addButton(pushButtonFinish, QDialogButtonBox::ActionRole);
158 rightLayout = new QVBoxLayout;
159 rightLayout->addWidget(buttonBoxUp);
160 rightLayout->addStretch();
161 rightLayout->addWidget(buttonBoxDown);
163 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
164 mainLayout->addLayout(leftLayout);
165 mainLayout->addLayout(rightLayout);
166 setLayout(mainLayout);
169 void CourseDialog::createButton(QWidget *parent)
172 pushButtonUp = new QPushButton(tr("+"));
173 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
175 pushButtonDown = new QPushButton(tr("-"));
176 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
178 pushButtonNext = new QPushButton(tr("Next"));
179 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
181 pushButtonFinish = new QPushButton(tr("Finish"));
182 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
185 void CourseDialog::createTable(QWidget *parent)
187 table = new QTableWidget(ROWS, COLS, parent);
190 headers << "" << "Par" << "HCP" << "Len" << "" << "Par" << "HCP" << "Len";
191 table->setVerticalHeaderLabels(headers);
192 table->horizontalHeader()->hide();
193 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
194 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
195 table->setStyleSheet(defaultStyleSheet);
198 void CourseDialog::init(Course *course)
200 QTableWidgetItem *par, *hcp;
202 for (int i=0; i<18; i++) {
204 par = new QTableWidgetItem(course->getPar(i));
205 hcp = new QTableWidgetItem(course->getHcp(i));
208 par = new QTableWidgetItem("4");
209 hcp = new QTableWidgetItem("9");
211 QTableWidgetItem *len = new QTableWidgetItem("");
213 QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
214 holeNum->setForeground(ScoreColor::holeBg());
215 holeNum->setFlags(Qt::NoItemFlags);
217 holeNum->setTextAlignment(Qt::AlignCenter);
218 par->setTextAlignment(Qt::AlignCenter);
219 hcp->setTextAlignment(Qt::AlignCenter);
220 len->setTextAlignment(Qt::AlignCenter);
221 // len is not in use - here just to confuse ;(
222 len->setFlags(Qt::NoItemFlags);
225 table->setItem(0, i, holeNum);
226 table->setItem(1, i, par);
227 table->setItem(2, i, hcp);
228 table->setItem(3, i, len);
231 table->setItem(4, i-9, holeNum);
232 table->setItem(5, i-9, par);
233 table->setItem(6, i-9, hcp);
234 table->setItem(7, i-9, len);
237 table->setCurrentCell(1, 0);
240 void CourseDialog::up(void)
242 QTableWidgetItem *item = table->currentItem();
247 int i = (item->text()).toInt();
249 item->setData(Qt::DisplayRole, value);
252 void CourseDialog::down(void)
254 QTableWidgetItem *item = table->currentItem();
259 int i = (item->text()).toInt();
261 item->setData(Qt::DisplayRole, value);
264 void CourseDialog::next(void)
267 QTableWidgetItem *item = table->currentItem();
268 moveToNextCell(item);
269 //setDefaultScore(table);
273 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
278 QTableWidget *table = item->tableWidget();
283 int row = table->currentRow();
284 int col = table->currentColumn();
286 if (col < (COLS-1)) {
289 else if (col == (COLS-1)) {
291 row = (row == ROW_PAR_2) ? ROW_PAR : ROW_PAR_2;
293 //qDebug() << "new cell: " << row << "/" << col;
294 table->setCurrentCell(row, col);
297 void CourseDialog::results(QVector<QString> &par,
298 QVector<QString> &hcp,
299 QVector<QString> &len)
301 for (int i = 0; i < 9; i++) {
302 QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
303 QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
304 QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
305 QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
306 QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
307 QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
310 par[i] = frontPar->text();
312 par[i+9] = backPar->text();
314 hcp[i] = frontHcp->text();
316 hcp[i+9] = backHcp->text();
318 len[i] = frontLen->text();
320 len[i+9] = backLen->text();
324 // Only par is mandatory
325 bool CourseDialog::validate(void)
327 for (int i = 0; i < 9; i++) {
328 QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
329 QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
331 if (!frontItem || !backItem)
334 QString str1 = frontItem->text();
335 QString str2 = backItem->text();
337 if (str1.isEmpty() || str2.isEmpty())
343 void CourseDialog::finish(void)
348 qDebug() << "CourseDialog: invalid data, cancel or correct";