X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Finterface_widgets.cpp;h=4c431252bdd7d79e0c54a23821dd38b490aa1e0d;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=ba440d81ce009724a8e3dddb05f885d8c1042126;hpb=a026aadb4b88b4ba7a61be21d3b198742d52355d;p=vlc diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index ba440d81ce..4c431252bd 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -328,7 +328,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : controlLayout->addWidget( fasterButton, 0, 17 ); fasterButton->setMaximumSize( QSize( 26, 20 ) ); - /** TODO: Insert here the AdvControls Widget + /** TODO: Insert here the AdvControls Widget * Then fix all the size issues in main_interface.cpp **/ /* advanced Controls handling */ @@ -393,7 +393,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : playButton->setIconSize( QSize( 30, 30 ) ); controlLayout->addWidget( playButton, 2, 0, 2, 2, Qt::AlignBottom ); - + controlLayout->setColumnMinimumWidth( 2, 20 ); controlLayout->setColumnStretch( 2, 0 ); @@ -433,7 +433,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : controlLayout->setColumnStretch( 8 , 10 ); controlLayout->setColumnStretch( 9, 0 ); - + /* * Other first Line buttons * Might need to be inside a frame to avoid a few resizing pb @@ -457,13 +457,6 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : setupSmallButton( extSettingsButton ); controlLayout->addWidget( extSettingsButton, 3, 12 ); - /** Preferences **/ - QPushButton *prefsButton = new QPushButton( "P" ); - BUTTON_SET_ACT( prefsButton, "P", qtr( "Preferences / Settings" ), - prefs() ); - setupSmallButton( prefsButton ); - controlLayout->addWidget( prefsButton, 3, 13 ); - controlLayout->setColumnStretch( 14, 5 ); /* Volume */ @@ -475,7 +468,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : volMuteLabel->installEventFilter( h ); /** TODO: - * Change this slider to use a nice Amarok-like one + * Change this slider to use a nice Amarok-like one * Add a Context menu to change to the most useful % * **/ /** FIXME @@ -487,14 +480,13 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) : volumeSlider->setMaximumSize( QSize( 80, 200 ) ); volumeSlider->setOrientation( Qt::Horizontal ); - volumeSlider->setMaximum( 100 ); + volumeSlider->setMaximum( VOLUME_MAX ); volumeSlider->setFocusPolicy( Qt::NoFocus ); controlLayout->addWidget( volMuteLabel, 3, 15 ); controlLayout->addWidget( volumeSlider, 3, 16, 1, 2 ); /* Volume control connection */ CONNECT( volumeSlider, valueChanged( int ), this, updateVolume( int ) ); - } ControlsWidget::~ControlsWidget() { @@ -558,13 +550,12 @@ void ControlsWidget::updateVolume( int i_sliderVolume ) { if( !b_my_volume ) { - int i_res = i_sliderVolume * AOUT_VOLUME_MAX / - ( 2*volumeSlider->maximum() ); + int i_res = i_sliderVolume * (AOUT_VOLUME_MAX / 2) / VOLUME_MAX; aout_VolumeSet( p_intf, i_res ); } if( i_sliderVolume == 0 ) volMuteLabel->setPixmap( QPixmap(":/pixmaps/volume-muted.png" ) ); - else if( i_sliderVolume < volumeSlider->maximum()/2 ) + else if( i_sliderVolume < VOLUME_MAX / 2 ) volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) ); else volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) ); } @@ -574,7 +565,7 @@ void ControlsWidget::updateOnTimer() /* Audio part */ audio_volume_t i_volume; aout_VolumeGet( p_intf, &i_volume ); - i_volume = ( i_volume * 200 )/ AOUT_VOLUME_MAX ; + i_volume = ( i_volume * VOLUME_MAX )/ (AOUT_VOLUME_MAX/2) ; int i_gauge = volumeSlider->value(); b_my_volume = false; if( i_volume - i_gauge > 1 || i_gauge - i_volume > 1 ) @@ -583,7 +574,7 @@ void ControlsWidget::updateOnTimer() volumeSlider->setValue( i_volume ); b_my_volume = false; } - + /* Activate the interface buttons according to the presence of the input */ enableInput( THEMIM->getIM()->hasInput() ); //enableVideo( THEMIM->getIM()->hasVideo() ); @@ -601,7 +592,7 @@ void ControlsWidget::setStatus( int status ) /** * TODO * This functions toggle the fullscreen mode - * If there is no video, it should first activate Visualisations... + * If there is no video, it should first activate Visualisations... * This has also to be fixed in enableVideo() */ void ControlsWidget::fullscreen() @@ -618,10 +609,6 @@ void ControlsWidget::extSettings() { THEDP->extendedDialog(); } -void ControlsWidget::prefs() -{ - THEDP->prefsDialog(); -} void ControlsWidget::slower() { @@ -674,8 +661,8 @@ void ControlsWidget::toggleAdvanced() #include "components/playlist/panels.hpp" #include "components/playlist/selector.hpp" -PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) : - p_intf ( _p_intf ) +PlaylistWidget::PlaylistWidget( intf_thread_t *_p_i ) : + p_intf ( _p_i ) { /* Left Part and design */ QWidget *leftW = new QWidget( this ); @@ -747,3 +734,111 @@ QSize PlaylistWidget::sizeHint() const return widgetSize; } +/********************************************************************** + * Speed control widget + **********************************************************************/ +SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) : + QFrame( NULL ), p_intf( _p_i ) +{ + QSizePolicy sizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); + sizePolicy.setHorizontalStretch( 0 ); + sizePolicy.setVerticalStretch( 0 ); + + speedSlider = new QSlider; + speedSlider->setSizePolicy( sizePolicy ); + speedSlider->setMaximumSize( QSize( 80, 200 ) ); + speedSlider->setOrientation( Qt::Vertical ); + speedSlider->setTickPosition( QSlider::TicksRight ); + + speedSlider->setRange( -100, 100 ); + speedSlider->setSingleStep( 10 ); + speedSlider->setPageStep( 20 ); + speedSlider->setTickInterval( 20 ); + + CONNECT( speedSlider, valueChanged( int ), this, updateRate( int ) ); + + normalSpeedButton = new QPushButton( "N" ); + normalSpeedButton->setMaximumSize( QSize( 26, 20 ) ); + normalSpeedButton->setFlat( true ); + normalSpeedButton->setToolTip( qtr( "Revert to normal play speed" ) ); + + CONNECT( normalSpeedButton, clicked(), this, resetRate() ); + + QVBoxLayout *speedControlLayout = new QVBoxLayout; + speedControlLayout->addWidget(speedSlider); + speedControlLayout->addWidget(normalSpeedButton); + setLayout(speedControlLayout); +} + +SpeedControlWidget::~SpeedControlWidget() +{ +} + +#define RATE_SLIDER_MAXIMUM 3.0 +#define RATE_SLIDER_MINIMUM 0.3 +#define RATE_SLIDER_LENGTH 100.0 + +void SpeedControlWidget::updateControls( int rate ) +{ + if( speedSlider->isSliderDown() ) + { + //We don't want to change anything if the user is using the slider + return; + } + + int sliderValue; + double speed = INPUT_RATE_DEFAULT / (double)rate; + + if( rate >= INPUT_RATE_DEFAULT ) + { + if( speed < RATE_SLIDER_MINIMUM ) + { + sliderValue = speedSlider->minimum(); + } + else + { + sliderValue = (int)( ( speed - 1.0 ) * RATE_SLIDER_LENGTH + / ( 1.0 - RATE_SLIDER_MAXIMUM ) ); + } + } + else + { + if( speed > RATE_SLIDER_MAXIMUM ) + { + sliderValue = speedSlider->maximum(); + } + else + { + sliderValue = (int)( ( speed - 1.0 ) * RATE_SLIDER_LENGTH + / ( RATE_SLIDER_MAXIMUM - 1.0 ) ); + } + } + + //Block signals to avoid feedback loop + speedSlider->blockSignals( true ); + speedSlider->setValue( sliderValue ); + speedSlider->blockSignals( false ); +} + +void SpeedControlWidget::updateRate( int sliderValue ) +{ + int rate; + + if( sliderValue < 0.0 ) + { + rate = INPUT_RATE_DEFAULT* RATE_SLIDER_LENGTH / + ( sliderValue * ( 1.0 - RATE_SLIDER_MINIMUM ) + RATE_SLIDER_LENGTH ) ; + } + else + { + rate = INPUT_RATE_DEFAULT* RATE_SLIDER_LENGTH / + ( sliderValue * ( RATE_SLIDER_MAXIMUM - 1.0 ) + RATE_SLIDER_LENGTH ); + } + + THEMIM->getIM()->setRate(rate); +} + +void SpeedControlWidget::resetRate() +{ + THEMIM->getIM()->setRate(INPUT_RATE_DEFAULT); +}