#include "clockswidget.h"
#include "chessclock.h"
-#include "welcomescreenwidget.h"
#include <QLabel>
#include <QPixmap>
#include <QFont>
-ClocksWidget::ClocksWidget(QWidget *parent) :
+ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent):
QWidget(parent)
{
- white_ = 0;
- black_ = 0;
- status_ = NoClocks;
+ // Set up clocks
+ white_ = white;
+ black_ = black;
+ // SET UP UI
// 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>"));
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);
- 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;
- mainLayout->addLayout(clockLayout_);
+ mainLayout->addLayout(clockLayout);
mainLayout->addWidget(pauseLabel_);
mainLayout->addWidget(welcomeLabel_);
- mainLayout->addWidget(welcomeScreen_);
setLayout( mainLayout);
+ status_ = Welcome;
-}
+ // 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);
}
- if( black_ )
+ 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;
class QHBoxLayout;
class QVBoxLayout;
class QLabel;
-class WelcomeScreenWidget;
+class TurnInformation;
class ChessClock;
@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:
- ClocksWidget(QWidget *parent = 0);
-
- /*! Set clocks and paint them.
-
- */
- void setClocks(ChessClock* white, ChessClock* black);
+ ClocksWidget(ChessClock* white, ChessClock* black, QWidget *parent = 0);
protected:
-// void mouseReleaseEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
- void initEmptyScreen();
signals:
- void setupTouch();
+ void TurnFinished(TurnInformation* turnInfo);
public slots:
+ void pause();
protected:
ChessClock* white_;
ChessClock* black_;
- QHBoxLayout* clockLayout_;
-
QLabel* pauseLabel_;
QLabel* welcomeLabel_;
- WelcomeScreenWidget* welcomeScreen_;
enum GameStatus {
Stopped /*! Not running */,
BlackTurn,
WhitePause,
BlackPause,
- NoClocks, /*! Clocks not set ! */
Welcome
};