MixedView/mainwindow.cpp
author Wesley Thierry <wesleyt@symbian.org>
Wed, 20 Oct 2010 12:55:41 -0700
changeset 0 061910b224a4
child 1 3e3364c5ae1c
permissions -rw-r--r--
Adding mixedview project

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsProxyWidget>
#include <QFormLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QGroupBox>
#include <QResizeEvent>
#include <QFile>
#include <QStringList>
#include <QSound>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    ui->setupUi(this);
    mPacState = 0;
    bIsMoving = true;
    xAxis = yAxis = 0;
    mLastPt.setX(0);
    mLastPt.setY(0);
    mPause = false;

    // declare the accelerometer
    mAccelerometer = new QAccelerometer(this);
    mAccelerometer->start();

    QSize screenSize = this->size();
    mScene = new QGraphicsScene();

    QRect sceneRect = ui->mainGraphicsView->rect();
    mScene->setSceneRect(sceneRect);
   // scene->setBackgroundBrush (QBrush(Qt::blue));

    QPixmap mazeImage(":/media/maze.jpg");
    int width = screenSize.width();
    mazeImage = mazeImage.scaledToWidth(width);
    QGraphicsPixmapItem *backGround = mScene->addPixmap(mazeImage);
    backGround->setPos(-140,-200);

    mPacman = new QGraphicsEllipseItem(0, 0, 18, 18);
    mPacman->setBrush(QBrush(Qt::yellow));
    mPacman->setSpanAngle(4500);
    mScene->addItem(mPacman);

    // lets place a pause button in the view
    pauseButton = new QPushButton("Pause");
    connect(pauseButton, SIGNAL(clicked()), this, SLOT(pause()));
    pauseButton->setMaximumHeight(40);
    pauseButton->setMaximumWidth(300);
    QGraphicsProxyWidget *buttonProxy = mScene->addWidget(pauseButton);
    buttonProxy->setPos(0, -220);

    // now set up the boundries
    setupBoundries();

    ui->mainGraphicsView->setScene(mScene);
    ui->mainGraphicsView->show();

    mPacman->setPos(20,-8);

    // declare our update timer
    mUpdateTimer = new QTimer(this);
    connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(updateGraphics()));
    mUpdateTimer->start(250);

    // connect the accelerometer to the readingChanged signal
    connect(mAccelerometer, SIGNAL(readingChanged()), this, SLOT(updateReading()));

    //mPlayer = new QMediaPlayer;
    QMediaResource res(QUrl::fromLocalFile(":/media/pacman_intro.wav"));
    QString codec = res.audioCodec();
    QAudioFormat format;
    // Set up the format, eg.
    format.setFrequency(8000);
    format.setChannels(1);
    format.setSampleSize(8);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::UnSignedInt);

    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    if (!info.isFormatSupported(format)) {
        //qWarning()<<"raw audio format not supported by backend, cannot play audio.";
        return;
    }
      // file.setFileName(":/media/pacman_intro.wav");
      //  file.open(QIODevice::ReadOnly);


      //  int size = file.size();

       // mAudio = new QAudioOutput(format, this);
      //  file.setParent(mAudio);

      //  mAudio->start(&file);
       // QSound::play(":/media/pacman_intro.wav");

       // mPlayer->setMedia(QUrl::fromLocalFile(":/media/intro.mp3"));
        //int leg = mPlayer->duration();
       // mPlayer->setVolume(100);
        //mPlayer->play();


    mNumHits = 1;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::updateGraphics() {
    if (mPause || mNumHits > 1)
        return;

    if (!bIsMoving)
        return;
    switch (mPacState) {
    case 0:
        mPacman->setSpanAngle(5700);
        break;
    case 1:
        mPacman->setSpanAngle(4500);
        break;
    case 2:
        mPacman->setSpanAngle(4000);
        break;
    default:
        break;
    }

    mPacState += 1;
    if (mPacState == 2)
        mPacState = 0;
}

void MainWindow::updateReading() {
    if (mPause)
        return;
    mNumHits = mPacman->collidingItems().count();
    if (mNumHits == 1)
        mLastPt = mPacman->pos();
    xAxis = (xAxis + mAccelerometer->reading()->x()) / 2;
    yAxis = (yAxis + mAccelerometer->reading()->y()) / 2;

    QPointF pt =  mPacman->pos();

    pt.setX(pt.x()-xAxis);
    pt.setY(pt.y()+yAxis);    

    if (pt.x()<-103)
        pt.setX(-103);
    else if (pt.x()>180)
        pt.setX(180);

    if (pt.y()<-156)
        pt.setY(-156);
    else if (pt.y()>145)
        pt.setY(145);


    QList<QGraphicsItem*> itemList = mScene->items();
    int itemCount = itemList.count();
    bool contains = false;
    for (int i=0;i < itemCount; i++) {
        QGraphicsItem *item = itemList.at(i);
        if (item->contains(pt))
            contains = true;
    }
    if (mNumHits == 1) {
        mPacman->setPos(pt);

    }
    else
        mPacman->setPos(mLastPt);


}

void MainWindow::pause() {
    mPause = !mPause;
    if (mPause)
        pauseButton->setText("Play");
    else
        pauseButton->setText("Pause");
}


void MainWindow::statusChanged(QMediaPlayer::MediaStatus status) {
    switch (status) {
    case QMediaPlayer::LoadedMedia:
        mPlayer->play();
        break;
    default:
        break;
    }
}

void MainWindow::setupBoundries() {
    // borders
    QGraphicsRectItem *mRect1 = new QGraphicsRectItem(0,0,82,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(5,14);

    mRect1 = new QGraphicsRectItem(0,0,11,46);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(40,15);

    mRect1 = new QGraphicsRectItem(0,0,82,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(5,91);

    mRect1 = new QGraphicsRectItem(0,0,11,46);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(40,92);

    //
    mRect1 = new QGraphicsRectItem(0,0,47,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-47,-136);

    mRect1 = new QGraphicsRectItem(0,0,50,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(88,-136);

    // center square
    mRect1 = new QGraphicsRectItem(0,0,57,35);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(17,-46);

    mRect1 = new QGraphicsRectItem(0,0,11,55);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(40,-160);

    mRect1 = new QGraphicsRectItem(0,0,11,46);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-82,-131);

    mRect1 = new QGraphicsRectItem(0,0,11,46);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(160,-131);

    mRect1 = new QGraphicsRectItem(0,0,11,64);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-67,-60);

    mRect1 = new QGraphicsRectItem(0,0,11,64);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(153,-60);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-22,-85);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(103,-85);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-27,45);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(108,45);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-71,93);

    mRect1 = new QGraphicsRectItem(0,0,11,48);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(158,95);

    mRect1 = new QGraphicsRectItem(0,0,47,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-63,43);

    mRect1 = new QGraphicsRectItem(0,0,47,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(108,45);

    mRect1 = new QGraphicsRectItem(0,0,47,12);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-70,128);

    mRect1 = new QGraphicsRectItem(0,0,47,11);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(122,132);

    mRect1 = new QGraphicsRectItem(0,0,47,12);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(-23,-85);

    mRect1 = new QGraphicsRectItem(0,0,47,12);
    mRect1->setBrush(QBrush(Qt::transparent));
    mScene->addItem(mRect1);
    mRect1->setPos(67,-85);

}