Commit f7a97201 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Qt: separate speedLabel code from interface code

Signed-off-by: Jean-Baptiste Kempf's avatarJean-Baptiste Kempf <jb@videolan.org>
parent 0ac6bc13
......@@ -39,6 +39,8 @@
#include <QPalette>
#include <QResizeEvent>
#include <QDate>
#include <QMenu>
#include <QWidgetAction>
#ifdef Q_WS_X11
# include <X11/Xlib.h>
......@@ -280,6 +282,52 @@ void VisualSelector::next()
}
#endif
SpeedLabel::SpeedLabel( intf_thread_t *_p_intf, const QString text )
: QLabel( text ), p_intf( _p_intf )
{
setToolTip( qtr( "Current playback speed.\nRight click to adjust" ) );
setContextMenuPolicy ( Qt::CustomContextMenu );
/* Create the Speed Control Widget */
speedControl = new SpeedControlWidget( p_intf );
speedControlMenu = new QMenu( this );
QWidgetAction *widgetAction = new QWidgetAction( speedControl );
widgetAction->setDefaultWidget( speedControl );
speedControlMenu->addAction( widgetAction );
/* Speed Label behaviour:
- right click gives the vertical speed slider */
CONNECT( this, customContextMenuRequested( QPoint ),
this, showSpeedMenu( QPoint ) );
/* Change the SpeedRate in the Status Bar */
CONNECT( THEMIM->getIM(), rateChanged( int ), this, setRate( int ) );
// FIXME this is wrong but will work for some time.
CONNECT( THEMIM->getIM(), statusChanged( int ),
speedControl, activateOnState() );
}
/****************************************************************************
* Small right-click menu for rate control
****************************************************************************/
void SpeedLabel::showSpeedMenu( QPoint pos )
{
speedControlMenu->exec( QCursor::pos() - pos
+ QPoint( 0, height() ) );
}
void SpeedLabel::setRate( int rate )
{
QString str;
str.setNum( ( 1000 / (double)rate ), 'f', 2 );
str.append( "x" );
setText( str );
setToolTip( str );
speedControl->updateControls( rate );
}
/**********************************************************************
* Speed control widget
**********************************************************************/
......@@ -317,14 +365,13 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) :
speedControlLayout->addWidget( speedSlider );
speedControlLayout->addWidget( normalSpeedButton );
setLayout( speedControlLayout );
}
SpeedControlWidget::~SpeedControlWidget()
{}
activateOnState();
}
void SpeedControlWidget::setEnable( bool b_enable )
void SpeedControlWidget::activateOnState()
{
speedSlider->setEnabled( b_enable );
speedSlider->setEnabled( THEMIM->getIM()->hasInput() );
}
void SpeedControlWidget::updateControls( int rate )
......
......@@ -47,6 +47,7 @@ class ResizeEvent;
class QPalette;
class QPixmap;
class QHBoxLayout;
class QMenu;
/******************** Video Widget ****************/
class VideoWidget : public QFrame
......@@ -153,16 +154,20 @@ class SpeedLabel : public QLabel
{
Q_OBJECT
public:
SpeedLabel( intf_thread_t *_p_intf, const QString text ): QLabel( text )
{ p_intf = _p_intf; }
SpeedLabel( intf_thread_t *, const QString );
protected:
virtual void mouseDoubleClickEvent ( QMouseEvent * event )
{
THEMIM->getIM()->setRate( INPUT_RATE_DEFAULT );
}
private slots:
void showSpeedMenu( QPoint );
void setRate( int );
private:
intf_thread_t *p_intf;
QMenu *speedControlMenu;
SpeedControlWidget *speedControl;
};
/******************** Speed Control Widgets ****************/
......@@ -171,14 +176,13 @@ class SpeedControlWidget : public QFrame
Q_OBJECT
public:
SpeedControlWidget( intf_thread_t *);
virtual ~SpeedControlWidget();
void updateControls( int );
private:
intf_thread_t *p_intf;
QSlider *speedSlider;
public slots:
void setEnable( bool );
void activateOnState();
private slots:
void updateRate( int );
......
......@@ -49,12 +49,12 @@
#include <QSize>
#include <QDate>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QLabel>
#include <QGroupBox>
#include <QPushButton>
#include <QWidgetAction>
#include <assert.h>
......@@ -151,8 +151,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
**************************/
/* Connect the input manager to the GUI elements it manages */
/* Change the SpeedRate in the Status Bar */
CONNECT( THEMIM->getIM(), rateChanged( int ), this, setRate( int ) );
/**
* Connects on nameChanged()
......@@ -291,14 +289,11 @@ inline void MainInterface::createStatusBar()
* Status Bar *
****************/
/* Widgets Creation*/
timeLabel = new TimeLabel( p_intf );
TimeLabel *timeLabel = new TimeLabel( p_intf );
nameLabel = new QLabel;
nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse
| Qt::TextSelectableByKeyboard );
speedLabel = new SpeedLabel( p_intf, "1.00x" );
speedLabel->setToolTip(
qtr( "Current playback speed.\nRight click to adjust" ) );
speedLabel->setContextMenuPolicy ( Qt::CustomContextMenu );
SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x" );
/* Styling those labels */
timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
......@@ -315,11 +310,6 @@ inline void MainInterface::createStatusBar()
- right-clicking and clicking just toggle between remaining and
elapsed time.*/
CONNECT( timeLabel, timeLabelDoubleClicked(), THEDP, gotoTimeDialog() );
/* Speed Label behaviour:
- right click gives the vertical speed slider */
CONNECT( speedLabel, customContextMenuRequested( QPoint ),
this, showSpeedMenu( QPoint ) );
}
inline void MainInterface::initSystray()
......@@ -383,14 +373,6 @@ void MainInterface::handleMainUi( QSettings *settings )
mainLayout->insertWidget( 0, controls, 0, Qt::AlignBottom );
mainLayout->insertWidget( 0, inputC, 0, Qt::AlignBottom );
/* Create the Speed Control Widget */
speedControl = new SpeedControlWidget( p_intf );
speedControlMenu = new QMenu( this );
QWidgetAction *widgetAction = new QWidgetAction( speedControl );
widgetAction->setDefaultWidget( speedControl );
speedControlMenu->addAction( widgetAction );
/* Visualisation */
/* Disabled for now, they SUCK */
#if 0
......@@ -589,15 +571,6 @@ void MainInterface::debug()
#endif
}
/****************************************************************************
* Small right-click menu for rate control
****************************************************************************/
void MainInterface::showSpeedMenu( QPoint pos )
{
speedControlMenu->exec( QCursor::pos() - pos
+ QPoint( 0, speedLabel->height() ) );
}
/****************************************************************************
* Video Handling
****************************************************************************/
......@@ -859,23 +832,11 @@ void MainInterface::setStatus( int status )
{
msg_Dbg( p_intf, "Updating the stream status: %i", status );
speedControl->setEnable( THEMIM->getIM()->hasInput() );
/* And in the systray for the menu */
if( sysTray )
QVLCMenu::updateSystrayMenu( this, p_intf );
}
void MainInterface::setRate( int rate )
{
QString str;
str.setNum( ( 1000 / (double)rate ), 'f', 2 );
str.append( "x" );
speedLabel->setText( str );
speedLabel->setToolTip( str );
speedControl->updateControls( rate );
}
/*****************************************************************************
* Systray Icon and Systray Menu
*****************************************************************************/
......
......@@ -139,8 +139,6 @@ private:
input_thread_t *p_input; ///< Main input associated to the playlist
/* Status Bar */
QLabel *timeLabel;
QLabel *speedLabel;
QLabel *nameLabel;
virtual void customEvent( QEvent *);
......@@ -164,7 +162,6 @@ private slots:
void debug();
void doComponentsUpdate();
void setStatus( int );
void setRate( int );
void setName( QString );
void setVLCWindowsTitle( QString title = "" );
#if 0
......@@ -173,7 +170,6 @@ private slots:
void handleSystrayClick( QSystemTrayIcon::ActivationReason );
void updateSystrayTooltipName( QString );
void updateSystrayTooltipStatus( int );
void showSpeedMenu( QPoint );
void updateRecentsMenu();
signals:
void askReleaseVideo( );
......
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