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 // TODO: del or allocate statically...
205 par = new QTableWidgetItem(course->getPar(i));
206 hcp = new QTableWidgetItem(course->getHcp(i));
209 par = new QTableWidgetItem("4");
211 hcp = new QTableWidgetItem("9");
213 hcp = new QTableWidgetItem("10");
215 QTableWidgetItem *len = new QTableWidgetItem("");
217 QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
218 holeNum->setForeground(ScoreColor::holeBg());
219 holeNum->setFlags(Qt::NoItemFlags);
221 holeNum->setTextAlignment(Qt::AlignCenter);
222 par->setTextAlignment(Qt::AlignCenter);
223 hcp->setTextAlignment(Qt::AlignCenter);
224 len->setTextAlignment(Qt::AlignCenter);
225 // len is not in use - here just to confuse ;(
226 len->setFlags(Qt::NoItemFlags);
229 table->setItem(0, i, holeNum);
230 table->setItem(1, i, par);
231 table->setItem(2, i, hcp);
232 table->setItem(3, i, len);
235 table->setItem(4, i-9, holeNum);
236 table->setItem(5, i-9, par);
237 table->setItem(6, i-9, hcp);
238 table->setItem(7, i-9, len);
241 table->setCurrentCell(1, 0);
244 void CourseDialog::up(void)
247 QTableWidgetItem *item = table->currentItem();
252 int i = (item->text()).toInt();
253 if (item->row() == ROW_HCP || item->row() == ROW_HCP_2)
258 item->setData(Qt::DisplayRole, value);
261 void CourseDialog::down(void)
264 QTableWidgetItem *item = table->currentItem();
269 int i = (item->text()).toInt();
270 if (item->row() == ROW_HCP || item->row() == ROW_HCP_2)
275 item->setData(Qt::DisplayRole, value);
278 void CourseDialog::next(void)
281 QTableWidgetItem *item = table->currentItem();
282 moveToNextCell(item);
283 //setDefaultScore(table);
287 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
292 QTableWidget *table = item->tableWidget();
297 int row = table->currentRow();
298 int col = table->currentColumn();
300 if (col < (COLS-1)) {
303 else if (col == (COLS-1)) {
307 else if (row == ROW_PAR_2)
309 else if (row == ROW_HCP_2)
311 else if (row == ROW_HCP)
314 //qDebug() << "new cell: " << row << "/" << col;
315 table->setCurrentCell(row, col);
318 void CourseDialog::results(QVector<QString> &par,
319 QVector<QString> &hcp,
320 QVector<QString> &len)
322 for (int i = 0; i < 9; i++) {
323 QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
324 QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
325 QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
326 QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
327 QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
328 QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
331 par[i] = frontPar->text();
333 par[i+9] = backPar->text();
335 hcp[i] = frontHcp->text();
337 hcp[i+9] = backHcp->text();
339 len[i] = frontLen->text();
341 len[i+9] = backLen->text();
345 // Only par is mandatory
346 bool CourseDialog::validate(void)
348 for (int i = 0; i < 9; i++) {
349 QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
350 QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
352 if (!frontItem || !backItem)
355 QString str1 = frontItem->text();
356 QString str2 = backItem->text();
358 if (str1.isEmpty() || str2.isEmpty())
364 void CourseDialog::finish(void)
369 qDebug() << "CourseDialog: invalid data, cancel or correct";