First working gameclock!
authorArto Hyvättinen <arto.hyvattinen@gmail.com>
Sat, 14 Aug 2010 14:36:00 +0000 (17:36 +0300)
committerArto Hyvättinen <arto.hyvattinen@gmail.com>
Sat, 14 Aug 2010 14:36:00 +0000 (17:36 +0300)
ClocksWidget supporting turn switching.

chessclockwindow.cpp
classes/chessclock.cpp
classes/clockswidget.cpp
classes/clockswidget.h

index 49e2aae..2bdecda 100644 (file)
@@ -37,12 +37,10 @@ ChessClockWindow::ChessClockWindow(QWidget *parent)
     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_ );
-    clocks_->setClocks(white, black);
+
 
 }
 
index 308d82d..5ae23b0 100644 (file)
@@ -34,6 +34,7 @@ ChessClock::ChessClock(bool white, QWidget *parent) :
     timePlayedBeforeTurn_ = 0;
     status_ = NotRunning;
     another_ = 0;
+    currentTurn_ = 0;
 
     // Set clock timer calculating played time
     clockTime_.start();
index ed1352b..9882de5 100644 (file)
@@ -21,7 +21,6 @@
 
 #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>"));
@@ -48,58 +50,77 @@ ClocksWidget::ClocksWidget(QWidget *parent) :
     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;
index 72dd641..88f41a6 100644 (file)
@@ -28,7 +28,7 @@
 class QHBoxLayout;
 class QVBoxLayout;
 class QLabel;
-class WelcomeScreenWidget;
+class TurnInformation;
 
 class ChessClock;
 
@@ -37,40 +37,34 @@ 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 */,
@@ -78,7 +72,6 @@ protected:
         BlackTurn,
         WhitePause,
         BlackPause,
-        NoClocks,    /*! Clocks not set ! */
         Welcome
         };