ClocksWidget supporting turn switching.
ChessClockWidget* white = new ChessClockWidget(true, this);
white->setGreenTime(5000);
ChessClockWidget* black = new ChessClockWidget(false, this);
ChessClockWidget* white = new ChessClockWidget(true, this);
white->setGreenTime(5000);
ChessClockWidget* black = new ChessClockWidget(false, this);
- white->startTurn();
- black->repaintClock();
- clocks_ = new ClocksWidget( this );
+ clocks_ = new ClocksWidget( white, black, this );
setCentralWidget( clocks_ );
setCentralWidget( clocks_ );
- clocks_->setClocks(white, black);
timePlayedBeforeTurn_ = 0;
status_ = NotRunning;
another_ = 0;
timePlayedBeforeTurn_ = 0;
status_ = NotRunning;
another_ = 0;
// Set clock timer calculating played time
clockTime_.start();
// Set clock timer calculating played time
clockTime_.start();
#include "clockswidget.h"
#include "chessclock.h"
#include "clockswidget.h"
#include "chessclock.h"
-#include "welcomescreenwidget.h"
#include <QLabel>
#include <QPixmap>
#include <QLabel>
#include <QPixmap>
-ClocksWidget::ClocksWidget(QWidget *parent) :
+ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent):
- white_ = 0;
- black_ = 0;
- status_ = NoClocks;
+ // Set up clocks
+ white_ = white;
+ black_ = black;
// Make layout for clocks
// Make layout for clocks
- QHBoxLayout* clockLayout_ = new QHBoxLayout;
+ QHBoxLayout* clockLayout = new QHBoxLayout;
+ clockLayout->addWidget(white_ );
+ clockLayout->addWidget( black_ );
// Pause information label
pauseLabel_ = new QLabel( tr("<font color=yellow>Paused. Touch to continue.</font>"));
// Pause information label
pauseLabel_ = new QLabel( tr("<font color=yellow>Paused. Touch to continue.</font>"));
pauseLabel_->setVisible( false );
// Welcome label for first touch
pauseLabel_->setVisible( false );
// Welcome label for first touch
- welcomeLabel_ = new QLabel( tr("<font color=yellow>Welcome! Please touch to start game.<br>"
+ welcomeLabel_ = new QLabel( tr("<font color=green>Welcome! Please touch to start game.<br>"
"Then touch to end turn.</font>"));
welcomeLabel_->setFont( QFont("Helvetica",25));
welcomeLabel_->setAlignment( Qt::AlignCenter);
"Then touch to end turn.</font>"));
welcomeLabel_->setFont( QFont("Helvetica",25));
welcomeLabel_->setAlignment( Qt::AlignCenter);
- welcomeLabel_->setVisible( false );
-
- // Welcome screen if no clocks set
- welcomeScreen_ = new WelcomeScreenWidget(this);
+ welcomeLabel_->setVisible( true ); // Show welcome message
// Put all in layout
QVBoxLayout* mainLayout = new QVBoxLayout;
// Put all in layout
QVBoxLayout* mainLayout = new QVBoxLayout;
- mainLayout->addLayout(clockLayout_);
+ mainLayout->addLayout(clockLayout);
mainLayout->addWidget(pauseLabel_);
mainLayout->addWidget(welcomeLabel_);
mainLayout->addWidget(pauseLabel_);
mainLayout->addWidget(welcomeLabel_);
- mainLayout->addWidget(welcomeScreen_);
+ // First paint
+ white_->repaintClock();
+ black_->repaintClock();
+ // Set up others
+ white_->setAnother(black_);
+ black_->setAnother(white_);
+ delayTimer_.start(); // Initial start
+}
-void ClocksWidget::setClocks(ChessClock *white, ChessClock *black)
+void ClocksWidget::pause()
- // Remove old clocks
- if( white_ )
+ if(status_ == WhiteTurn)
- clockLayout_->removeWidget( white_ );
- delete white_;
+ status_= WhitePause;
+ white_->pauseTurn();
+ pauseLabel_->setVisible(true);
+ else if( status_ == BlackTurn)
- clockLayout_->removeWidget( black_ );
- delete black_;
+ status_ = BlackPause;
+ black_->pauseTurn();
+ pauseLabel_->setVisible(true);
-
- // Set up new ones
- white_ = white;
- black_ = black;
-
- clockLayout_->addWidget(white_);
- clockLayout_->addWidget( black_ );
-
- // First paint
- white_->repaintClock();
- black_->repaintClock();
-
- // Welcome status for first touch
- welcomeLabel_->setVisible(true);
- status_ = Welcome;
+void ClocksWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+ if( delayTimer_.elapsed() > CLICKDELAY ) // To avoid double clicks
+ {
+ switch( status_)
+ {
+ case Welcome :
+ // Start game!
+ welcomeLabel_->setVisible(false);
+ white_->startTurn();
+ status_ = WhiteTurn;
+ break;
+ case WhiteTurn:
+ // White turn finished, then black
+ emit TurnFinished( white_->endTurn());
+ black_->startTurn();
+ status_=BlackTurn;
+ break;
+ case BlackTurn:
+ // Black finished, then white
+ emit TurnFinished( black_->endTurn());
+ white_->startTurn();
+ status_=WhiteTurn;
+ break;
+
+
+ }
+ }
}
int const ClocksWidget::CLICKDELAY;
}
int const ClocksWidget::CLICKDELAY;
class QHBoxLayout;
class QVBoxLayout;
class QLabel;
class QHBoxLayout;
class QVBoxLayout;
class QLabel;
-class WelcomeScreenWidget;
@author Arto Hyvättinen
@date 2010-08-14
@author Arto Hyvättinen
@date 2010-08-14
- Central widget of Chess Clock
+ Central widget of Chess Clock.
+ Needed to create new ClocksWidget to
+ every new game.
*/
class ClocksWidget : public QWidget
{
Q_OBJECT
public:
*/
class ClocksWidget : public QWidget
{
Q_OBJECT
public:
- ClocksWidget(QWidget *parent = 0);
-
- /*! Set clocks and paint them.
-
- */
- void setClocks(ChessClock* white, ChessClock* black);
+ ClocksWidget(ChessClock* white, ChessClock* black, QWidget *parent = 0);
-// void mouseReleaseEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
- void initEmptyScreen();
+ void TurnFinished(TurnInformation* turnInfo);
protected:
ChessClock* white_;
ChessClock* black_;
protected:
ChessClock* white_;
ChessClock* black_;
- QHBoxLayout* clockLayout_;
-
QLabel* pauseLabel_;
QLabel* welcomeLabel_;
QLabel* pauseLabel_;
QLabel* welcomeLabel_;
- WelcomeScreenWidget* welcomeScreen_;
enum GameStatus {
Stopped /*! Not running */,
enum GameStatus {
Stopped /*! Not running */,
BlackTurn,
WhitePause,
BlackPause,
BlackTurn,
WhitePause,
BlackPause,
- NoClocks, /*! Clocks not set ! */