X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=classes%2Fchessclock.cpp;h=5ae23b0684e203c6934e41e67b978713d4042bbf;hb=89725f528257bb5c943d3df8bf3ca7fa0de91bc4;hp=d7df9d3968483996cf95506de026c4138f635e0b;hpb=e73c22c391bf535f610f3ad49c730d7d2d46d978;p=chessclock diff --git a/classes/chessclock.cpp b/classes/chessclock.cpp index d7df9d3..5ae23b0 100644 --- a/classes/chessclock.cpp +++ b/classes/chessclock.cpp @@ -31,15 +31,17 @@ ChessClock::ChessClock(bool white, QWidget *parent) : isWhite_ = white; loser_ = false; turn_ = 0; - timePlayed_ = 0; + timePlayedBeforeTurn_ = 0; status_ = NotRunning; + another_ = 0; + currentTurn_ = 0; // Set clock timer calculating played time clockTime_.start(); // Set updating timer updateTimer_.setInterval( UPDATEINTERVAL ); - connect( &updateTimer_, SIGNAL(timeout),this,SLOT(updateClock())); + connect( &updateTimer_, SIGNAL(timeout()),this,SLOT(updateClock())); } void ChessClock::startTurn() @@ -49,18 +51,20 @@ void ChessClock::startTurn() // Turn information for this new turn currentTurn_ = new TurnInformation(turn_, isWhite_); clockTime_.restart(); + updateTimer_.start(); status_=Running; // Repaint clock - repaintClock(); + updateClock(); } void ChessClock::pauseTurn() { + updateTimer_.stop(); // Update turn time currentTurn_->addTime( clockTime_.restart() ); status_ = Paused; - repaintClock(); + updateClock(); } void ChessClock::continueTurn() @@ -69,23 +73,28 @@ void ChessClock::continueTurn() // Add pause duration to information object currentTurn_->addPause( clockTime_.restart() ); status_ = Running; - repaintClock(); + updateTimer_.start(); + updateClock(); } TurnInformation* ChessClock::endTurn() { - status_ = NotRunning; - // Update turn time - currentTurn_->addTime( clockTime_.restart()); + updateTimer_.stop(); + // Count time played + timePlayedBeforeTurn_ = getTimePlayed(); // Count time available + // This update current turn timeAvailableBeforeTurn_ = getTimeAvailable(); - repaintClock(); + + status_ = NotRunning; + updateClock(); // Close and return turn information currentTurn_->turnReady(timeAvailableBeforeTurn_ ); TurnInformation* information = currentTurn_; currentTurn_ = 0; + emit turnEnded(); return information; } @@ -99,7 +108,65 @@ int ChessClock::getTimeAvailable() // Most simple - will be overwritten in more complex time controls: // subtract duration time! if( currentTurn_) - return timeAvailableBeforeTurn_-currentTurn_->getDuration(); + { + // Update turn time + return timeAvailableBeforeTurn_-currentTurnPlayed(); + } else return timeAvailableBeforeTurn_; } + + +int ChessClock::getTimePlayed() +{ + // Count time played time + if( currentTurn_ ) + return timePlayedBeforeTurn_ + currentTurnPlayed(); + else + return timePlayedBeforeTurn_; +} + + +void ChessClock::setTimeAvailable(int msecs) +{ + timeAvailableBeforeTurn_ = msecs; +} + + +void ChessClock::addTime(int msecs) +{ + timeAvailableBeforeTurn_ += msecs; +} + +int ChessClock::currentTurnPlayed() +{ + if( currentTurn_ ) + { + // Update current time + if( status_ == Running ) + currentTurn_->addTime( clockTime_.restart()); + + // Return current time + return currentTurn_->getDuration(); + } + else + // No current turn! + return 0; +} + +void ChessClock::updateClock() +{ + // Check loser + if( another_ && !another_->isLoser()) + { + if( getTimeAvailable() < 0 && !loser_) + { + loser_ = true; + emit timeOutLoser(); + } + + } + repaintClock(); + +} +