examples/widgets/movie/movieplayer.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/movie/movieplayer.cpp	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#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())
+        openFile(fileName);
+}
+
+void MoviePlayer::openFile(const QString &fileName)
+{
+    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(style()->standardIcon(QStyle::SP_DialogOpenButton));
+    openButton->setIconSize(iconSize);
+    openButton->setToolTip(tr("Open File"));
+    connect(openButton, SIGNAL(clicked()), this, SLOT(open()));
+
+    playButton = new QToolButton;
+    playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+    playButton->setIconSize(iconSize);
+    playButton->setToolTip(tr("Play"));
+    connect(playButton, SIGNAL(clicked()), movie, SLOT(start()));
+
+    pauseButton = new QToolButton;
+    pauseButton->setCheckable(true);
+    pauseButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
+    pauseButton->setIconSize(iconSize);
+    pauseButton->setToolTip(tr("Pause"));
+    connect(pauseButton, SIGNAL(clicked(bool)), movie, SLOT(setPaused(bool)));
+
+    stopButton = new QToolButton;
+    stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));
+    stopButton->setIconSize(iconSize);
+    stopButton->setToolTip(tr("Stop"));
+    connect(stopButton, SIGNAL(clicked()), movie, SLOT(stop()));
+
+    quitButton = new QToolButton;
+    quitButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
+    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();
+}