|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# movieplayer.cpp Example File
widgets/movie/movieplayer.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the documentation of the Qt Toolkit.
        **
        ** This file may be used under the terms of the GNU General Public
        ** License version 2.0 as published by the Free Software Foundation
        ** and appearing in the file LICENSE.GPL included in the packaging of
        ** this file.  Please review the following information to ensure GNU
        ** General Public Licensing requirements will be met:
        ** http://www.trolltech.com/products/qt/opensource.html
        **
        ** If you are unsure which license is appropriate for your use, please
        ** review the following information:
        ** http://www.trolltech.com/products/qt/licensing.html or contact the
        ** sales department at sales@trolltech.com.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "movieplayer.h"

        MoviePlayer::MoviePlayer(QWidget *parent)
            : QWidget(parent)
        {
            movie = new QMovie(this);
            movie->setCacheMode(QMovie::CacheAll);

            movieLabel = new QLabel(tr("No movie loaded"));
            movieLabel->setAlignment(Qt::AlignCenter);
            movieLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
            movieLabel->setBackgroundRole(QPalette::Dark);
            movieLabel->setAutoFillBackground(true);

            currentMovieDirectory = "movies";

            createControls();
            createButtons();

            connect(movie, SIGNAL(frameChanged(int)), this, SLOT(updateFrameSlider()));
            connect(movie, SIGNAL(stateChanged(QMovie::MovieState)),
                    this, SLOT(updateButtons()));
            connect(fitCheckBox, SIGNAL(clicked()), this, SLOT(fitToWindow()));
            connect(frameSlider, SIGNAL(valueChanged(int)), this, SLOT(goToFrame(int)));
            connect(speedSpinBox, SIGNAL(valueChanged(int)),
                    movie, SLOT(setSpeed(int)));

            mainLayout = new QVBoxLayout;
            mainLayout->addWidget(movieLabel);
            mainLayout->addLayout(controlsLayout);
            mainLayout->addLayout(buttonsLayout);
            setLayout(mainLayout);

            updateFrameSlider();
            updateButtons();

            setWindowTitle(tr("Movie Player"));
            resize(400, 400);
        }

        void MoviePlayer::open()
        {
            QString fileName = QFileDialog::getOpenFileName(this, tr("Open a Movie"),
                                       currentMovieDirectory);
            if (!fileName.isEmpty()) {
                currentMovieDirectory = QFileInfo(fileName).path();

                movie->stop();
                movieLabel->setMovie(movie);
                movie->setFileName(fileName);
                movie->start();

                updateFrameSlider();
                updateButtons();
            }
        }

        void MoviePlayer::goToFrame(int frame)
        {
            movie->jumpToFrame(frame);
        }

        void MoviePlayer::fitToWindow()
        {
            movieLabel->setScaledContents(fitCheckBox->isChecked());
        }

        void MoviePlayer::updateFrameSlider()
        {
            bool hasFrames = (movie->currentFrameNumber() >= 0);

            if (hasFrames) {
                if (movie->frameCount() > 0) {
                    frameSlider->setMaximum(movie->frameCount() - 1);
                } else {
                    if (movie->currentFrameNumber() > frameSlider->maximum())
                        frameSlider->setMaximum(movie->currentFrameNumber());
                }
                frameSlider->setValue(movie->currentFrameNumber());
            } else {
                frameSlider->setMaximum(0);
            }
            frameLabel->setEnabled(hasFrames);
            frameSlider->setEnabled(hasFrames);
        }

        void MoviePlayer::updateButtons()
        {
            playButton->setEnabled(movie->isValid() && movie->frameCount() != 1
                                   && movie->state() == QMovie::NotRunning);
            pauseButton->setEnabled(movie->state() != QMovie::NotRunning);
            pauseButton->setChecked(movie->state() == QMovie::Paused);
            stopButton->setEnabled(movie->state() != QMovie::NotRunning);
        }

        void MoviePlayer::createControls()
        {
            fitCheckBox = new QCheckBox(tr("Fit to Window"));

            frameLabel = new QLabel(tr("Current frame:"));

            frameSlider = new QSlider(Qt::Horizontal);
            frameSlider->setTickPosition(QSlider::TicksBelow);
            frameSlider->setTickInterval(10);

            speedLabel = new QLabel(tr("Speed:"));

            speedSpinBox = new QSpinBox;
            speedSpinBox->setRange(1, 9999);
            speedSpinBox->setValue(100);
            speedSpinBox->setSuffix(tr("%"));

            controlsLayout = new QGridLayout;
            controlsLayout->addWidget(fitCheckBox, 0, 0, 1, 2);
            controlsLayout->addWidget(frameLabel, 1, 0);
            controlsLayout->addWidget(frameSlider, 1, 1, 1, 2);
            controlsLayout->addWidget(speedLabel, 2, 0);
            controlsLayout->addWidget(speedSpinBox, 2, 1);
        }

        void MoviePlayer::createButtons()
        {
            QSize iconSize(36, 36);

            openButton = new QToolButton;
            openButton->setIcon(QIcon(":/images/open.png"));
            openButton->setIconSize(iconSize);
            openButton->setToolTip(tr("Open File"));
            connect(openButton, SIGNAL(clicked()), this, SLOT(open()));

            playButton = new QToolButton;
            playButton->setIcon(QIcon(":/images/play.png"));
            playButton->setIconSize(iconSize);
            playButton->setToolTip(tr("Play"));
            connect(playButton, SIGNAL(clicked()), movie, SLOT(start()));

            pauseButton = new QToolButton;
            pauseButton->setCheckable(true);
            pauseButton->setIcon(QIcon(":/images/pause.png"));
            pauseButton->setIconSize(iconSize);
            pauseButton->setToolTip(tr("Pause"));
            connect(pauseButton, SIGNAL(clicked(bool)), movie, SLOT(setPaused(bool)));

            stopButton = new QToolButton;
            stopButton->setIcon(QIcon(":/images/stop.png"));
            stopButton->setIconSize(iconSize);
            stopButton->setToolTip(tr("Stop"));
            connect(stopButton, SIGNAL(clicked()), movie, SLOT(stop()));

            quitButton = new QToolButton;
            quitButton->setIcon(QIcon(":/images/quit.png"));
            quitButton->setIconSize(iconSize);
            quitButton->setToolTip(tr("Quit"));
            connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));

            buttonsLayout = new QHBoxLayout;
            buttonsLayout->addStretch();
            buttonsLayout->addWidget(openButton);
            buttonsLayout->addWidget(playButton);
            buttonsLayout->addWidget(pauseButton);
            buttonsLayout->addWidget(stopButton);
            buttonsLayout->addWidget(quitButton);
            buttonsLayout->addStretch();
        }