From fd1b73ba56a828a2365fd413719d0aa0ef97467a Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 12 Feb 2009 20:51:49 +0000 Subject: [PATCH] shownControls->usedControls controlsVisible sets the whole controls widget visible/invisile svn path=/trunk/KDE/kdelibs/; revision=925247 --- widgets/videowidget.cpp | 51 ++++++++++++++++++++++++++++++++++++----- widgets/videowidget.h | 26 ++++++++++++++++----- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/widgets/videowidget.cpp b/widgets/videowidget.cpp index 5d8bafa82..8208ebd73 100644 --- a/widgets/videowidget.cpp +++ b/widgets/videowidget.cpp @@ -44,6 +44,7 @@ public: VideoWidgetPrivate(VideoWidget *video) : q(video), ticking(false), + forceControlsVisible(false), animId(0), hideTimer(0), shownControls(VideoWidget::NoControls), @@ -74,6 +75,7 @@ public: void animateControlWidget(bool show); void hideControlWidget(); void slidingCompleted(QGraphicsItem *item); + bool spaceForControlsAvailable(); VideoWidget *q; @@ -83,6 +85,7 @@ public: Phonon::MediaObject *media; bool ticking; + bool forceControlsVisible; //control widgets int animId; @@ -202,11 +205,22 @@ void VideoWidgetPrivate::slidingCompleted(QGraphicsItem *item) if (controlsWidget->pos().y() < 0) { controlsWidget->hide(); - } else { + } else if (!forceControlsVisible) { hideTimer->start(3000); } } +bool VideoWidgetPrivate::spaceForControlsAvailable() +{ + if (controlsWidget) { + QSize hint = controlsWidget->effectiveSizeHint(Qt::MinimumSize).toSize(); + return (q->size().width() >= hint.width()) && + (q->size().height() >= hint.height()); + } else { + return true; + } +} + VideoWidget::VideoWidget(QGraphicsWidget *parent) @@ -257,7 +271,7 @@ QString VideoWidget::url() const return d->media->currentSource().url().toString(); } -void VideoWidget::setShownControls(Controls controls) +void VideoWidget::setUsedControls(Controls controls) { d->shownControls = controls; @@ -394,7 +408,7 @@ void VideoWidget::setShownControls(Controls controls) d->controlsWidget->hide(); } -VideoWidget::Controls VideoWidget::shownControls() const +VideoWidget::Controls VideoWidget::usedControls() const { return d->shownControls; } @@ -435,6 +449,19 @@ qint64 VideoWidget::remainingTime() const return d->media->remainingTime(); } +void VideoWidget::setControlsVisible(bool visible) +{ + if (d->controlsWidget) { + d->forceControlsVisible = visible; + d->animateControlWidget(visible); + } +} + +bool VideoWidget::controlsVisible() const +{ + return d->controlsWidget != 0 && d->controlsWidget->isVisible(); +} + void VideoWidget::setStyleSheet(const QString &stylesheet) { d->videoWidget->setStyleSheet(stylesheet); @@ -457,6 +484,10 @@ void VideoWidget::resizeEvent(QGraphicsSceneResizeEvent *event) if (d->controlsWidget) { d->controlsWidget->resize(event->newSize().width(), d->controlsWidget->size().height()); + + if (d->spaceForControlsAvailable()) { + d->animateControlWidget(false); + } } } @@ -464,7 +495,9 @@ void VideoWidget::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event) - if (d->controlsWidget) { + if (d->controlsWidget && + !d->forceControlsVisible && + d->spaceForControlsAvailable()) { d->animateControlWidget(true); } } @@ -473,7 +506,7 @@ void VideoWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event) - if (d->controlsWidget) { + if (d->controlsWidget && !d->forceControlsVisible) { d->hideTimer->start(1000); } } @@ -482,9 +515,15 @@ void VideoWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event) + if (d->forceControlsVisible) { + return; + } + d->hideTimer->start(3000); - if (d->controlsWidget && !d->controlsWidget->isVisible()) { + if (d->controlsWidget && + !d->controlsWidget->isVisible() && + d->spaceForControlsAvailable()) { d->animateControlWidget(true); } } diff --git a/widgets/videowidget.h b/widgets/videowidget.h index 6bdaa13a7..db530df90 100644 --- a/widgets/videowidget.h +++ b/widgets/videowidget.h @@ -53,7 +53,8 @@ class PLASMA_EXPORT VideoWidget : public QGraphicsProxyWidget Q_PROPERTY(QString currentTime READ currentTime) Q_PROPERTY(QString totalTime READ totalTime) Q_PROPERTY(QString remainingTime READ remainingTime) - Q_PROPERTY(Controls shownControls READ shownControls WRITE setShownControls) + Q_PROPERTY(Controls usedControls READ usedControls WRITE setUsedControls) + Q_PROPERTY(bool controlsVisible READ controlsVisible WRITE setControlsVisible) Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet) public: @@ -112,18 +113,31 @@ public: qint64 remainingTime() const; /** - * Set what control widgets to show + * Set what control widgets to use * - * @arg controls OR combination of Controls flags + * @arg controls bitwise OR combination of Controls flags * @see Controls */ - void setShownControls(Controls controls); + void setUsedControls(Controls controls); /** - * @return the video controls that are being show right now + * @return the video controls that are used and shown * @see Controls */ - Controls shownControls() const; + Controls usedControls() const; + + /** + * Show/hide the main controls widget, if any of them is used + * + * @arg visible if we want to show or hide the main controls + * @see setUsedControls() + */ + void setControlsVisible(bool visible); + + /** + * @return true if the controls widget is being shown right now + */ + bool controlsVisible() const; /** * Sets the stylesheet used to control the visual display of this VideoWidget