1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/*
Copyright (C) 2002-2005, Jason Katz-Brown <jasonkb@mit.edu>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "scoreboard.h"
#include <QHeaderView>
#include <KLocale>
ScoreBoard::ScoreBoard(QWidget *parent)
: QTableWidget(1, 1, parent)
{
setVerticalHeaderItem(rowCount() -1, new QTableWidgetItem(i18n("Par")));
setHorizontalHeaderItem(columnCount() -1, new QTableWidgetItem(i18n("Total")));
setFocusPolicy(Qt::NoFocus);
setEditTriggers(QAbstractItemView::NoEditTriggers);
resizeColumnToContents(columnCount() - 1);
verticalHeader()->setResizeMode(QHeaderView::Fixed);
doUpdateHeight();
}
void ScoreBoard::newHole(int par)
{
int _columnCount = columnCount();
insertColumn(_columnCount - 1);
setHorizontalHeaderItem(columnCount() -2, new QTableWidgetItem(QString::number(columnCount() - 1)));
//set each player's score to 0
for (int i = 0; i < rowCount() - 1; i++)
setItem(i, columnCount() -2, new QTableWidgetItem(QString::number(0)));
setItem(rowCount() - 1, columnCount() - 2, new QTableWidgetItem(QString::number(par)));
// update total
int tot = 0;
for (int i = 0; i < columnCount() - 1; ++i)
tot += item(rowCount() - 1, i)->text().toInt();
setItem(rowCount() - 1, columnCount() - 1, new QTableWidgetItem(QString::number(tot)));
resizeColumnToContents(columnCount() - 2);
}
void ScoreBoard::newPlayer(const QString &name)
{
//kDebug(12007) << "name of new player is" << name;
insertRow(rowCount() - 1);
setVerticalHeaderItem(rowCount() -2, new QTableWidgetItem(name));
doUpdateHeight();
}
void ScoreBoard::setScore(int id, int hole, int score)
{
setItem(id - 1, hole - 1, new QTableWidgetItem(QString::number(score)));
QString name;
setItem(id - 1, columnCount() - 1, new QTableWidgetItem(QString::number(total(id, name))));
resizeColumnToContents(hole -1);
setCurrentCell(id - 1, hole - 1);
}
void ScoreBoard::parChanged(int hole, int par)
{
setItem(rowCount() - 1, hole - 1, new QTableWidgetItem(QString::number(par)));
// update total
int tot = 0;
for (int i = 0; i < columnCount() - 1; ++i)
tot += item(rowCount() - 1, i)->text().toInt();
setItem(rowCount() - 1, columnCount() - 1, new QTableWidgetItem(QString::number(tot)));
}
int ScoreBoard::total(int id, QString &name)
{
int tot = 0;
for (int i = 0; i < columnCount() - 1; i++)
tot += item(id - 1, i)->text().toInt();
name = verticalHeaderItem(id - 1)->text();
//kDebug(12007) << "tot is" << tot;
return tot;
}
void ScoreBoard::doUpdateHeight()
{
int height = 0;
height += horizontalHeader()->height();
for (int i = 0; i < qMin(3, rowCount()); ++i) height += verticalHeader()->sectionSize(i);
height += size().height() - horizontalHeader()->height() - viewport()->height();
setFixedHeight(height);
}
#include "scoreboard.moc"
|