Mega Code Archive

 
Categories / C++ / Qt
 

Mng file player

/**************************************************************************** ** ** 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$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** 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. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MOVIEPLAYER_H #define MOVIEPLAYER_H #include <QWidget> QT_BEGIN_NAMESPACE class QCheckBox; class QGridLayout; class QHBoxLayout; class QLabel; class QMovie; class QSlider; class QSpinBox; class QToolButton; class QVBoxLayout; QT_END_NAMESPACE class MoviePlayer : public QWidget {     Q_OBJECT public:     MoviePlayer(QWidget *parent = 0);     void openFile(const QString &fileName); private slots:     void open();     void goToFrame(int frame);     void fitToWindow();     void updateButtons();     void updateFrameSlider(); private:     void createControls();     void createButtons();     QString currentMovieDirectory;     QLabel *movieLabel;     QMovie *movie;     QToolButton *openButton;     QToolButton *playButton;     QToolButton *pauseButton;     QToolButton *stopButton;     QToolButton *quitButton;     QCheckBox *fitCheckBox;     QSlider *frameSlider;     QSpinBox *speedSpinBox;     QLabel *frameLabel;     QLabel *speedLabel;     QGridLayout *controlsLayout;     QHBoxLayout *buttonsLayout;     QVBoxLayout *mainLayout; }; #endif #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(); } #include <QApplication> #include "movieplayer.h" int main(int argc, char *argv[]) {     QApplication app(argc, argv);     MoviePlayer player;     player.show();     return app.exec(); }