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 connect( white, SIGNAL(dontEatBattery()), this, SLOT(saveScreen()));
00114 connect( black, SIGNAL(dontEatBattery()), this, SLOT(saveScreen()));
00115 }
00116
00117 ClocksWidget::~ClocksWidget()
00118 {
00119 delete white_;
00120 delete black_;
00121 }
00122
00123 void ClocksWidget::pause()
00124 {
00125 if(status_ == WhiteTurn)
00126 {
00127 status_= WhitePause;
00128 white_->pauseTurn();
00129 pauseLabel_->setVisible(true);
00130 pauseButton_->setVisible(false);
00131 keeper_->keepScreenLit(false);
00132
00133 }
00134 else if( status_ == BlackTurn)
00135 {
00136 status_ = BlackPause;
00137 black_->pauseTurn();
00138 pauseLabel_->setVisible(true);
00139 pauseButton_->setVisible(false);
00140 keeper_->keepScreenLit(false);
00141 }
00142 }
00143
00144 void ClocksWidget::stopPlay()
00145 {
00146 if( status_ == BlackTurn || status_ == BlackPause )
00147 emit TurnFinished( black_->endTurn());
00148 else if( status_ == WhiteTurn || status_ == WhitePause )
00149 emit TurnFinished( white_->endTurn());
00150 status_ = Stopped;
00151 }
00152
00153 void ClocksWidget::saveScreen()
00154 {
00155 keeper_->keepScreenLit(false);
00156 }
00157
00158
00159 void ClocksWidget::mouseReleaseEvent(QMouseEvent *event)
00160 {
00161
00162
00163
00164
00165 if( delayTimer_.elapsed() > CLICKDELAY ||
00166 std::abs( event->x() - recentX ) > 90 ||
00167 std::abs( event->y() - recentY ) > 90
00168 )
00169 {
00170 delayTimer_.start();
00171 switch( status_)
00172 {
00173 case Welcome :
00174
00175 welcomeLabel_->setVisible(false);
00176 pauseButton_->setVisible(true);
00177 keeper_->keepScreenLit(true);
00178 white_->startTurn();
00179 status_ = WhiteTurn;
00180 break;
00181 case WhiteTurn:
00182
00183 emit TurnFinished( white_->endTurn());
00184 black_->startTurn();
00185 status_=BlackTurn;
00186 break;
00187 case BlackTurn:
00188
00189 emit TurnFinished( black_->endTurn());
00190 white_->startTurn();
00191 status_=WhiteTurn;
00192 break;
00193 case WhitePause:
00194
00195 keeper_->keepScreenLit(true);
00196 pauseLabel_->setVisible(false);
00197 pauseButton_->setVisible(true);
00198 white_->continueTurn();
00199 status_=WhiteTurn;
00200 break;
00201 case BlackPause:
00202
00203 keeper_->keepScreenLit(true);
00204 pauseLabel_->setVisible(false);
00205 pauseButton_->setVisible(true);
00206 black_->continueTurn();
00207 status_=BlackTurn;
00208 break;
00209 case Stopped:
00210 emit ClickedWhenStopped();
00211
00212
00213 }
00214 }
00215 recentX = event->x();
00216 recentY = event->y();
00217 }
00218
00219
00220 bool ClocksWidget::eventFilter(QObject *obj, QEvent *event)
00221 {
00222 if (event->type() == QEvent::MouseButtonRelease) {
00223 QMouseEvent *mEvent = static_cast<QMouseEvent *>(event);
00224 mouseReleaseEvent( mEvent );
00225 return true;
00226 } else {
00227
00228 return QObject::eventFilter(obj, event);
00229 }
00230 }
00231
00232
00233 int const ClocksWidget::CLICKDELAY;