1 /**************************************************************************
5 Copyright (c) Arto Hyvättinen 2010
7 This file is part of Chess Clock software.
9 Chess Clock is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
14 Chess Clock is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
20 **************************************************************************/
29 class TurnInformation;
32 /*! Clock of a individual player
34 @author Arto Hyvättinen
37 Base class of chess clock.
39 ChessClock has not GUI itself, but it is subclass of QWidget
40 avoiding polymorphism.
43 class ChessClock : public QWidget
47 ChessClock(bool white, QWidget *parent = 0);
51 NotRunning /*! Not turn */ = 0,
52 Running /*! Turn running */ = 1,
53 Paused /*! Turn paused */ = 2
56 bool isLoser() const { return loser_; }
57 int getTurn() const { return turn_; }
58 bool isWhite() const { return isWhite_; }
59 RunningStatus getStatus() const { return status_ ; }
63 virtual void startTurn();
67 Player has done his move.
68 @return Locked turn information */
69 virtual TurnInformation* endTurn();
72 virtual void pauseTurn();
74 /*! Continue paused game */
75 virtual void continueTurn();
77 /*! Set another chess clock for connecting
78 @param another Clock of opposite player */
79 void setAnother( ChessClock* another);
81 /*! Get total time available
83 Time does't contain delays.
85 @return Time available in msecs */
86 virtual int getTimeAvailable();
88 /*! Get total time played
89 @return Time played in msecs */
90 virtual int getTimePlayed();
92 /*! Set time available
94 @param msecs Time available in msecs */
95 void setTimeAvailable(int msecs);
99 Add time to timeAvailableBeforeTurn_ total available time
102 @param msecs Time to add in msecs */
103 void addTime(int msecs);
105 /*! Get time played current turn.
106 @return Time in msecs */
107 int currentTurnPlayed();
116 /*! Refresh clock information */
117 virtual void repaintClock() = 0;
119 /*! Update clock information, check looser state and refresh */
120 virtual void updateClock();
123 ChessClock* another_; /*! Another player's clock */
125 bool loser_; /*! Is player losed because of timeout */
126 int turn_; /*! Current turn */
127 RunningStatus status_;
128 TurnInformation* currentTurn_;
130 int timePlayedBeforeTurn_; /*! Time played in this game BEFORE this turn msecs */
131 int timeAvailableBeforeTurn_; /*! Time available for play BEFORE this turn msecs !*/
133 bool isWhite_; /*! True if white player */
138 static const int UPDATEINTERVAL = 1000; /** Clock updating interval in msecs */
142 #endif // CHESSCLOCK_H