00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "clockswidget.h"
00023 #include "chessclock.h"
00024
00025 #include "screenlitkeeper.h"
00026
00027 #include <QLabel>
00028 #include <QPixmap>
00029 #include <QApplication>
00030 #include <QHBoxLayout>
00031 #include <QVBoxLayout>
00032 #include <QFont>
00033 #include <cstdlib>
00034 #include <QMouseEvent>
00035 #include <QToolButton>
00036 #include <QSize>
00037 #include <QWidget>
00038
00039 ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent):
00040 QWidget(parent)
00041 {
00042
00043 white_ = white;
00044 black_ = black;
00045
00046
00047
00048 QHBoxLayout* clockLayout = new QHBoxLayout;
00049 clockLayout->addWidget(white_ );
00050 clockLayout->addWidget( black_ );
00051
00052
00053 pauseLabel_ = new QLabel( tr("<font color=yellow>Paused. Touch to continue.</font>"),this);
00054 pauseLabel_->setFont( QFont("Helvetica",25));
00055 pauseLabel_->setAlignment( Qt::AlignCenter);
00056 pauseLabel_->setVisible( false );
00057
00058
00059 welcomeLabel_ = new QLabel( tr("<font color=green>Welcome! Please touch to start game.<br>"
00060 "Then touch to end turn.</font>"),this);
00061 welcomeLabel_->setFont( QFont("Helvetica",25));
00062 welcomeLabel_->setAlignment( Qt::AlignCenter);
00063 welcomeLabel_->setVisible( true );
00064
00065
00066 pauseButton_ = new QToolButton;
00067 pauseButton_->setIcon( QIcon(":/rc/pic/pausebutton.png"));
00068 pauseButton_->setIconSize(QSize(75,75));
00069 connect(pauseButton_, SIGNAL(clicked()), this, SLOT(pause()));
00070 pauseButton_->setVisible(false);
00071
00072
00073 QVBoxLayout* mainLayout = new QVBoxLayout;
00074 mainLayout->addLayout(clockLayout);
00075
00076
00077 QVBoxLayout* extraLayout = new QVBoxLayout;
00078 extraLayout->addWidget(pauseLabel_);
00079 extraLayout->addWidget(welcomeLabel_);
00080
00081 QHBoxLayout* pbLayout = new QHBoxLayout;
00082 pbLayout->addStretch();
00083 pbLayout->addWidget(pauseButton_);
00084 pbLayout->addStretch();
00085 extraLayout->addLayout(pbLayout);
00086
00087 QWidget* extraWidget = new QWidget(this);
00088 extraWidget->setLayout(extraLayout);
00089
00090 extraWidget->installEventFilter(this);
00091 pauseLabel_->installEventFilter(this);
00092 welcomeLabel_->installEventFilter(this);
00093
00094 mainLayout->addWidget(extraWidget);
00095 setLayout( mainLayout);
00096 status_ = Welcome;
00097
00098
00099 white_->repaintClock();
00100 black_->repaintClock();
00101
00102
00103 white_->setAnother(black_);
00104 black_->setAnother(white_);
00105
00106 delayTimer_.start();
00107
00108 recentX = recentY = -1;
00109
00110
00111 keeper_ = new ScreenLitKeeper(this);
00112 }
00113
00114 ClocksWidget::~ClocksWidget()
00115 {
00116 delete white_;
00117 delete black_;
00118 }
00119
00120 void ClocksWidget::pause()
00121 {
00122 if(status_ == WhiteTurn)
00123 {
00124 status_= WhitePause;
00125 white_->pauseTurn();
00126 pauseLabel_->setVisible(true);
00127 pauseButton_->setVisible(false);
00128 keeper_->keepScreenLit(false);
00129
00130 }
00131 else if( status_ == BlackTurn)
00132 {
00133 status_ = BlackPause;
00134 black_->pauseTurn();
00135 pauseLabel_->setVisible(true);
00136 pauseButton_->setVisible(false);
00137 keeper_->keepScreenLit(false);
00138 }
00139 }
00140
00141 void ClocksWidget::stopPlay()
00142 {
00143 if( status_ == BlackTurn || status_ == BlackPause )
00144 emit TurnFinished( black_->endTurn());
00145 else if( status_ == WhiteTurn || status_ == WhitePause )
00146 emit TurnFinished( white_->endTurn());
00147 status_ = Stopped;
00148 }
00149
00150
00151 void ClocksWidget::mouseReleaseEvent(QMouseEvent *event)
00152 {
00153
00154
00155
00156
00157 if( delayTimer_.elapsed() > CLICKDELAY ||
00158 std::abs( event->x() - recentX ) > 90 ||
00159 std::abs( event->y() - recentY ) > 90
00160 )
00161 {
00162 delayTimer_.start();
00163 switch( status_)
00164 {
00165 case Welcome :
00166
00167 welcomeLabel_->setVisible(false);
00168 pauseButton_->setVisible(true);
00169 keeper_->keepScreenLit(true);
00170 white_->startTurn();
00171 status_ = WhiteTurn;
00172 break;
00173 case WhiteTurn:
00174
00175 emit TurnFinished( white_->endTurn());
00176 black_->startTurn();
00177 status_=BlackTurn;
00178 break;
00179 case BlackTurn:
00180
00181 emit TurnFinished( black_->endTurn());
00182 white_->startTurn();
00183 status_=WhiteTurn;
00184 break;
00185 case WhitePause:
00186
00187 keeper_->keepScreenLit(true);
00188 pauseLabel_->setVisible(false);
00189 pauseButton_->setVisible(true);
00190 white_->continueTurn();
00191 status_=WhiteTurn;
00192 break;
00193 case BlackPause:
00194
00195 keeper_->keepScreenLit(false);
00196 pauseLabel_->setVisible(false);
00197 pauseButton_->setVisible(true);
00198 black_->continueTurn();
00199 status_=BlackTurn;
00200 break;
00201 case Stopped:
00202 emit ClickedWhenStopped();
00203
00204
00205 }
00206 }
00207 recentX = event->x();
00208 recentY = event->y();
00209 }
00210
00211
00212 bool ClocksWidget::eventFilter(QObject *obj, QEvent *event)
00213 {
00214 if (event->type() == QEvent::MouseButtonRelease) {
00215 QMouseEvent *mEvent = static_cast<QMouseEvent *>(event);
00216 mouseReleaseEvent( mEvent );
00217 return true;
00218 } else {
00219
00220 return QObject::eventFilter(obj, event);
00221 }
00222 }
00223
00224
00225 int const ClocksWidget::CLICKDELAY;