X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=classes%2Fclockswidget.cpp;h=f094f8d32160a8338e60f5463255c3a35d9a94ec;hb=8e60d556e00dbb7e86f2425605cf1b0a688a69e9;hp=d39c1f2f16da1dcd38082cdc3c948f4c7c728675;hpb=9473d40c4b521f23d222ed1373d405995b02ee33;p=chessclock diff --git a/classes/clockswidget.cpp b/classes/clockswidget.cpp index d39c1f2..f094f8d 100644 --- a/classes/clockswidget.cpp +++ b/classes/clockswidget.cpp @@ -22,13 +22,19 @@ #include "clockswidget.h" #include "chessclock.h" +#include "screenlitkeeper.h" + #include #include #include #include #include #include - +#include +#include +#include +#include +#include ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent): QWidget(parent) @@ -44,24 +50,48 @@ ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent clockLayout->addWidget( black_ ); // Pause information label - pauseLabel_ = new QLabel( tr("Paused. Touch to continue.")); + pauseLabel_ = new QLabel( tr("Paused. Touch to continue."),this); pauseLabel_->setFont( QFont("Helvetica",25)); pauseLabel_->setAlignment( Qt::AlignCenter); pauseLabel_->setVisible( false ); // Welcome label for first touch welcomeLabel_ = new QLabel( tr("Welcome! Please touch to start game.
" - "Then touch to end turn.
")); + "Then touch to end turn."),this); welcomeLabel_->setFont( QFont("Helvetica",25)); welcomeLabel_->setAlignment( Qt::AlignCenter); welcomeLabel_->setVisible( true ); // Show welcome message + // Pause button + pauseButton_ = new QToolButton; + pauseButton_->setIcon( QIcon(":/rc/pic/pausebutton.png")); + pauseButton_->setIconSize(QSize(75,75)); + connect(pauseButton_, SIGNAL(clicked()), this, SLOT(pause())); + pauseButton_->setVisible(false); + // Put all in layout QVBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addLayout(clockLayout); - mainLayout->addWidget(pauseLabel_); - mainLayout->addWidget(welcomeLabel_); + // Extra layout and widget for information + QVBoxLayout* extraLayout = new QVBoxLayout; + extraLayout->addWidget(pauseLabel_); + extraLayout->addWidget(welcomeLabel_); + + QHBoxLayout* pbLayout = new QHBoxLayout; + pbLayout->addStretch(); + pbLayout->addWidget(pauseButton_); + pbLayout->addStretch(); + extraLayout->addLayout(pbLayout); + + QWidget* extraWidget = new QWidget(this); + extraWidget->setLayout(extraLayout); + // Some fun event filtering to grap clicking welcome and pause labels... + extraWidget->installEventFilter(this); + pauseLabel_->installEventFilter(this); + welcomeLabel_->installEventFilter(this); + + mainLayout->addWidget(extraWidget); setLayout( mainLayout); status_ = Welcome; @@ -74,6 +104,17 @@ ClocksWidget::ClocksWidget(ChessClock *white, ChessClock *black, QWidget *parent black_->setAnother(white_); delayTimer_.start(); // Initial start + + recentX = recentY = -1; + + // ScreenLitKeeper to keep screen lit when playing + keeper_ = new ScreenLitKeeper(this); +} + +ClocksWidget::~ClocksWidget() +{ + delete white_; + delete black_; } void ClocksWidget::pause() @@ -83,12 +124,17 @@ void ClocksWidget::pause() status_= WhitePause; white_->pauseTurn(); pauseLabel_->setVisible(true); + pauseButton_->setVisible(false); + keeper_->keepScreenLit(false); + } else if( status_ == BlackTurn) { status_ = BlackPause; black_->pauseTurn(); pauseLabel_->setVisible(true); + pauseButton_->setVisible(false); + keeper_->keepScreenLit(false); } } @@ -104,13 +150,23 @@ void ClocksWidget::stopPlay() 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 : // Start game! welcomeLabel_->setVisible(false); + pauseButton_->setVisible(true); + keeper_->keepScreenLit(true); white_->startTurn(); status_ = WhiteTurn; break; @@ -128,13 +184,17 @@ void ClocksWidget::mouseReleaseEvent(QMouseEvent *event) break; case WhitePause: // Continue play + keeper_->keepScreenLit(true); pauseLabel_->setVisible(false); + pauseButton_->setVisible(true); white_->continueTurn(); status_=WhiteTurn; break; case BlackPause: // Continue play + keeper_->keepScreenLit(false); pauseLabel_->setVisible(false); + pauseButton_->setVisible(true); black_->continueTurn(); status_=BlackTurn; break; @@ -144,6 +204,22 @@ void ClocksWidget::mouseReleaseEvent(QMouseEvent *event) } } + recentX = event->x(); + recentY = event->y(); } +// to grap clicking pause or welcome label +bool ClocksWidget::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::MouseButtonRelease) { + QMouseEvent *mEvent = static_cast(event); + mouseReleaseEvent( mEvent ); + return true; + } else { + // standard event processing + return QObject::eventFilter(obj, event); + } +} + + int const ClocksWidget::CLICKDELAY;