libscid 0.1.0
Chess applications made easy.
Loading...
Searching...
No Matches
movetext_cursor.h
1#pragma once
2
3#include "scid/core/game.h"
4#include "scid/core/movetext_location.h"
5
6#include <cstddef>
7#include <cstdint>
8#include <vector>
9
10namespace scid::core {
11
13private:
14 struct ParentFrame {
15 MoveSequence* line = nullptr;
16 std::size_t nextIndex = 0;
17 std::size_t variationIndex = 0;
18 };
19
20public:
21 explicit MovetextCursor(Game& game);
22
23 Move* previousMove();
24 const Move* previousMove() const;
25 Move* nextMove();
26 const Move* nextMove() const;
27 Variation* currentVariation();
28 const Variation* currentVariation() const;
29 std::size_t ply() const;
30 std::size_t variationCount() const;
31 std::size_t variationDepth() const;
32 std::size_t variationIndex() const;
33 MovetextLocation location() const;
34 bool restore(MovetextLocation location);
35
36 bool isAtLineStart() const;
37 bool isAtLineEnd() const;
38 bool isAtVariationStart() const;
39 bool isAtVariationEnd() const;
40 bool isAtGameStart() const;
41 bool isAtGameEnd() const;
42 bool isAtEmptyVariation() const;
43
44 bool next();
45 bool previous();
46 bool enterVariation(std::size_t index);
47 bool exitVariation();
48 void toStart();
49 void toEnd();
50 bool toPly(std::size_t ply);
51
52 Move& addMove(MoveSpec spec);
53 Variation* addVariation(std::string_view initialComment = {});
54 bool setPreviousMoveMetadata(MoveMetadata metadata);
55 bool setPreviousMoveSan(std::string_view san);
56 bool setNextMoveSan(std::string_view san);
57 bool setCurrentVariationInitialComment(std::string_view comment);
58 bool setComment(std::string_view comment);
59 bool addPreviousMoveNag(Nag nag);
60 bool removePreviousMoveNag(bool moveNag);
61 void clearPreviousMoveNags();
62 bool promoteVariationToFirst();
63 bool promoteVariationToMainline();
64 bool deleteVariation();
65 void truncate();
66 void truncateBeforeCursor();
67
68private:
69 MoveSequence& currentLine();
70 const MoveSequence& currentLine() const;
71
72 Game& game_;
73 MoveSequence* currentLine_ = nullptr;
74 std::size_t nextIndex_ = 0;
75 std::vector<ParentFrame> parents_;
76};
77
78} // namespace scid::core
Definition game.h:85
Definition movetext_cursor.h:12
Definition movetext_location.h:11
Definition game.h:53
Definition game.h:69
Definition move.h:12
Definition game.h:60
Definition game.h:75