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 "cell-delegate.h"
19 CourseSelectDialog::CourseSelectDialog(QWidget *parent) : QDialog(parent)
21 QWidget *centralWidget = new QWidget(this);
22 createLayout(centralWidget);
24 setWindowTitle(tr("ScoreCard: New Club and Course"));
27 void CourseSelectDialog::createLayout(QWidget *parent)
29 labelClub = new QLabel(tr("Club"));
30 labelCourse = new QLabel(tr("Course"));
31 lineEditClub = new QLineEdit;
32 lineEditCourse = new QLineEdit;
33 pushButtonNext = new QPushButton(tr("Next"));
35 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
37 leftLayout = new QVBoxLayout;
38 leftLayout->addWidget(lineEditClub);
39 leftLayout->addWidget(lineEditCourse);
41 rightLayout = new QVBoxLayout;
42 rightLayout->addStretch();
43 rightLayout->addWidget(pushButtonNext);
45 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
46 mainLayout->addLayout(leftLayout);
47 mainLayout->addLayout(rightLayout);
49 setLayout(mainLayout);
52 void CourseSelectDialog::results(QString &club,
55 club = lineEditClub->text();
56 course = lineEditCourse->text();
59 bool CourseSelectDialog::validate(void)
61 QString str1 = lineEditClub->text();
62 QString str2 = lineEditCourse->text();
64 if (str1.isEmpty() || str2.isEmpty())
70 void CourseSelectDialog::next(void)
75 qDebug() << "CourseDialog: invalid data, cancel or correct";
79 ////////////////////////////////////////////////////////////////////////////////
80 ////////////////////////////////////////////////////////////////////////////////
81 ////////////////////////////////////////////////////////////////////////////////
83 CourseDialog::CourseDialog(QWidget *parent) : QDialog(parent)
87 QWidget *centralWidget = new QWidget(this);
92 createLayout(centralWidget);
95 void CourseDialog::createLayout(QWidget *parent)
97 leftLayout = new QVBoxLayout;
98 leftLayout->addWidget(table);
100 rightLayout = new QVBoxLayout;
101 rightLayout->addWidget(pushButtonUp);
102 rightLayout->addWidget(pushButtonDown);
103 rightLayout->addWidget(pushButtonNext);
104 rightLayout->addStretch();
105 rightLayout->addWidget(pushButtonFinish);
107 QHBoxLayout *mainLayout = new QHBoxLayout(parent);
108 mainLayout->addLayout(leftLayout);
109 mainLayout->addLayout(rightLayout);
110 setLayout(mainLayout);
113 void CourseDialog::createButton(QWidget *parent)
115 pushButtonUp = new QPushButton(tr("+"));
116 connect(pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
118 pushButtonDown = new QPushButton(tr("-"));
119 connect(pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
121 pushButtonNext = new QPushButton(tr("Next"));
122 connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
124 pushButtonFinish = new QPushButton(tr("Finish"));
125 connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
128 void CourseDialog::createTable(QWidget *parent)
130 table = new QTableWidget(ROWS, COLS, parent);
133 headers << "" << "Par" << "HCP" << "Len" << "" << "Par" << "HCP" << "Len";
134 table->setVerticalHeaderLabels(headers);
135 table->horizontalHeader()->hide();
136 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
137 table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
140 void CourseDialog::init(Course *course)
142 QTableWidgetItem *par, *hcp;
143 QColor fgColor(Qt::white);
144 QColor bgColor(Qt::darkGray);
146 for (int i=0; i<18; i++) {
148 par = new QTableWidgetItem(course->getPar(i));
149 hcp = new QTableWidgetItem(course->getHcp(i));
152 par = new QTableWidgetItem("4");
153 hcp = new QTableWidgetItem("9");
155 QTableWidgetItem *len = new QTableWidgetItem("");
157 QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
158 holeNum->setTextColor(fgColor);
159 holeNum->setBackgroundColor(bgColor);
161 holeNum->setTextAlignment(Qt::AlignCenter);
162 par->setTextAlignment(Qt::AlignCenter);
163 hcp->setTextAlignment(Qt::AlignCenter);
164 len->setTextAlignment(Qt::AlignCenter);
167 table->setItem(0, i, holeNum);
168 table->setItem(1, i, par);
169 table->setItem(2, i, hcp);
170 table->setItem(3, i, len);
173 table->setItem(4, i-9, holeNum);
174 table->setItem(5, i-9, par);
175 table->setItem(6, i-9, hcp);
176 table->setItem(7, i-9, len);
181 void CourseDialog::up(void)
183 QTableWidgetItem *item = table->currentItem();
188 int i = (item->text()).toInt();
190 item->setData(Qt::DisplayRole, value);
193 void CourseDialog::down(void)
195 QTableWidgetItem *item = table->currentItem();
200 int i = (item->text()).toInt();
202 item->setData(Qt::DisplayRole, value);
205 void CourseDialog::next(void)
208 QTableWidgetItem *item = table->currentItem();
209 moveToNextCell(item);
210 //setDefaultScore(table);
214 void CourseDialog::moveToNextCell(QTableWidgetItem *item)
219 QTableWidget *table = item->tableWidget();
224 int row = table->currentRow();
225 int col = table->currentColumn();
227 if (col < (COLS-1)) {
230 else if (col == (COLS-1)) {
232 row = (row == ROW_PAR_2) ? ROW_PAR : ROW_PAR_2;
234 //qDebug() << "new cell: " << row << "/" << col;
235 table->setCurrentCell(row, col);
238 void CourseDialog::results(QVector<QString> &par,
239 QVector<QString> &hcp,
240 QVector<QString> &len)
242 for (int i = 0; i < 9; i++) {
243 QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
244 QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
245 QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
246 QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
247 QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
248 QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
251 par[i] = frontPar->text();
253 par[i+9] = backPar->text();
255 hcp[i] = frontHcp->text();
257 hcp[i+9] = backHcp->text();
259 len[i] = frontLen->text();
261 len[i+9] = backLen->text();
265 // Only par is mandatory
266 bool CourseDialog::validate(void)
268 for (int i = 0; i < 9; i++) {
269 QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
270 QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
272 if (!frontItem || !backItem)
275 QString str1 = frontItem->text();
276 QString str2 = backItem->text();
278 if (str1.isEmpty() || str2.isEmpty())
284 void CourseDialog::finish(void)
289 qDebug() << "CourseDialog: invalid data, cancel or correct";