]> cloud.milkyroute.net Git - dolphin.git/blob - src/panels/information/phononwidget.h
Add click to play/pause feature on previews for audio/video
[dolphin.git] / src / panels / information / phononwidget.h
1 /* This file is part of the KDE project
2 Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License as
6 published by the Free Software Foundation; either version 2 of
7 the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18
19 */
20
21 #ifndef PHONONWIDGET_H
22 #define PHONONWIDGET_H
23
24 #include <Phonon/Global>
25
26 #include <QSize>
27 #include <QUrl>
28 #include <QWidget>
29
30 namespace Phonon
31 {
32 class AudioOutput;
33 class MediaObject;
34 class SeekSlider;
35 class VideoPlayer;
36 } // namespace Phonon
37
38 class EmbeddedVideoPlayer;
39 class QToolButton;
40 class QVBoxLayout;
41
42 class PhononWidget : public QWidget
43 {
44 Q_OBJECT
45 public:
46
47 enum MediaKind {
48 Video,
49 Audio
50 };
51
52 explicit PhononWidget(QWidget *parent = nullptr);
53
54 void setUrl(const QUrl &url, MediaKind kind);
55 QUrl url() const;
56 void clearUrl();
57
58 void setVideoSize(const QSize& size);
59 QSize videoSize() const;
60 Phonon::State state() const;
61
62 void setAutoPlay(bool autoPlay);
63 bool eventFilter(QObject *object, QEvent *event) override;
64
65 signals:
66 /**
67 * Is emitted whenever the video-state
68 * has changed: If true is returned, a video
69 * including control-buttons will be shown.
70 * If false is returned, no video is shown
71 * and the control-buttons are available for
72 * audio only.
73 */
74 void hasVideoChanged(bool hasVideo);
75
76 public slots:
77 void play();
78
79 protected:
80 void showEvent(QShowEvent *event) override;
81 void hideEvent(QHideEvent *event) override;
82
83 private slots:
84 void stateChanged(Phonon::State newstate);
85 void stop();
86 void finished();
87
88 private:
89 void applyVideoSize();
90
91 private:
92 QUrl m_url;
93 QSize m_videoSize;
94
95 QToolButton *m_playButton;
96 QToolButton *m_stopButton;
97
98 QVBoxLayout *m_topLayout;
99 Phonon::MediaObject *m_media;
100 Phonon::SeekSlider *m_seekSlider;
101 Phonon::AudioOutput *m_audioOutput;
102 EmbeddedVideoPlayer *m_videoPlayer;
103 bool m_autoPlay;
104 bool m_isVideo;
105 };
106
107 #endif // PHONONWIDGET_H