]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/information/phononwidget.h
Merge branch 'master' into kf6
[dolphin.git] / src / panels / information / phononwidget.h
index 00c6574bf61ec372288a2c2e7b156089c0edadb7..a0a913b4fac746d47353848e4349be972893efb8 100644 (file)
@@ -1,61 +1,91 @@
-/*  This file is part of the KDE project
-    Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
-
-    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 2 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, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301, USA.
+/*
+  SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org>
 
+  SPDX-License-Identifier: GPL-2.0-or-later
 */
 
 #ifndef PHONONWIDGET_H
 #define PHONONWIDGET_H
 
-#include <kurl.h>
+#include <phonon/Global>
 
-#include <QtGui/QWidget>
-
-#include <Phonon/Global>
+#include <QSize>
+#include <QUrl>
+#include <QWidget>
 
 namespace Phonon
 {
-    class MediaObject;
-    class SeekSlider;
+class AudioOutput;
+class MediaObject;
+class SeekSlider;
+class VideoPlayer;
 } // namespace Phonon
 
+class EmbeddedVideoPlayer;
 class QToolButton;
+class QVBoxLayout;
 
 class PhononWidget : public QWidget
 {
     Q_OBJECT
-    public:
-        PhononWidget(QWidget *parent = 0);
-        void setUrl(const KUrl &url);
-
-    private slots:
-        void stateChanged(Phonon::State);
-        void play();
-        void stop();
-
-    private:
-        void requestMedia();
-
-    private:
-        KUrl m_url;
-        QToolButton *m_playButton;
-        QToolButton *m_stopButton;
-        Phonon::MediaObject *m_media;
-        Phonon::SeekSlider *m_seekSlider;
+public:
+    enum MediaKind { Video, Audio };
+
+    explicit PhononWidget(QWidget *parent = nullptr);
+
+    void setUrl(const QUrl &url, MediaKind kind);
+    QUrl url() const;
+    void clearUrl();
+
+    void setVideoSize(const QSize &size);
+    QSize videoSize() const;
+    Phonon::State state() const;
+
+    void setAutoPlay(bool autoPlay);
+    bool eventFilter(QObject *object, QEvent *event) override;
+
+Q_SIGNALS:
+    /**
+     * Is emitted whenever the video-state
+     * has changed: If true is returned, a video
+     * including control-buttons will be shown.
+     * If false is returned, no video is shown
+     * and the control-buttons are available for
+     * audio only.
+     */
+    void hasVideoChanged(bool hasVideo);
+
+public Q_SLOTS:
+    void play();
+
+protected:
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
+private Q_SLOTS:
+    void stateChanged(Phonon::State newstate);
+    void stop();
+    void finished();
+
+private:
+    void applyVideoSize();
+
+private:
+    void togglePlayback();
+
+    QUrl m_url;
+    QSize m_videoSize;
+
+    QToolButton *m_playButton;
+    QToolButton *m_pauseButton;
+
+    QVBoxLayout *m_topLayout;
+    Phonon::MediaObject *m_media;
+    Phonon::SeekSlider *m_seekSlider;
+    Phonon::AudioOutput *m_audioOutput;
+    EmbeddedVideoPlayer *m_videoPlayer;
+    bool m_autoPlay;
+    bool m_isVideo;
 };
 
 #endif // PHONONWIDGET_H