X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=classes%2Fchessclock.cpp;h=aedf53119eda0ce75380be5dd6e70a0b9f9371c8;hb=d145b92ee23ef361bbfd91eef606cfc3ed9994fa;hp=896f654ba4b8c3a7dd23f5219d398a74c8cf6a34;hpb=ebe5873e30a11983068a087332c5046720637fd1;p=chessclock diff --git a/classes/chessclock.cpp b/classes/chessclock.cpp index 896f654..aedf531 100644 --- a/classes/chessclock.cpp +++ b/classes/chessclock.cpp @@ -24,6 +24,7 @@ #include "turninformation.h" const int ChessClock::UPDATEINTERVAL; +const int ChessClock::DONTEATBATTERYTIME; ChessClock::ChessClock(bool white, QWidget *parent) : QWidget(parent) @@ -31,25 +32,29 @@ ChessClock::ChessClock(bool white, QWidget *parent) : isWhite_ = white; loser_ = false; turn_ = 0; + dontEatBatteryEmitted_ = false; 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() { turn_++; + dontEatBatteryEmitted_ = false; // Turn information for this new turn currentTurn_ = new TurnInformation(turn_, isWhite_); clockTime_.restart(); + updateTimer_.start(); status_=Running; // Repaint clock @@ -58,6 +63,7 @@ void ChessClock::startTurn() void ChessClock::pauseTurn() { + updateTimer_.stop(); // Update turn time currentTurn_->addTime( clockTime_.restart() ); status_ = Paused; @@ -70,25 +76,31 @@ void ChessClock::continueTurn() // Add pause duration to information object currentTurn_->addPause( clockTime_.restart() ); status_ = Running; + updateTimer_.start(); updateClock(); } TurnInformation* ChessClock::endTurn() { + updateTimer_.stop(); status_ = NotRunning; - // Update turn time - currentTurn_->addTime( clockTime_.restart()); + + updateClock(); // Count time played timePlayedBeforeTurn_ = getTimePlayed(); + // Count time available + // This update current turn timeAvailableBeforeTurn_ = getTimeAvailable(); - updateClock(); + // Close and return turn information currentTurn_->turnReady(timeAvailableBeforeTurn_ ); TurnInformation* information = currentTurn_; currentTurn_ = 0; + + emit turnEnded(); return information; } @@ -102,19 +114,56 @@ 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() const +int ChessClock::getTimePlayed() +{ + return timePlayedBeforeTurn_ + currentTurnPlayed(); +} + + +void ChessClock::setTimeAvailable(int msecs) +{ + timeAvailableBeforeTurn_ = msecs; +} + + +void ChessClock::addTime(int msecs) +{ + timeAvailableBeforeTurn_ += msecs; +} + +int ChessClock::currentTurnPlayed() { - // Count time played time if( currentTurn_ ) - return timePlayedBeforeTurn_ + currentTurn_->getDuration(); + { + // Update current time + if( status_ == Running ) + { + currentTurn_->addTime( clockTime_.restart()); + + // since 1.1.2 + // emit dontEatBattery signal when screen should not to be keeped on + if ( currentTurn_->getDuration() > DONTEATBATTERYTIME && dontEatBatteryEmitted_ == false ) + { + dontEatBatteryEmitted_ = true; + emit dontEatBattery(); + } + } + + // Return current time + return currentTurn_->getDuration(); + } else - return timePlayedBeforeTurn_; + // No current turn! + return 0; } void ChessClock::updateClock()