parent
20d6e93e14
commit
edb3fd5086
@ -1,257 +0,0 @@ |
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 3 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
|
|
||||||
#include <QtGui> |
|
||||||
|
|
||||||
#include "UBMediaPlayer.h" |
|
||||||
|
|
||||||
#define SLIDER_RANGE 8 |
|
||||||
|
|
||||||
|
|
||||||
MediaVideoWidget::MediaVideoWidget(UBMediaPlayer *player, QWidget *parent) : |
|
||||||
Phonon::VideoWidget(parent), m_player(player)/*, m_action(this)*/ |
|
||||||
{ |
|
||||||
//NOOP
|
|
||||||
} |
|
||||||
|
|
||||||
void MediaVideoWidget::timerEvent(QTimerEvent *e) |
|
||||||
{ |
|
||||||
if (e->timerId() == m_timer.timerId()) { |
|
||||||
//let's store the cursor shape
|
|
||||||
#ifndef QT_NO_CURSOR |
|
||||||
setCursor(Qt::BlankCursor); |
|
||||||
#endif |
|
||||||
} |
|
||||||
Phonon::VideoWidget::timerEvent(e); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
UBMediaPlayer::UBMediaPlayer() : |
|
||||||
playButton(0), |
|
||||||
m_AudioOutput(Phonon::VideoCategory), |
|
||||||
m_videoWidget(new MediaVideoWidget(this)) |
|
||||||
{ |
|
||||||
setContextMenuPolicy(Qt::CustomContextMenu); |
|
||||||
m_videoWidget->setContextMenuPolicy(Qt::CustomContextMenu); |
|
||||||
|
|
||||||
QSize buttonSize(26, 20); |
|
||||||
|
|
||||||
playButton = new QPushButton(this); |
|
||||||
playIcon = style()->standardIcon(QStyle::SP_MediaPlay); |
|
||||||
pauseIcon = style()->standardIcon(QStyle::SP_MediaPause); |
|
||||||
playButton->setIcon(playIcon); |
|
||||||
|
|
||||||
slider = new Phonon::SeekSlider(this); |
|
||||||
slider->setMediaObject(&m_MediaObject); |
|
||||||
|
|
||||||
QVBoxLayout *vLayout = new QVBoxLayout(this); |
|
||||||
vLayout->setContentsMargins(1, 1, 1, 1); |
|
||||||
|
|
||||||
|
|
||||||
initVideoWindow(); |
|
||||||
vLayout->addWidget(&m_videoWindow); |
|
||||||
QVBoxLayout *buttonPanelLayout = new QVBoxLayout(); |
|
||||||
#ifndef Q_WS_WIN |
|
||||||
m_videoWindow.hide(); |
|
||||||
#endif |
|
||||||
progressLabel = new QLabel(this); |
|
||||||
QWidget *sliderPanel = new QWidget(this); |
|
||||||
QHBoxLayout *sliderLayout = new QHBoxLayout(); |
|
||||||
sliderLayout->addWidget(playButton); |
|
||||||
sliderLayout->addWidget(slider); |
|
||||||
sliderLayout->addWidget(progressLabel); |
|
||||||
sliderLayout->setContentsMargins(0, 0, 0, 0); |
|
||||||
sliderPanel->setLayout(sliderLayout); |
|
||||||
|
|
||||||
buttonPanelLayout->addWidget(sliderPanel); |
|
||||||
buttonPanelLayout->setContentsMargins(0, 0, 0, 0); |
|
||||||
#ifdef Q_OS_MAC |
|
||||||
buttonPanelLayout->setSpacing(0); |
|
||||||
#endif |
|
||||||
QWidget *buttonPanelWidget = new QWidget(this); |
|
||||||
buttonPanelWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); |
|
||||||
buttonPanelWidget->setLayout(buttonPanelLayout); |
|
||||||
vLayout->addWidget(buttonPanelWidget); |
|
||||||
|
|
||||||
QHBoxLayout *labelLayout = new QHBoxLayout(); |
|
||||||
vLayout->addLayout(labelLayout); |
|
||||||
setLayout(vLayout); |
|
||||||
|
|
||||||
connect(playButton, SIGNAL(clicked()), this, SLOT(playPause())); |
|
||||||
connect(&m_MediaObject, SIGNAL(finished()), this, SLOT(finished())); |
|
||||||
connect(&m_MediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(stateChanged(Phonon::State,Phonon::State))); |
|
||||||
connect(&m_MediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int))); |
|
||||||
connect(&m_MediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool))); |
|
||||||
|
|
||||||
playButton->setEnabled(false); |
|
||||||
|
|
||||||
m_audioOutputPath = Phonon::createPath(&m_MediaObject, &m_AudioOutput); |
|
||||||
Phonon::createPath(&m_MediaObject, m_videoWidget); |
|
||||||
|
|
||||||
resize(minimumSizeHint()); |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate) |
|
||||||
{ |
|
||||||
if (oldstate == Phonon::LoadingState) { |
|
||||||
QRect videoHintRect = QRect(QPoint(0, 0), m_videoWindow.sizeHint()); |
|
||||||
QApplication::desktop()->screenGeometry().intersected(videoHintRect); |
|
||||||
|
|
||||||
if (m_MediaObject.hasVideo()) { |
|
||||||
qApp->processEvents(); |
|
||||||
resize(sizeHint()); |
|
||||||
} else |
|
||||||
resize(minimumSize()); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
switch (newstate) { |
|
||||||
case Phonon::ErrorState: |
|
||||||
if (m_MediaObject.errorType() == Phonon::FatalError) { |
|
||||||
playButton->setEnabled(false); |
|
||||||
} else { |
|
||||||
m_MediaObject.pause(); |
|
||||||
} |
|
||||||
QMessageBox::warning(this, "Phonon UBMediaPlayer", m_MediaObject.errorString(), QMessageBox::Close); |
|
||||||
break; |
|
||||||
|
|
||||||
case Phonon::StoppedState: |
|
||||||
// Fall through
|
|
||||||
case Phonon::PausedState: |
|
||||||
playButton->setIcon(playIcon); |
|
||||||
if (m_MediaObject.currentSource().type() != Phonon::MediaSource::Invalid){ |
|
||||||
playButton->setEnabled(true); |
|
||||||
} else { |
|
||||||
playButton->setEnabled(false); |
|
||||||
} |
|
||||||
break; |
|
||||||
case Phonon::PlayingState: |
|
||||||
playButton->setEnabled(true); |
|
||||||
playButton->setIcon(pauseIcon); |
|
||||||
if (m_MediaObject.hasVideo()) |
|
||||||
m_videoWindow.show(); |
|
||||||
// Fall through
|
|
||||||
case Phonon::BufferingState: |
|
||||||
break; |
|
||||||
case Phonon::LoadingState: |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::setVolume(qreal volume) |
|
||||||
{ |
|
||||||
m_AudioOutput.setVolume(volume); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
void UBMediaPlayer::initVideoWindow() |
|
||||||
{ |
|
||||||
QVBoxLayout *videoLayout = new QVBoxLayout(); |
|
||||||
videoLayout->addWidget(m_videoWidget); |
|
||||||
videoLayout->setContentsMargins(0, 0, 0, 0); |
|
||||||
m_videoWindow.setLayout(videoLayout); |
|
||||||
m_videoWindow.setMinimumSize(60, 40); |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::playPause() |
|
||||||
{ |
|
||||||
if (m_MediaObject.state() == Phonon::PlayingState) |
|
||||||
m_MediaObject.pause(); |
|
||||||
else { |
|
||||||
if (m_MediaObject.currentTime() == m_MediaObject.totalTime()) |
|
||||||
m_MediaObject.seek(0); |
|
||||||
m_MediaObject.play(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::setFile(const QString &fileName) |
|
||||||
{ |
|
||||||
setWindowTitle(fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1)); |
|
||||||
m_MediaObject.setCurrentSource(Phonon::MediaSource(fileName)); |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::setLocation(const QString& location) |
|
||||||
{ |
|
||||||
setWindowTitle(location.right(location.length() - location.lastIndexOf('/') - 1)); |
|
||||||
m_MediaObject.setCurrentSource(Phonon::MediaSource(QUrl::fromEncoded(location.toUtf8()))); |
|
||||||
m_MediaObject.play(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
void UBMediaPlayer::openFile() |
|
||||||
{ |
|
||||||
QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); |
|
||||||
|
|
||||||
|
|
||||||
m_MediaObject.clearQueue(); |
|
||||||
if (fileNames.size() > 0) { |
|
||||||
QString fileName = fileNames[0]; |
|
||||||
setFile(fileName); |
|
||||||
for (int i=1; i<fileNames.size(); i++) |
|
||||||
m_MediaObject.enqueue(Phonon::MediaSource(fileNames[i])); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::bufferStatus(int percent) |
|
||||||
{ |
|
||||||
if (percent == 100) |
|
||||||
progressLabel->setText(QString()); |
|
||||||
else { |
|
||||||
QString str = QString::fromLatin1("(%1%)").arg(percent); |
|
||||||
progressLabel->setText(str); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::rewind() |
|
||||||
{ |
|
||||||
m_MediaObject.seek(0); |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::forward() |
|
||||||
{ |
|
||||||
QList<Phonon::MediaSource> queue = m_MediaObject.queue(); |
|
||||||
if (queue.size() > 0) { |
|
||||||
m_MediaObject.setCurrentSource(queue[0]); |
|
||||||
m_MediaObject.play(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::openUrl() |
|
||||||
{ |
|
||||||
QSettings settings; |
|
||||||
settings.beginGroup(QLatin1String("BrowserMainWindow")); |
|
||||||
QString sourceURL = settings.value("location").toString(); |
|
||||||
bool ok = false; |
|
||||||
sourceURL = QInputDialog::getText(this, tr("Open Location"), tr("Please enter a valid address here:"), QLineEdit::Normal, sourceURL, &ok); |
|
||||||
if (ok && !sourceURL.isEmpty()) { |
|
||||||
setLocation(sourceURL); |
|
||||||
settings.setValue("location", sourceURL); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::finished() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::hasVideoChanged(bool bHasVideo) |
|
||||||
{ |
|
||||||
m_videoWindow.setVisible(bHasVideo); |
|
||||||
} |
|
||||||
|
|
||||||
void UBMediaPlayer::resizeEvent(QResizeEvent* pEvent) |
|
||||||
{ |
|
||||||
Q_UNUSED(pEvent); |
|
||||||
} |
|
@ -1,106 +0,0 @@ |
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 3 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef UBUBMediaPlayer_H |
|
||||||
#define UBUBMediaPlayer_H |
|
||||||
|
|
||||||
#include <QtGui/QWidget> |
|
||||||
#include <QtGui/QApplication> |
|
||||||
#include <QtCore/QTimerEvent> |
|
||||||
#include <QtGui/QShowEvent> |
|
||||||
#include <QtGui/QIcon> |
|
||||||
#include <QtCore/QBasicTimer> |
|
||||||
#include <QtGui/QAction> |
|
||||||
|
|
||||||
#include <phonon/audiooutput.h> |
|
||||||
#include <phonon/backendcapabilities.h> |
|
||||||
#include <phonon/effect.h> |
|
||||||
#include <phonon/effectparameter.h> |
|
||||||
#include <phonon/effectwidget.h> |
|
||||||
#include <phonon/mediaobject.h> |
|
||||||
#include <phonon/seekslider.h> |
|
||||||
#include <phonon/videowidget.h> |
|
||||||
#include <phonon/volumeslider.h> |
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE |
|
||||||
class QPushButton; |
|
||||||
class QLabel; |
|
||||||
class QSlider; |
|
||||||
class QTextEdit; |
|
||||||
QT_END_NAMESPACE |
|
||||||
|
|
||||||
class UBMediaPlayer; |
|
||||||
|
|
||||||
class MediaVideoWidget : public Phonon::VideoWidget |
|
||||||
{ |
|
||||||
Q_OBJECT; |
|
||||||
|
|
||||||
public: |
|
||||||
MediaVideoWidget(UBMediaPlayer *player, QWidget *parent = 0); |
|
||||||
|
|
||||||
protected: |
|
||||||
void timerEvent(QTimerEvent *e); |
|
||||||
|
|
||||||
private: |
|
||||||
UBMediaPlayer* m_player; |
|
||||||
QBasicTimer m_timer; |
|
||||||
}; |
|
||||||
|
|
||||||
class UBMediaPlayer : public QWidget |
|
||||||
{ |
|
||||||
Q_OBJECT |
|
||||||
public: |
|
||||||
UBMediaPlayer(); |
|
||||||
|
|
||||||
void setFile(const QString &text); |
|
||||||
void setLocation(const QString &location); |
|
||||||
void setVolume(qreal volume); |
|
||||||
|
|
||||||
public slots: |
|
||||||
void openFile(); |
|
||||||
void rewind(); |
|
||||||
void forward(); |
|
||||||
void finished(); |
|
||||||
void playPause(); |
|
||||||
|
|
||||||
protected: |
|
||||||
void resizeEvent(QResizeEvent* pEvent); |
|
||||||
|
|
||||||
private slots: |
|
||||||
void stateChanged(Phonon::State newstate, Phonon::State oldstate); |
|
||||||
void bufferStatus(int percent); |
|
||||||
void openUrl(); |
|
||||||
|
|
||||||
void hasVideoChanged(bool); |
|
||||||
|
|
||||||
private: |
|
||||||
void initVideoWindow(); |
|
||||||
|
|
||||||
QIcon playIcon; |
|
||||||
QIcon pauseIcon; |
|
||||||
QPushButton *playButton; |
|
||||||
Phonon::SeekSlider *slider; |
|
||||||
QLabel *progressLabel; |
|
||||||
|
|
||||||
QWidget m_videoWindow; |
|
||||||
Phonon::MediaObject m_MediaObject; |
|
||||||
Phonon::AudioOutput m_AudioOutput; |
|
||||||
MediaVideoWidget *m_videoWidget; |
|
||||||
Phonon::Path m_audioOutputPath; |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // UBUBMediaPlayer_H
|
|
Loading…
Reference in new issue