#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFont>
-
+#include <cstdio>
+#include <QMouseEvent>
ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent):
QWidget(parent)
black_->setAnother(white_);
delayTimer_.start(); // Initial start
+
+ recentX = recentY = -1;
+}
+
+ClocksWidget::~ClocksWidget()
+{
+ delete white_;
+ delete black_;
}
void ClocksWidget::pause()
}
}
+void ClocksWidget::stopPlay()
+{
+ if( status_ == BlackTurn || status_ == BlackPause )
+ emit TurnFinished( black_->endTurn());
+ else if( status_ == WhiteTurn || status_ == WhitePause )
+ emit TurnFinished( white_->endTurn());
+ status_ = Stopped;
+}
+
void ClocksWidget::mouseReleaseEvent(QMouseEvent *event)
{
- if( delayTimer_.elapsed() > CLICKDELAY ) // To avoid double clicks
+
+ // To avoid double clicks
+ // a) delay (default 1,2 secs) OR
+ // b) distance more than 90 pixels in axis.
+ if( delayTimer_.elapsed() > CLICKDELAY ||
+ std::abs( event->x() - recentX ) > 90 ||
+ std::abs( event->y() - recentY ) > 90
+ )
{
+ delayTimer_.start(); // to reset delay timer!
switch( status_)
{
case Welcome :
white_->startTurn();
status_=WhiteTurn;
break;
+ case WhitePause:
+ // Continue play
+ pauseLabel_->setVisible(false);
+ white_->continueTurn();
+ status_=WhiteTurn;
+ break;
+ case BlackPause:
+ // Continue play
+ pauseLabel_->setVisible(false);
+ black_->continueTurn();
+ status_=BlackTurn;
+ break;
+ case Stopped:
+ emit ClickedWhenStopped();
}
}
+ recentX = event->x();
+ recentY = event->y();
}
int const ClocksWidget::CLICKDELAY;