Cute Chess 0.1
pgngame.h
1/*
2 This file is part of Cute Chess.
3
4 Cute Chess 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, either version 3 of the License, or
7 (at your option) any later version.
8
9 Cute Chess is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with Cute Chess. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef PGNGAME_H
19#define PGNGAME_H
20
21#include <QMap>
22#include <QString>
23#include <QVector>
24#include <QList>
25#include <QPair>
26#include <QDate>
27#include <climits>
28#include "board/genericmove.h"
29#include "board/result.h"
30class QTextStream;
31class PgnStream;
32class EcoNode;
33class QObject;
34namespace Chess { class Board; }
35
36
51class LIB_EXPORT PgnGame
52{
53 public:
56 {
61 };
62
75
77 PgnGame();
79 bool isNull() const;
81 void clear();
82
86 const QVector<MoveData>& moves() const;
91 void addMove(const MoveData& data, bool addEco = true);
92 void setMove(int ply, const MoveData& data);
93
100 Chess::Board* createBoard() const;
101
114 bool read(PgnStream& in, int maxMoves = INT_MAX - 1,
115 bool addEco = true);
121 bool write(QTextStream& out, PgnMode mode = Verbose) const;
129 bool write(const QString& filename, PgnMode mode = Verbose) const;
130
136 bool isStandard() const;
141 QString tagValue(const QString& tag) const;
143 QString event() const;
145 QString site() const;
147 QDate date() const;
149 int round() const;
151 QString playerName(Chess::Side side) const;
153 Chess::Result result() const;
155 QString variant() const;
160
165 void setTag(const QString& tag, const QString& value);
167 void setEvent(const QString& event);
169 void setSite(const QString& site);
171 void setDate(const QDate& date);
173 void setRound(int round);
175 void setPlayerName(Chess::Side side, const QString& name);
177 void setResult(const Chess::Result& result);
179 void setVariant(const QString& variant);
181 void setStartingSide(Chess::Side side);
183 void setStartingFenString(Chess::Side side, const QString& fen);
191 void setResultDescription(const QString& description);
192
199 void setTagReceiver(QObject* receiver);
201 void setGameStartTime(const QDateTime& dateTime);
203 void setGameEndTime(const QDateTime& dateTime);
204
207
208 private:
209 bool parseMove(PgnStream& in, bool addEco);
210
211 Chess::Side m_startingSide;
212 const EcoNode* m_eco;
214 QVector<MoveData> m_moves;
215 QObject* m_tagReceiver;
216 QString m_initialComment;
217 static QString timeStamp(const QDateTime& dateTime);
218 QDateTime m_gameStartTime;
219};
220
222extern LIB_EXPORT PgnStream& operator>>(PgnStream& in, PgnGame& game);
223
225extern LIB_EXPORT QTextStream& operator<<(QTextStream& out, const PgnGame& game);
226
227#endif // PGNGAME_H
An internal chessboard class.
Definition board.h:58
A chess move independent of chess variant or opening book format.
Definition genericmove.h:35
The result of a chess game.
Definition result.h:35
The side or color of a chess player.
Definition side.h:36
A node in the ECO tree (Encyclopaedia of Chess Openings).
Definition econode.h:44
A game of chess in PGN format.
Definition pgngame.h:52
Chess::Side startingSide() const
Definition pgngame.cpp:409
Chess::Board * createBoard() const
Definition pgngame.cpp:125
void setEvent(const QString &event)
Definition pgngame.cpp:433
const QVector< MoveData > & moves() const
Definition pgngame.cpp:99
void setVariant(const QString &variant)
Definition pgngame.cpp:491
PgnMode
Definition pgngame.h:56
@ Minimal
Only use data which is required by the PGN standard.
Definition pgngame.h:58
@ Verbose
Use additional data like extra tags and comments.
Definition pgngame.h:60
bool read(PgnStream &in, int maxMoves=INT_MAX - 1, bool addEco=true)
Definition pgngame.cpp:212
QString startingFenString() const
Definition pgngame.cpp:414
void setSite(const QString &site)
Definition pgngame.cpp:438
void setGameEndTime(const QDateTime &dateTime)
Definition pgngame.cpp:552
void setStartingFenString(Chess::Side side, const QString &fen)
Definition pgngame.cpp:504
void setTagReceiver(QObject *receiver)
Definition pgngame.cpp:536
bool isNull() const
Definition pgngame.cpp:61
void clear()
Definition pgngame.cpp:66
QString tagValue(const QString &tag) const
Definition pgngame.cpp:358
PgnGame()
Definition pgngame.cpp:54
QString site() const
Definition pgngame.cpp:368
void setRound(int round)
Definition pgngame.cpp:448
QList< QPair< QString, QString > > tags() const
Definition pgngame.cpp:74
QMap< int, int > extractScores() const
Definition pgngame.cpp:564
Chess::Result result() const
Definition pgngame.cpp:393
void setPlayerName(Chess::Side side, const QString &name)
Definition pgngame.cpp:453
QDate date() const
Definition pgngame.cpp:373
void setGameStartTime(const QDateTime &dateTime)
Definition pgngame.cpp:546
QString playerName(Chess::Side side) const
Definition pgngame.cpp:383
void addMove(const MoveData &data, bool addEco=true)
Definition pgngame.cpp:104
int round() const
Definition pgngame.cpp:378
void setTag(const QString &tag, const QString &value)
Definition pgngame.cpp:419
QString variant() const
Definition pgngame.cpp:398
void setStartingSide(Chess::Side side)
Definition pgngame.cpp:499
QString event() const
Definition pgngame.cpp:363
void setDate(const QDate &date)
Definition pgngame.cpp:443
void setResultDescription(const QString &description)
Definition pgngame.cpp:519
void setResult(const Chess::Result &result)
Definition pgngame.cpp:461
bool isStandard() const
Definition pgngame.cpp:353
bool write(QTextStream &out, PgnMode mode=Verbose) const
Definition pgngame.cpp:272
A class for reading games in PGN format from a text stream.
Definition pgnstream.h:43
A struct for storing the game's move history.
Definition pgngame.h:65
QString moveString
Definition pgngame.h:71
quint64 key
Definition pgngame.h:67
QString comment
Definition pgngame.h:73
Chess::GenericMove move
Definition pgngame.h:69