X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=618446f082219d432faa1ef0b5952c4d131c1c0a;hb=07bab3bbc5c64ca09904c81342adba382423b219;hp=4b40dd662f78d22da9c2d6db4f01a62d6842764e;hpb=e472f2321c7870da02c3897e42d35aaae115bdec;p=ghostsoverboard diff --git a/mainwindow.cpp b/mainwindow.cpp index 4b40dd6..618446f 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,49 +1,81 @@ +/************************************************************************** + Ghosts Overboard - a game for Maemo 5 + + Copyright (C) 2011 Heli Hyvättinen + + This file is part of Ghosts Overboard + + Ghosts Overboard is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +**************************************************************************/ + #include "mainwindow.h" -#include "timercontrolledtursas.h" #include #include #include #include #include +#include +#include +#include +#include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { - paused_ = false; + setWindowIcon(QIcon(":/pix/laiva_3aave.png")); + setWindowTitle("Ghosts Overboard"); pScene_ = new SeaScene (); - pView_ = new QGraphicsView (); - + connect(pScene_,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel())); + pView_ = new QGraphicsView (); pView_->setScene(pScene_); setCentralWidget(pView_); - QAction * pPauseAction = new QAction(tr("Pause"),this); - pPauseAction->setCheckable(true); - addAction(pPauseAction); - connect(pPauseAction,SIGNAL(triggered(bool)),this,SLOT(pause(bool))); - menuBar()->addAction(pPauseAction); + pPauseAction_ = new QAction(tr("Pause"),this); + pPauseAction_->setCheckable(true); + addAction(pPauseAction_); + connect(pPauseAction_,SIGNAL(triggered(bool)),pScene_,SLOT(pause(bool))); + menuBar()->addAction(pPauseAction_); QAction * pRestartLevelAction = new QAction(tr("Restart level"),this); - pRestartLevelAction->setCheckable(true); addAction(pRestartLevelAction); connect(pRestartLevelAction,SIGNAL(triggered()),this,SLOT(restartLevel())); menuBar()->addAction(pRestartLevelAction); - - //the boundaries of the scene are set to match the size of the view window, which is not - //available in the constructor --> timer needed - QTimer::singleShot(100,this,SLOT(initializeBoundaries())); - - + QAction * pAboutAction = new QAction(tr("About"),this); + addAction(pAboutAction); + connect(pAboutAction,SIGNAL(triggered()),this,SLOT(about())); + menuBar()->addAction(pAboutAction); + QAction * pVibrateAction = new QAction(tr("Vibration effects"),this); + pVibrateAction->setCheckable(true); + addAction(pVibrateAction); + connect(pVibrateAction,SIGNAL(triggered(bool)),pScene_,SLOT(vibrationActivate(bool))); + menuBar()->addAction(pVibrateAction); + //the boundaries of the scene are set to match the size of the view window, which is not + //available in the constructor --> timer needed + QTimer::singleShot(100,this,SLOT(initializeBoundaries())); } MainWindow::~MainWindow() @@ -56,42 +88,126 @@ void MainWindow::initializeBoundaries() //the boundaries of the scene are set to match the size of the view window, and //the view is set to show exactly the whole scene area - QPoint topleft (0,0); - QSize windowsize = pView_->size(); - QRectF rectangle (topleft,windowsize); + //this occasionally gives a tiny scene, so using a fixed size fit for N900/Maemo5 until a fix is found +// QPoint topleft (0,0); +// QSize windowsize = pView_->size(); +// QRectF rectangle (topleft,windowsize); + + QRectF rectangle(0,0,800,424); pScene_->setSceneRect(rectangle); pView_->setSceneRect(rectangle); - qDebug() << "Initialized boundaries" << rectangle.right() << rectangle.bottom() << pView_->width() << pView_->height(); + // qDebug() << "Initialized boundaries" << rectangle.right() << rectangle.bottom() << pView_->width() << pView_->height(); - pScene_->setupMap(5,5,5); + restartLevel(); } -void MainWindow::pause(bool paused) + +void MainWindow::restartLevel() { -// qDebug() << "pause pressed " << paused; - if (paused_ == paused) - return; + pScene_->setupMap(5,10,5); +} - paused_ = paused; +void MainWindow::about() +{ + QMessageBox::about(this, tr("About %1").arg(QApplication::applicationName()), + tr("Version %1" + "

Copyright 2011 Heli Hyvättinen" + "

License: General Public License v2" + "

Bug Reports: https://bugs.maemo.org/ " + "enter_bug.cgi?product=Ghosts%20Overboard" + ).arg(QApplication::applicationVersion())); - if (paused == false) - { - // qDebug() << "starting to move again"; - pTursas_->startMoving(); - } - else - { - qDebug("about to stop movement"); - pTursas_->stopMoving(); - } } -void MainWindow::restartLevel() +void MainWindow::nextLevel() { - pScene_->setupMap(5,5,5); + + //for now, just the handling of last level is implemented, and there is just one level + + + + QDialog* pVictoryDialog = new QDialog(this); + pVictoryDialog->setWindowTitle(tr("You won!")); + + + QPushButton* pPlayAgainButton = new QPushButton(tr("Play again")); +// QPushButton* pQuitButton = new QPushButton(tr("Quit game")); + + QPixmap victoryIcon (":/pix/aavesaari.png"); + QLabel* pVictoryLabel = new QLabel(); + pVictoryLabel->setPixmap(victoryIcon); + + QLabel* pTextLabel = new QLabel(tr("Congratulations!

You have saved all the ghosts.")); + + + QVBoxLayout* pMainLayout = new QVBoxLayout; + + QHBoxLayout* pTopLayout = new QHBoxLayout; + pMainLayout->addLayout(pTopLayout); + + pTopLayout->addWidget(pVictoryLabel); + pTopLayout->addWidget(pTextLabel); + + + + QHBoxLayout* pButtonLayout = new QHBoxLayout(); + pMainLayout->addLayout(pButtonLayout); + + // pButtonLayout->addWidget(pQuitButton); + pButtonLayout->addWidget(pPlayAgainButton); + + + + pVictoryDialog->setLayout(pMainLayout); + + connect(pPlayAgainButton, SIGNAL(clicked()),pVictoryDialog,SLOT(accept())); + + pVictoryDialog->exec(); + + //Never mind if the user cancels the dialog: restart the game anyway + + restartLevel(); + } + +bool MainWindow::event(QEvent *event) +{ + + switch (event->type()) + { + //pause if app goes to background + case QEvent::WindowDeactivate: + + if (pScene_) + pScene_->pause(true); + break; + + //un-pause if app gomes back to foreground unless it was paused before going to background + case QEvent::WindowActivate: + + + if (pPauseAction_ && !pPauseAction_->isChecked()) + { + if (pScene_) + pScene_->pause(false); + } + break; + + //Just to keep the compiler from complaining... + default: + break; + + } + + + + //pass the event to the ancestor for handling + return QMainWindow::event(event); + + } +