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