Added ChessClockWizard class
[chessclock] / classes / chessclock.h
1  /**************************************************************************
2
3     Chess Clock
4
5     Copyright (c) Arto Hyvättinen 2010
6
7     This file is part of Chess Clock software.
8
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.
13
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.
18
19
20 **************************************************************************/
21
22 #ifndef CHESSCLOCK_H
23 #define CHESSCLOCK_H
24
25 #include <QWidget>
26 #include <QTime>
27 #include <QTimer>
28
29 class TurnInformation;
30
31
32 /*! Clock of a individual player
33
34   @author Arto Hyvättinen
35   @date 2010-08-13
36
37   Base class of chess clock.
38
39   ChessClock has not GUI itself, but it is subclass of QWidget
40   avoiding polymorphism.
41
42   */
43 class ChessClock : public QWidget
44 {
45     Q_OBJECT
46 public:
47     ChessClock(bool white, QWidget *parent = 0);
48
49 public:
50     enum RunningStatus {
51         NotRunning /*! Not turn  */ = 0,
52         Running /*! Turn running */ = 1,
53         Paused /*! Turn paused */ = 2
54     };
55
56     bool isLoser() const  { return loser_; }
57     int getTurn() const  { return turn_; }
58     bool isWhite() const { return isWhite_; }
59     RunningStatus getStatus() const { return status_ ; }
60
61
62     /*! Start new turn */
63     virtual void startTurn();
64
65     /*! End this turn.
66
67       Player has done his move.
68       @return Locked turn information */
69     virtual TurnInformation* endTurn();
70
71     /*! Pause clock */
72     virtual void pauseTurn();
73
74     /*! Continue paused game */
75     virtual void continueTurn();
76
77     /*! Set another chess clock for connecting
78       @param another Clock of opposite player */
79     void setAnother( ChessClock* another);
80
81     /*! Get total time available
82
83       Time does't contain delays.
84
85       @return Time available in msecs */
86     virtual int getTimeAvailable();
87
88     /*! Get total time played
89       @return Time played in msecs */
90     virtual int getTimePlayed() const;
91
92
93 signals:
94     void timeOutLoser();
95
96 public slots:    
97
98     /*! Refresh clock information */
99     virtual void repaintClock() = 0;
100
101     /*! Update clock information, check looser state and refresh */
102     virtual void updateClock();
103
104 private:
105     ChessClock* another_; /*! Another player's clock */
106
107     bool loser_;        /*! Is player losed because of timeout */
108     int turn_;          /*! Current turn */
109     RunningStatus status_;
110     TurnInformation* currentTurn_;
111
112     int timePlayedBeforeTurn_;    /*! Time played in this game BEFORE this turn msecs */
113     int timeAvailableBeforeTurn_; /*! Time available for play BEFORE this turn msecs !*/
114
115     bool isWhite_;      /*! True if white player */
116
117     QTime clockTime_;
118     QTimer updateTimer_;
119
120     static const int UPDATEINTERVAL = 1000; /** Clock updating interval in msecs */
121
122 };
123
124 #endif // CHESSCLOCK_H