-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rankingprinter.cpp
97 lines (83 loc) · 3.44 KB
/
rankingprinter.cpp
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
/*****************************************************************************
* Copyright (C) 2021 by Lorenzo Buzzi ([email protected]) *
* *
* 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 3 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, see <https://www.gnu.org/licenses/>. *
*****************************************************************************/
#include "rankingprinter.hpp"
#include "pdfrankingprinter.hpp"
#include "csvrankingprinter.hpp"
#include "txtrankingprinter.hpp"
#include "lbcrexception.hpp"
QScopedPointer<RankingPrinter> RankingPrinter::getRankingPrinter(CRLoader::Format format, uint indexFieldWidth, uint bibFieldWidth)
{
switch (format) {
case CRLoader::Format::PDF:
return QScopedPointer<RankingPrinter>(new PDFRankingPrinter(indexFieldWidth, bibFieldWidth));
break;
case CRLoader::Format::CSV:
return QScopedPointer<RankingPrinter>(new CSVRankingPrinter(indexFieldWidth, bibFieldWidth));
break;
case CRLoader::Format::TEXT:
return QScopedPointer<RankingPrinter>(new TXTRankingPrinter(indexFieldWidth, bibFieldWidth));
break;
default:
throw(ChronoRaceException(tr("Error: unknown rankings format %1").arg(static_cast<int>(format))));
break;
}
}
uint RankingPrinter::getIndexFieldWidth() const
{
return indexFieldWidth;
}
uint RankingPrinter::getBibFieldWidth() const
{
return bibFieldWidth;
}
ChronoRaceData const *RankingPrinter::getRaceInfo() const
{
return raceInfo;
}
void RankingPrinter::setRaceInfo(ChronoRaceData const *newRaceInfo)
{
raceInfo = newRaceInfo;
}
int Position::getCurrentPositionNumber(int posIndex, QString const &currTime)
{
int returnedPosition = 0;
// Return 0 if the position has not changed
if ((posIndex == 1) || (time.compare(currTime) != 0) || (currTime.startsWith("D"))) {
// First entry, DNS, DNF, DSQ, or Different time
time = currTime;
returnedPosition = position = posIndex;
}
return returnedPosition;
}
QString Position::getCurrentPositionString(int posIndex, QString const &currTime)
{
QString returnedPosition;
if (int currPos = getCurrentPositionNumber(posIndex, currTime); currPos != 0) {
returnedPosition = QString::number(currPos).append(".");
}
return returnedPosition;
}
uint PositionNumber::getCurrentPosition(uint posIndex, uint currTime)
{
// Always return the position value
if ((posIndex == 1u) || (time != currTime)) {
// First entry or Different time
position = posIndex;
time = currTime;
}
return position;
}