[vlc-devel] commit: Qt: show buffering on the background of time label (Jakob Leben )
git version control
git at videolan.org
Thu Feb 18 18:19:54 CET 2010
vlc | branch: master | Jakob Leben <jleben at videolan.org> | Thu Feb 18 18:18:14 2010 +0100| [7e0df1f4df673653e16a3283b99b07d99f4f6159] | committer: Jakob Leben
Qt: show buffering on the background of time label
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7e0df1f4df673653e16a3283b99b07d99f4f6159
---
modules/gui/qt4/components/interface_widgets.cpp | 85 ++++++++++++----------
modules/gui/qt4/components/interface_widgets.hpp | 21 ++----
modules/gui/qt4/main_interface.cpp | 4 -
3 files changed, 52 insertions(+), 58 deletions(-)
diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp
index d4376f4..4f18c81 100644
--- a/modules/gui/qt4/components/interface_widgets.cpp
+++ b/modules/gui/qt4/components/interface_widgets.cpp
@@ -43,6 +43,7 @@
#include <QWidgetAction>
#include <QDesktopWidget>
#include <QPainter>
+#include <QTimer>
#ifdef Q_WS_X11
# include <X11/Xlib.h>
@@ -430,16 +431,18 @@ SpeedLabel::SpeedLabel( intf_thread_t *_p_intf, const QString& text,
CONNECT( THEMIM, inputChanged( input_thread_t * ),
speedControl, activateOnState() );
-
}
+
SpeedLabel::~SpeedLabel()
{
- delete speedControl;
- delete speedControlMenu;
+ delete speedControl;
+ delete speedControlMenu;
}
+
/****************************************************************************
* Small right-click menu for rate control
****************************************************************************/
+
void SpeedLabel::showSpeedMenu( QPoint pos )
{
speedControlMenu->exec( QCursor::pos() - pos
@@ -477,7 +480,7 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i, QWidget *_parent )
speedSlider->setPageStep( 1 );
speedSlider->setTickInterval( 17 );
- CONNECT( speedSlider, valueChanged( int ), this, updateRate( int ) );
+ CONNECT( speedSlider, sliderMoved( int ), this, updateRate( int ) );
QToolButton *normalSpeedButton = new QToolButton( this );
normalSpeedButton->setMaximumSize( QSize( 26, 20 ) );
@@ -521,10 +524,7 @@ void SpeedControlWidget::updateControls( int rate )
sliderValue = speedSlider->maximum();
}
- //Block signals to avoid feedback loop
- speedSlider->blockSignals( true );
speedSlider->setValue( sliderValue );
- speedSlider->blockSignals( false );
}
void SpeedControlWidget::updateRate( int sliderValue )
@@ -588,15 +588,21 @@ void CoverArtLabel::askForUpdate()
THEMIM->getIM()->requestArtUpdate();
}
-TimeLabel::TimeLabel( intf_thread_t *_p_intf ) :QLabel(), p_intf( _p_intf )
+TimeLabel::TimeLabel( intf_thread_t *_p_intf )
+ : QLabel(), p_intf( _p_intf ), bufTimer( new QTimer(this) ),
+ buffering( false ), showBuffering(false), bufVal( -1 )
{
- b_remainingTime = false;
- setText( " --:--/--:-- " );
- setAlignment( Qt::AlignRight | Qt::AlignVCenter );
- setToolTip( qtr( "Toggle between elapsed and remaining time" ) );
+ b_remainingTime = false;
+ setText( " --:--/--:-- " );
+ setAlignment( Qt::AlignRight | Qt::AlignVCenter );
+ setToolTip( qtr( "Toggle between elapsed and remaining time" ) );
+ bufTimer->setSingleShot( true );
- CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ),
- this, setDisplayPosition( float, int64_t, int ) );
+ CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ),
+ this, setDisplayPosition( float, int64_t, int ) );
+ CONNECT( THEMIM->getIM(), cachingChanged( float ),
+ this, updateBuffering( float ) );
+ CONNECT( bufTimer, timeout(), this, updateBuffering() );
}
void TimeLabel::setDisplayPosition( float pos, int64_t t, int length )
@@ -647,39 +653,38 @@ void TimeLabel::toggleTimeDisplay()
b_remainingTime = !b_remainingTime;
}
-CacheLabel::CacheLabel( intf_thread_t *_p_intf, QWidget *parent )
- : QLabel( parent ), p_intf( _p_intf ), cached( 0.f )
-{
- setText( qtr( "Buffering..." ) );
- setMinimumWidth( 70 );
- setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred );
- setAlignment( Qt::AlignCenter );
-
- CONNECT( THEMIM->getIM(), cachingChanged( float ),
- this, showCaching( float ) );
- CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ),
- this, hideCaching() );
-}
-void CacheLabel::showCaching( float _cached )
+void TimeLabel::updateBuffering( float _buffered )
{
- cached = _cached;
- show();
- update(); //in case we are already visible
+ bufVal = _buffered;
+ if( !buffering || bufVal == 0 )
+ {
+ showBuffering = false;
+ buffering = true;
+ bufTimer->start(200);
+ }
+ else if( bufVal == 1 )
+ {
+ showBuffering = buffering = false;
+ }
+ update();
}
-void CacheLabel::hideCaching()
+void TimeLabel::updateBuffering()
{
- hide();
+ showBuffering = true;
+ update();
}
-void CacheLabel::paintEvent( QPaintEvent* event )
+void TimeLabel::paintEvent( QPaintEvent* event )
{
- QRect r( rect() );
- r.setWidth( r.width() * cached );
- QPainter p( this );
- p.setOpacity( 0.4 );
- p.fillRect( r, palette().color( QPalette::Highlight ) );
-
+ if( showBuffering )
+ {
+ QRect r( rect() );
+ r.setLeft( r.width() * bufVal );
+ QPainter p( this );
+ p.setOpacity( 0.4 );
+ p.fillRect( r, palette().color( QPalette::Highlight ) );
+ }
QLabel::paintEvent( event );
}
diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp
index 17fdfd8..bda4143 100644
--- a/modules/gui/qt4/components/interface_widgets.hpp
+++ b/modules/gui/qt4/components/interface_widgets.hpp
@@ -141,14 +141,21 @@ private:
intf_thread_t *p_intf;
bool b_remainingTime;
int cachedLength;
+ QTimer *bufTimer;
+ float bufVal;
+ bool buffering;
+ bool showBuffering;
char psz_length[MSTRTIME_MAX_SIZE];
char psz_time[MSTRTIME_MAX_SIZE];
void toggleTimeDisplay();
+ void paintEvent( QPaintEvent* );
signals:
void timeLabelDoubleClicked();
private slots:
void setDisplayPosition( float pos, int64_t time, int length );
void setDisplayPosition( float pos );
+ void updateBuffering( float );
+ void updateBuffering();
};
class SpeedLabel : public QLabel
@@ -172,20 +179,6 @@ private:
SpeedControlWidget *speedControl;
};
-class CacheLabel : public QLabel
-{
- Q_OBJECT
-public:
- CacheLabel( intf_thread_t *, QWidget * );
-private slots:
- void showCaching( float );
- void hideCaching();
-private:
- void paintEvent( QPaintEvent* );
- intf_thread_t *p_intf;
- float cached;
-};
-
/******************** Speed Control Widgets ****************/
class SpeedControlWidget : public QFrame
{
diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index c63b752..03fc382 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -497,18 +497,14 @@ inline void MainInterface::createStatusBar()
nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse
| Qt::TextSelectableByKeyboard );
SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x", this );
- CacheLabel *cacheLabel = new CacheLabel( p_intf, this );
- cacheLabel->hide();
/* Styling those labels */
timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
- cacheLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel);
/* and adding those */
statusBarr->addWidget( nameLabel, 8 );
- statusBarr->addPermanentWidget( cacheLabel, 0 );
statusBarr->addPermanentWidget( speedLabel, 0 );
statusBarr->addPermanentWidget( timeLabel, 0 );
More information about the vlc-devel
mailing list