Commit 7e0df1f4 authored by Jakob Leben's avatar Jakob Leben

Qt: show buffering on the background of time label

parent 34965ad0
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <QWidgetAction> #include <QWidgetAction>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QPainter> #include <QPainter>
#include <QTimer>
#ifdef Q_WS_X11 #ifdef Q_WS_X11
# include <X11/Xlib.h> # include <X11/Xlib.h>
...@@ -430,16 +431,18 @@ SpeedLabel::SpeedLabel( intf_thread_t *_p_intf, const QString& text, ...@@ -430,16 +431,18 @@ SpeedLabel::SpeedLabel( intf_thread_t *_p_intf, const QString& text,
CONNECT( THEMIM, inputChanged( input_thread_t * ), CONNECT( THEMIM, inputChanged( input_thread_t * ),
speedControl, activateOnState() ); speedControl, activateOnState() );
} }
SpeedLabel::~SpeedLabel() SpeedLabel::~SpeedLabel()
{ {
delete speedControl; delete speedControl;
delete speedControlMenu; delete speedControlMenu;
} }
/**************************************************************************** /****************************************************************************
* Small right-click menu for rate control * Small right-click menu for rate control
****************************************************************************/ ****************************************************************************/
void SpeedLabel::showSpeedMenu( QPoint pos ) void SpeedLabel::showSpeedMenu( QPoint pos )
{ {
speedControlMenu->exec( QCursor::pos() - pos speedControlMenu->exec( QCursor::pos() - pos
...@@ -477,7 +480,7 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i, QWidget *_parent ) ...@@ -477,7 +480,7 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i, QWidget *_parent )
speedSlider->setPageStep( 1 ); speedSlider->setPageStep( 1 );
speedSlider->setTickInterval( 17 ); speedSlider->setTickInterval( 17 );
CONNECT( speedSlider, valueChanged( int ), this, updateRate( int ) ); CONNECT( speedSlider, sliderMoved( int ), this, updateRate( int ) );
QToolButton *normalSpeedButton = new QToolButton( this ); QToolButton *normalSpeedButton = new QToolButton( this );
normalSpeedButton->setMaximumSize( QSize( 26, 20 ) ); normalSpeedButton->setMaximumSize( QSize( 26, 20 ) );
...@@ -521,10 +524,7 @@ void SpeedControlWidget::updateControls( int rate ) ...@@ -521,10 +524,7 @@ void SpeedControlWidget::updateControls( int rate )
sliderValue = speedSlider->maximum(); sliderValue = speedSlider->maximum();
} }
//Block signals to avoid feedback loop
speedSlider->blockSignals( true );
speedSlider->setValue( sliderValue ); speedSlider->setValue( sliderValue );
speedSlider->blockSignals( false );
} }
void SpeedControlWidget::updateRate( int sliderValue ) void SpeedControlWidget::updateRate( int sliderValue )
...@@ -588,15 +588,21 @@ void CoverArtLabel::askForUpdate() ...@@ -588,15 +588,21 @@ void CoverArtLabel::askForUpdate()
THEMIM->getIM()->requestArtUpdate(); 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; b_remainingTime = false;
setText( " --:--/--:-- " ); setText( " --:--/--:-- " );
setAlignment( Qt::AlignRight | Qt::AlignVCenter ); setAlignment( Qt::AlignRight | Qt::AlignVCenter );
setToolTip( qtr( "Toggle between elapsed and remaining time" ) ); setToolTip( qtr( "Toggle between elapsed and remaining time" ) );
bufTimer->setSingleShot( true );
CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ), CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ),
this, setDisplayPosition( 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 ) void TimeLabel::setDisplayPosition( float pos, int64_t t, int length )
...@@ -647,39 +653,38 @@ void TimeLabel::toggleTimeDisplay() ...@@ -647,39 +653,38 @@ void TimeLabel::toggleTimeDisplay()
b_remainingTime = !b_remainingTime; 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 ), void TimeLabel::updateBuffering( float _buffered )
this, showCaching( float ) );
CONNECT( THEMIM->getIM(), positionUpdated( float, int64_t, int ),
this, hideCaching() );
}
void CacheLabel::showCaching( float _cached )
{ {
cached = _cached; bufVal = _buffered;
show(); if( !buffering || bufVal == 0 )
update(); //in case we are already visible {
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 )
{ {
if( showBuffering )
{
QRect r( rect() ); QRect r( rect() );
r.setWidth( r.width() * cached ); r.setLeft( r.width() * bufVal );
QPainter p( this ); QPainter p( this );
p.setOpacity( 0.4 ); p.setOpacity( 0.4 );
p.fillRect( r, palette().color( QPalette::Highlight ) ); p.fillRect( r, palette().color( QPalette::Highlight ) );
}
QLabel::paintEvent( event ); QLabel::paintEvent( event );
} }
...@@ -141,14 +141,21 @@ private: ...@@ -141,14 +141,21 @@ private:
intf_thread_t *p_intf; intf_thread_t *p_intf;
bool b_remainingTime; bool b_remainingTime;
int cachedLength; int cachedLength;
QTimer *bufTimer;
float bufVal;
bool buffering;
bool showBuffering;
char psz_length[MSTRTIME_MAX_SIZE]; char psz_length[MSTRTIME_MAX_SIZE];
char psz_time[MSTRTIME_MAX_SIZE]; char psz_time[MSTRTIME_MAX_SIZE];
void toggleTimeDisplay(); void toggleTimeDisplay();
void paintEvent( QPaintEvent* );
signals: signals:
void timeLabelDoubleClicked(); void timeLabelDoubleClicked();
private slots: private slots:
void setDisplayPosition( float pos, int64_t time, int length ); void setDisplayPosition( float pos, int64_t time, int length );
void setDisplayPosition( float pos ); void setDisplayPosition( float pos );
void updateBuffering( float );
void updateBuffering();
}; };
class SpeedLabel : public QLabel class SpeedLabel : public QLabel
...@@ -172,20 +179,6 @@ private: ...@@ -172,20 +179,6 @@ private:
SpeedControlWidget *speedControl; 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 ****************/ /******************** Speed Control Widgets ****************/
class SpeedControlWidget : public QFrame class SpeedControlWidget : public QFrame
{ {
......
...@@ -497,18 +497,14 @@ inline void MainInterface::createStatusBar() ...@@ -497,18 +497,14 @@ inline void MainInterface::createStatusBar()
nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse
| Qt::TextSelectableByKeyboard ); | Qt::TextSelectableByKeyboard );
SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x", this ); SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x", this );
CacheLabel *cacheLabel = new CacheLabel( p_intf, this );
cacheLabel->hide();
/* Styling those labels */ /* Styling those labels */
timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
cacheLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel); nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel);
/* and adding those */ /* and adding those */
statusBarr->addWidget( nameLabel, 8 ); statusBarr->addWidget( nameLabel, 8 );
statusBarr->addPermanentWidget( cacheLabel, 0 );
statusBarr->addPermanentWidget( speedLabel, 0 ); statusBarr->addPermanentWidget( speedLabel, 0 );
statusBarr->addPermanentWidget( timeLabel, 0 ); statusBarr->addPermanentWidget( timeLabel, 0 );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment