/**************************************************************************** ** ** 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 demonstration applications 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 "playercontrols.h" #include #include #include #include #include PlayerControls::PlayerControls(QWidget *parent) : QWidget(parent) , playerState(QMediaPlayer::StoppedState) , playerMuted(false) , playButton(0) , stopButton(0) , nextButton(0) , previousButton(0) , muteButton(0) , volumeSlider(0) , rateBox(0) { playButton = new QToolButton; playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); connect(playButton, SIGNAL(clicked()), this, SLOT(playClicked())); stopButton = new QToolButton; stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop)); stopButton->setEnabled(false); connect(stopButton, SIGNAL(clicked()), this, SIGNAL(stop())); nextButton = new QToolButton; nextButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward)); connect(nextButton, SIGNAL(clicked()), this, SIGNAL(next())); previousButton = new QToolButton; previousButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward)); connect(previousButton, SIGNAL(clicked()), this, SIGNAL(previous())); muteButton = new QToolButton; muteButton->setIcon(style()->standardIcon(QStyle::SP_MediaVolume)); connect(muteButton, SIGNAL(clicked()), this, SLOT(muteClicked())); volumeSlider = new QSlider(Qt::Horizontal); volumeSlider->setRange(0, 100); connect(volumeSlider, SIGNAL(sliderMoved(int)), this, SIGNAL(changeVolume(int))); rateBox = new QComboBox; rateBox->addItem("0.5x", QVariant(0.5)); rateBox->addItem("1.0x", QVariant(1.0)); rateBox->addItem("2.0x", QVariant(2.0)); rateBox->setCurrentIndex(1); connect(rateBox, SIGNAL(activated(int)), SLOT(updateRate())); QBoxLayout *layout = new QHBoxLayout; layout->setMargin(0); layout->addWidget(stopButton); layout->addWidget(previousButton); layout->addWidget(playButton); layout->addWidget(nextButton); layout->addWidget(muteButton); layout->addWidget(volumeSlider); layout->addWidget(rateBox); setLayout(layout); } QMediaPlayer::State PlayerControls::state() const { return playerState; } void PlayerControls::setState(QMediaPlayer::State state) { if (state != playerState) { playerState = state; switch (state) { case QMediaPlayer::StoppedState: stopButton->setEnabled(false); playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); break; case QMediaPlayer::PlayingState: stopButton->setEnabled(true); playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); break; case QMediaPlayer::PausedState: stopButton->setEnabled(true); playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); break; } } } int PlayerControls::volume() const { return volumeSlider->value(); } void PlayerControls::setVolume(int volume) { volumeSlider->setValue(volume); } bool PlayerControls::isMuted() const { return playerMuted; } void PlayerControls::setMuted(bool muted) { if (muted != playerMuted) { playerMuted = muted; muteButton->setIcon(style()->standardIcon(muted ? QStyle::SP_MediaVolumeMuted : QStyle::SP_MediaVolume)); } } void PlayerControls::playClicked() { switch (playerState) { case QMediaPlayer::StoppedState: case QMediaPlayer::PausedState: emit play(); break; case QMediaPlayer::PlayingState: emit pause(); break; } } void PlayerControls::muteClicked() { emit changeMuting(!playerMuted); } qreal PlayerControls::playbackRate() const { return rateBox->itemData(rateBox->currentIndex()).toDouble(); } void PlayerControls::setPlaybackRate(float rate) { for (int i=0; icount(); i++) { if (qFuzzyCompare(rate, float(rateBox->itemData(i).toDouble()))) { rateBox->setCurrentIndex(i); return; } } rateBox->addItem( QString("%1x").arg(rate), QVariant(rate)); rateBox->setCurrentIndex(rateBox->count()-1); } void PlayerControls::updateRate() { emit changeRate(playbackRate()); }