- Added course selection dialog
[scorecard] / src / course-dialog.cpp
1 #include <QtGui>
2 #include <QLayout>
3 #include <QLineEdit>
4 #include <QInputContext>
5 #include <QtGui/QTableWidget>
6
7 #include "course-dialog.h"
8 #include "cell-delegate.h"
9
10
11 CourseSelectDialog::CourseSelectDialog(QWidget *parent) : QDialog(parent)
12 {
13   QWidget *centralWidget = new QWidget(this);
14   createLayout(centralWidget);
15
16   setWindowTitle(tr("ScoreCard: New Club and/or Course"));
17 }
18
19 void CourseSelectDialog::createLayout(QWidget *parent)
20 {
21   labelClub = new QLabel(tr("Club"));
22   labelCourse = new QLabel(tr("Course"));
23   lineEditClub = new QLineEdit;
24   lineEditCourse = new QLineEdit;
25   pushButtonNext = new QPushButton(tr("Next"));
26
27   connect(pushButtonNext, SIGNAL(clicked()), this, SLOT(next()));
28
29   leftLayout = new QVBoxLayout;
30   leftLayout->addWidget(lineEditClub);
31   leftLayout->addWidget(lineEditCourse);
32
33   rightLayout = new QVBoxLayout;
34   rightLayout->addStretch();
35   rightLayout->addWidget(pushButtonNext);
36
37   QHBoxLayout *mainLayout = new QHBoxLayout(parent);
38   mainLayout->addLayout(leftLayout);
39   mainLayout->addLayout(rightLayout);
40
41   setLayout(mainLayout);
42 }
43
44 void CourseSelectDialog::results(QString &club, 
45                                  QString &course)
46 {  
47   club = lineEditClub->text();
48   course = lineEditCourse->text();
49 }
50
51 void CourseSelectDialog::next(void)
52 {
53   done(1);
54 }
55
56 CourseDialog::CourseDialog(QWidget *parent) : QDialog(parent)
57 {
58   resize(800, 400);
59
60   createTable();
61   createLabel();
62
63   createLayout(this);
64
65 }
66
67 void CourseDialog::createLayout(QWidget *parent)
68 {
69   leftLayout = new QVBoxLayout;
70   leftLayout->addWidget(table);
71
72   rightLayout = new QVBoxLayout;
73   rightLayout->addStretch();
74   rightLayout->addWidget(pushButtonFinnish);
75
76   QHBoxLayout *mainLayout = new QHBoxLayout(parent);
77   mainLayout->addLayout(leftLayout);
78   mainLayout->addLayout(rightLayout);
79   setLayout(mainLayout);
80 }
81
82 void CourseDialog::createLabel(QWidget *parent)
83 {
84   clubLabel = new QLabel(tr("Club"));
85   courseLabel = new QLabel(tr("Course"));
86    
87   clubEdit = new QLineEdit;
88   courseEdit = new QLineEdit;
89
90   pushButtonFinnish = new QPushButton(tr("Finnish"));
91   connect(pushButtonFinnish, SIGNAL(clicked()), this, SLOT(finnish()));
92 }
93
94 void CourseDialog::createTable(QWidget *parent)
95 {
96   table = new QTableWidget(rows, cols);
97
98   QStringList headers;
99   headers << "Hole" << "Par" << "HCP" << "Len" << "Hole" << "Par" << "HCP" << "Len";
100   table->setVerticalHeaderLabels(headers);
101   table->horizontalHeader()->hide();
102
103   //CellDelegate *cellDelegate = new CellDelegate(this);
104   //table->setItemDelegate(cellDelegate);
105
106   table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
107   table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
108
109   for (int i=0; i<18; i++) {
110     QTableWidgetItem *par = new QTableWidgetItem("");
111     QTableWidgetItem *hcp = new QTableWidgetItem("");
112     QTableWidgetItem *len = new QTableWidgetItem("");
113
114     QTableWidgetItem *holeNum = new QTableWidgetItem(QString::number(i+1));
115     QColor bgColor(Qt::gray);
116     holeNum->setBackgroundColor(bgColor);
117
118     holeNum->setTextAlignment(Qt::AlignCenter);
119     par->setTextAlignment(Qt::AlignCenter);
120     hcp->setTextAlignment(Qt::AlignCenter);
121     len->setTextAlignment(Qt::AlignCenter);
122     
123     if (i < 9) {
124       table->setItem(0, i, holeNum);
125       table->setItem(1, i, par);
126       table->setItem(2, i, hcp);
127       table->setItem(3, i, len);
128     }
129     else {
130       table->setItem(4, i-9, holeNum);
131       table->setItem(5, i-9, par);
132       table->setItem(6, i-9, hcp);
133       table->setItem(7, i-9, len);
134     }
135   }
136
137   //connect(table, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(itemChanged(QTableWidgetItem *)));
138
139 }
140
141 void CourseDialog::itemChanged(QTableWidgetItem *item)
142 {
143   qDebug() << "itemChanged";
144
145   int row = table->currentRow();
146   int col = table->currentColumn();
147
148   col++;
149   if (col == cols) {
150     col = 0;
151     row++;
152     if (row == separator_row)
153       row++;
154   }
155   table->setCurrentCell(row, col);
156 }
157
158 void CourseDialog::nextCell(QObject *obj)
159 {
160 #if 0
161   int row = table->currentRow();
162   int col = table->currentColumn();
163   QTableWidgetItem *item = table->item(row, col);
164
165   qDebug() << "next Cell " << obj;
166   qDebug() << "item " << item << "row=" << row << " col=" << col;
167
168   table->setItem(row, col, item);
169
170
171   table->currentIndex();
172   table->setCurrentCell(2,2);
173 #endif
174 }
175
176 void CourseDialog::results(QVector<QString> &par,
177                           QVector<QString> &hcp,
178                           QVector<QString> &len)
179 {
180   for (int i = 0; i < 9; i++) {
181     QTableWidgetItem *frontPar = table->item(ROW_PAR, i);
182     QTableWidgetItem *backPar = table->item(ROW_PAR_2, i);
183     QTableWidgetItem *frontHcp = table->item(ROW_HCP, i);
184     QTableWidgetItem *backHcp = table->item(ROW_HCP_2, i);
185     QTableWidgetItem *frontLen = table->item(ROW_LEN, i);
186     QTableWidgetItem *backLen = table->item(ROW_LEN_2, i);
187
188     if (frontPar)
189       par[i] = frontPar->text();
190     if (backPar)
191       par[i+9] = backPar->text();
192     if (frontHcp)
193       hcp[i] = frontHcp->text();
194     if (backHcp)
195       hcp[i+9] = backHcp->text();
196     if (frontLen)
197       len[i] = frontLen->text();
198     if (backLen)
199       len[i+9] = backLen->text();
200   }
201 }
202
203 // Only par is mandatory
204 bool CourseDialog::validate(void)
205 {
206   for (int i = 0; i < 9; i++) {
207     QTableWidgetItem *frontItem = table->item(ROW_PAR, i);
208     QTableWidgetItem *backItem = table->item(ROW_PAR_2, i);
209     
210     if (!frontItem || !backItem)
211       return false;
212     
213     QString str1 = frontItem->text();
214     QString str2 = backItem->text();
215     
216     if (str1.isEmpty() || str2.isEmpty())
217       return false;
218   }
219   return true;
220 }
221
222 void CourseDialog::finnish(void)
223 {
224   if (validate())
225     done(1);
226   else {
227     qDebug() << "CourseDialog: invalid data, cancel or correct";
228   }
229 }
230
231