41
42
#include "hudwidget.h"
42
43
#include "widgetfloater.h"
47
48
struct VideoViewAdapterPrivate {
49
Phonon::MediaObject* mMediaObject;
50
Phonon::VideoWidget* mVideoWidget;
51
Phonon::AudioOutput* mAudioOutput;
53
WidgetFloater* mFloater;
54
QToolButton* mPlayPauseButton;
56
Document::Ptr mDocument;
58
void setupHud(QWidget* parent) {
60
QWidget* widget = new QWidget;
61
QHBoxLayout* layout = new QHBoxLayout(widget);
63
mPlayPauseButton = new QToolButton;
64
mPlayPauseButton->setAutoRaise(true);
65
q->updatePlayPauseButton();
66
QObject::connect(mPlayPauseButton, SIGNAL(clicked()),
67
q, SLOT(slotPlayPauseClicked()));
68
QObject::connect(mMediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
69
q, SLOT(updatePlayPauseButton()));
71
Phonon::SeekSlider* seekSlider = new Phonon::SeekSlider;
72
seekSlider->setTracking(false);
73
seekSlider->setIconVisible(false);
74
seekSlider->setMediaObject(mMediaObject);
76
Phonon::VolumeSlider* volumeSlider = new Phonon::VolumeSlider;
77
volumeSlider->setAudioOutput(mAudioOutput);
78
volumeSlider->setMinimumWidth(100);
80
layout->addWidget(mPlayPauseButton);
81
layout->addWidget(seekSlider, 5 /* stretch */);
82
layout->addWidget(volumeSlider, 1 /* stretch */);
87
mHud->setAutoFillBackground(true);
88
mHud->init(widget, HudWidget::OptionDoNotFollowChildSize | HudWidget::OptionOpaque);
91
mFloater = new WidgetFloater(parent);
92
mFloater->setChildWidget(mHud);
93
mFloater->setAlignment(Qt::AlignJustify | Qt::AlignBottom);
95
mVideoWidget->installEventFilter(q);
99
bool isPlaying() const {
100
switch (mMediaObject->state()) {
101
case Phonon::StoppedState:
102
case Phonon::PausedState:
110
void updateHudVisibility(int yPos) {
111
const int floaterY = mVideoWidget->height() - mFloater->verticalMargin() - mHud->sizeHint().height() * 3 / 2;
112
if (mHud->isVisible() && yPos < floaterY) {
114
} else if (!mHud->isVisible() && yPos >= floaterY) {
50
Phonon::MediaObject* mMediaObject;
51
Phonon::VideoWidget* mVideoWidget;
52
Phonon::AudioOutput* mAudioOutput;
54
WidgetFloater* mFloater;
55
QToolButton* mPlayPauseButton;
57
Document::Ptr mDocument;
59
void setupHud(QWidget* parent)
62
QWidget* widget = new QWidget;
63
QHBoxLayout* layout = new QHBoxLayout(widget);
65
mPlayPauseButton = new QToolButton;
66
mPlayPauseButton->setAutoRaise(true);
67
q->updatePlayPauseButton();
68
QObject::connect(mPlayPauseButton, SIGNAL(clicked()),
69
q, SLOT(slotPlayPauseClicked()));
70
QObject::connect(mMediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
71
q, SLOT(updatePlayPauseButton()));
73
Phonon::SeekSlider* seekSlider = new Phonon::SeekSlider;
74
seekSlider->setTracking(false);
75
seekSlider->setIconVisible(false);
76
seekSlider->setMediaObject(mMediaObject);
78
Phonon::VolumeSlider* volumeSlider = new Phonon::VolumeSlider;
79
volumeSlider->setAudioOutput(mAudioOutput);
80
volumeSlider->setMinimumWidth(100);
82
layout->addWidget(mPlayPauseButton);
83
layout->addWidget(seekSlider, 5 /* stretch */);
84
layout->addWidget(volumeSlider, 1 /* stretch */);
89
mHud->setAutoFillBackground(true);
90
mHud->init(widget, HudWidget::OptionDoNotFollowChildSize | HudWidget::OptionOpaque);
93
mFloater = new WidgetFloater(parent);
94
mFloater->setChildWidget(mHud);
95
mFloater->setAlignment(Qt::AlignJustify | Qt::AlignBottom);
97
mVideoWidget->installEventFilter(q);
100
bool isPlaying() const {
101
switch (mMediaObject->state()) {
102
case Phonon::StoppedState:
103
case Phonon::PausedState:
110
void updateHudVisibility(int yPos)
112
const int floaterY = mVideoWidget->height() - mFloater->verticalMargin() - mHud->sizeHint().height() * 3 / 2;
113
if (mHud->isVisible() && yPos < floaterY) {
115
} else if (!mHud->isVisible() && yPos >= floaterY) {
121
VideoViewAdapter::VideoViewAdapter(QWidget* parent)
122
: AbstractDocumentViewAdapter(parent)
123
, d(new VideoViewAdapterPrivate) {
125
d->mMediaObject = new Phonon::MediaObject(this);
126
connect(d->mMediaObject, SIGNAL(finished()), SIGNAL(videoFinished()));
128
d->mVideoWidget = new Phonon::VideoWidget(parent);
129
d->mVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
130
d->mVideoWidget->setAttribute(Qt::WA_Hover);
132
Phonon::createPath(d->mMediaObject, d->mVideoWidget);
134
d->mAudioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this);
135
Phonon::createPath(d->mMediaObject, d->mAudioOutput);
137
d->setupHud(d->mVideoWidget);
139
setWidget(d->mVideoWidget);
143
void VideoViewAdapter::installEventFilterOnViewWidgets(QObject* object) {
144
d->mVideoWidget->installEventFilter(object);
148
VideoViewAdapter::~VideoViewAdapter() {
153
void VideoViewAdapter::setDocument(Document::Ptr doc) {
156
d->mMediaObject->setCurrentSource(d->mDocument->url());
157
d->mMediaObject->play();
161
Document::Ptr VideoViewAdapter::document() const {
166
void VideoViewAdapter::slotPlayPauseClicked() {
167
if (d->isPlaying()) {
168
d->mMediaObject->pause();
170
d->mMediaObject->play();
175
bool VideoViewAdapter::eventFilter(QObject*, QEvent* event) {
176
if (event->type() == QEvent::MouseMove) {
177
d->updateHudVisibility(static_cast<QMouseEvent*>(event)->y());
183
void VideoViewAdapter::updatePlayPauseButton() {
184
if (d->isPlaying()) {
185
d->mPlayPauseButton->setIcon(KIcon("media-playback-pause"));
187
d->mPlayPauseButton->setIcon(KIcon("media-playback-start"));
121
VideoViewAdapter::VideoViewAdapter()
122
: d(new VideoViewAdapterPrivate)
125
d->mMediaObject = new Phonon::MediaObject(this);
126
connect(d->mMediaObject, SIGNAL(finished()), SIGNAL(videoFinished()));
128
d->mVideoWidget = new Phonon::VideoWidget;
129
d->mVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
130
d->mVideoWidget->setAttribute(Qt::WA_Hover);
132
Phonon::createPath(d->mMediaObject, d->mVideoWidget);
134
d->mAudioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this);
135
Phonon::createPath(d->mMediaObject, d->mAudioOutput);
137
d->setupHud(d->mVideoWidget);
139
QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget;
140
proxy->setWidget(d->mVideoWidget);
144
VideoViewAdapter::~VideoViewAdapter()
149
void VideoViewAdapter::setDocument(Document::Ptr doc)
153
d->mMediaObject->setCurrentSource(d->mDocument->url());
154
d->mMediaObject->play();
157
Document::Ptr VideoViewAdapter::document() const
162
void VideoViewAdapter::slotPlayPauseClicked()
164
if (d->isPlaying()) {
165
d->mMediaObject->pause();
167
d->mMediaObject->play();
171
bool VideoViewAdapter::eventFilter(QObject*, QEvent* event)
173
if (event->type() == QEvent::MouseMove) {
174
d->updateHudVisibility(static_cast<QMouseEvent*>(event)->y());
179
void VideoViewAdapter::updatePlayPauseButton()
181
if (d->isPlaying()) {
182
d->mPlayPauseButton->setIcon(KIcon("media-playback-pause"));
184
d->mPlayPauseButton->setIcon(KIcon("media-playback-start"));