X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/08d655c2bc107449ee322f8b826710b7e690950b..a06ee3399bece608790e419054f95807a017a020:/src/panels/information/phononwidget.cpp diff --git a/src/panels/information/phononwidget.cpp b/src/panels/information/phononwidget.cpp index 5f0c11158..215be200a 100644 --- a/src/panels/information/phononwidget.cpp +++ b/src/panels/information/phononwidget.cpp @@ -20,10 +20,11 @@ #include "phononwidget.h" +#include #include #include #include -#include +#include #include #include @@ -31,15 +32,16 @@ #include #include -#include -#include -#include +#include +#include +#include +#include -class EmbeddedVideoPlayer : public Phonon::VideoPlayer +class EmbeddedVideoPlayer : public Phonon::VideoWidget { public: - EmbeddedVideoPlayer(Phonon::Category category, QWidget *parent = 0) : - Phonon::VideoPlayer(category, parent) + EmbeddedVideoPlayer(QWidget *parent = 0) : + Phonon::VideoWidget(parent) { } @@ -51,7 +53,7 @@ class EmbeddedVideoPlayer : public Phonon::VideoPlayer virtual QSize sizeHint() const { - return m_sizeHint.isValid() ? m_sizeHint : Phonon::VideoPlayer::sizeHint(); + return m_sizeHint.isValid() ? m_sizeHint : Phonon::VideoWidget::sizeHint(); } private: @@ -60,19 +62,18 @@ class EmbeddedVideoPlayer : public Phonon::VideoPlayer PhononWidget::PhononWidget(QWidget *parent) : QWidget(parent), - m_mode(Audio), m_url(), m_playButton(0), m_stopButton(0), m_topLayout(0), - m_audioMedia(0), m_media(0), m_seekSlider(0), + m_audioOutput(0), m_videoPlayer(0) { } -void PhononWidget::setUrl(const KUrl &url) +void PhononWidget::setUrl(const QUrl &url) { if (m_url != url) { stop(); // emits playingStopped() signal @@ -80,24 +81,11 @@ void PhononWidget::setUrl(const KUrl &url) } } -KUrl PhononWidget::url() const +QUrl PhononWidget::url() const { return m_url; } -void PhononWidget::setMode(Mode mode) -{ - if (m_mode != mode) { - stop(); // emits playingStopped() signal - m_mode = mode; - } -} - -PhononWidget::Mode PhononWidget::mode() const -{ - return m_mode; -} - void PhononWidget::setVideoSize(const QSize& size) { if (m_videoSize != size) { @@ -136,16 +124,21 @@ void PhononWidget::showEvent(QShowEvent *event) m_topLayout->addLayout(controlsLayout); + const int smallIconSize = IconSize(KIconLoader::Small); + const QSize buttonSize(smallIconSize, smallIconSize); + m_playButton->setToolTip(i18n("play")); - m_playButton->setIconSize(QSize(16, 16)); - m_playButton->setIcon(KIcon("media-playback-start")); - connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + m_playButton->setIconSize(buttonSize); + m_playButton->setIcon(QIcon::fromTheme("media-playback-start")); + m_playButton->setAutoRaise(true); + connect(m_playButton, &QToolButton::clicked, this, &PhononWidget::play); m_stopButton->setToolTip(i18n("stop")); - m_stopButton->setIconSize(QSize(16, 16)); - m_stopButton->setIcon(KIcon("media-playback-stop")); + m_stopButton->setIconSize(buttonSize); + m_stopButton->setIcon(QIcon::fromTheme("media-playback-stop")); + m_stopButton->setAutoRaise(true); m_stopButton->hide(); - connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + connect(m_stopButton, &QToolButton::clicked, this, &PhononWidget::stop); m_seekSlider->setIconVisible(false); @@ -173,6 +166,12 @@ void PhononWidget::stateChanged(Phonon::State newstate) m_stopButton->show(); m_playButton->hide(); break; + case Phonon::StoppedState: + if (m_videoPlayer) { + m_videoPlayer->hide(); + } + emit hasVideoChanged(false); + // fall through default: m_stopButton->hide(); m_playButton->show(); @@ -183,54 +182,47 @@ void PhononWidget::stateChanged(Phonon::State newstate) void PhononWidget::play() { - switch (m_mode) { - case Audio: - if (!m_audioMedia) { - m_audioMedia = Phonon::createPlayer(Phonon::MusicCategory, m_url); - m_audioMedia->setParent(this); - } - m_media = m_audioMedia; - m_media->setCurrentSource(m_url); - m_media->play(); - break; + if (!m_media) { + m_media = new Phonon::MediaObject(this); + connect(m_media, &Phonon::MediaObject::stateChanged, + this, &PhononWidget::stateChanged); + connect(m_media, &Phonon::MediaObject::hasVideoChanged, + this, &PhononWidget::slotHasVideoChanged); + m_seekSlider->setMediaObject(m_media); + } - case Video: - if (!m_videoPlayer) { - m_videoPlayer = new EmbeddedVideoPlayer(Phonon::VideoCategory, this); - m_topLayout->insertWidget(0, m_videoPlayer); - } + if (!m_videoPlayer) { + m_videoPlayer = new EmbeddedVideoPlayer(this); + m_topLayout->insertWidget(0, m_videoPlayer); + Phonon::createPath(m_media, m_videoPlayer); applyVideoSize(); - m_videoPlayer->show(); - m_videoPlayer->play(m_url); - m_media = m_videoPlayer->mediaObject(); - break; + } - default: - break; + if (!m_audioOutput) { + m_audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); + Phonon::createPath(m_media, m_audioOutput); } - Q_ASSERT(m_media); - connect(m_media, SIGNAL(stateChanged(Phonon::State,Phonon::State)), - this, SLOT(stateChanged(Phonon::State))); - m_seekSlider->setMediaObject(m_media); + emit hasVideoChanged(false); - emit playingStarted(); + m_media->setCurrentSource(m_url); + m_media->hasVideo(); + m_media->play(); } void PhononWidget::stop() { if (m_media) { m_media->stop(); - disconnect(m_media, SIGNAL(stateChanged(Phonon::State,Phonon::State)), - this, SLOT(stateChanged(Phonon::State))); - emit playingStopped(); - - m_stopButton->hide(); - m_playButton->show(); } +} - if (m_videoPlayer) { - m_videoPlayer->hide(); +void PhononWidget::slotHasVideoChanged(bool hasVideo) +{ + emit hasVideoChanged(hasVideo); + + if (hasVideo) { + m_videoPlayer->show(); } }