X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Finterface_widgets.cpp;h=1c8fbd09c5025d5ccaa5907445337efbc75dc577;hb=45505b07d5dbe7542f85f14b9f211fc86683778e;hp=239cc4e0e99560e6d29902c1615604a6555090df;hpb=ec79b5c8d0014ecc0f27fd25436eb6639ef556dd;p=vlc diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 239cc4e0e9..1c8fbd09c5 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -7,6 +7,7 @@ * Authors: Clément Stenac * Jean-Baptiste Kempf * Rafaël Carré + * Ilkka Ollakka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +23,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include "dialogs_provider.hpp" #include "components/interface_widgets.hpp" @@ -36,13 +40,12 @@ #include #include #include +#include #include #include #include #include - -#define ICON_SIZE 128 -#define MAX_BG_SIZE 300 +#include /********************************************************************** * Video Widget. A simple frame on which video is drawn @@ -55,11 +58,23 @@ static int DoControl( intf_thread_t *, void *, int, va_list ); VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i ) { + /* Init */ vlc_mutex_init( p_intf, &lock ); p_vout = NULL; - CONNECT( this, askResize(), this, SetMinSize() ); - CONNECT( this, askVideoToShow(), this, show() ); - setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); + hide(); setMinimumSize( 16, 16 ); + videoSize.rwidth() = -1; + videoSize.rheight() = -1; + + /* Black background is more coherent for a Video Widget IMVHO */ + QPalette plt = palette(); + plt.setColor( QPalette::Active, QPalette::Window , Qt::black ); + plt.setColor( QPalette::Inactive, QPalette::Window , Qt::black ); + setPalette( plt ); + + /* The core can ask through a callback to show the video */ + CONNECT( this, askVideoWidgetToShow(), this, show() ); + /* The core can ask through a callback to resize the video */ + // CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) ); } VideoWidget::~VideoWidget() @@ -82,94 +97,129 @@ VideoWidget::~VideoWidget() vlc_mutex_destroy( &lock ); } -QSize VideoWidget::sizeHint() const -{ - return widgetSize; -} - +/** + * Request the video to avoid the conflicts + **/ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y, unsigned int *pi_width, unsigned int *pi_height ) { - emit askVideoToShow(); + msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y ); + emit askVideoWidgetToShow(); if( p_vout ) { msg_Dbg( p_intf, "embedded video already in use" ); return NULL; } p_vout = p_nvout; - emit askResize(); return ( void* )winId(); } -void VideoWidget::SetMinSize() +/* Set the Widget to the correct Size */ +/* Function has to be called by the parent + Parent has to care about resizing himself*/ +void VideoWidget::SetSizing( unsigned int w, unsigned int h ) { - setMinimumSize( 16, 16 ); + msg_Dbg( p_intf, "Video is resizing to: %i %i", w, h ); + videoSize.rwidth() = w; + videoSize.rheight() = h; + updateGeometry(); // Needed for deinterlace } void VideoWidget::release( void *p_win ) { + msg_Dbg( p_intf, "Video is non needed anymore" ); p_vout = NULL; + videoSize.rwidth() = 0; + videoSize.rheight() = 0; + hide(); + updateGeometry(); // Needed for deinterlace } + +QSize VideoWidget::sizeHint() const +{ + return videoSize; +} + /********************************************************************** * Background Widget. Show a simple image background. Currently, - * it's a static cone. + * it's album art if present or cone. **********************************************************************/ -BackgroundWidget::BackgroundWidget( intf_thread_t *_p_i ) : - QFrame( NULL ), p_intf( _p_i ) +#define ICON_SIZE 128 +#define MAX_BG_SIZE 400 +#define MIN_BG_SIZE 64 + +BackgroundWidget::BackgroundWidget( intf_thread_t *_p_i ) + :QWidget( NULL ), p_intf( _p_i ) { + /* We should use that one to take the more size it can */ +// setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); + /* A dark background */ setAutoFillBackground( true ); plt = palette(); plt.setColor( QPalette::Active, QPalette::Window , Qt::black ); plt.setColor( QPalette::Inactive, QPalette::Window , Qt::black ); setPalette( plt ); + /* A cone in the middle */ label = new QLabel; - label->setMaximumHeight( ICON_SIZE ); - label->setMaximumWidth( ICON_SIZE ); - label->setScaledContents( true ); - label->setPixmap( QPixmap( ":/vlc128.png" ) ); - backgroundLayout = new QHBoxLayout; - backgroundLayout->addWidget( label ); - setLayout( backgroundLayout ); + label->setMargin( 5 ); + label->setMaximumHeight( MAX_BG_SIZE ); + label->setMaximumWidth( MAX_BG_SIZE ); + label->setMinimumHeight( MIN_BG_SIZE ); + label->setMinimumWidth( MIN_BG_SIZE ); + if( QDate::currentDate().dayOfYear() >= 354 ) + label->setPixmap( QPixmap( ":/vlc128-christmas.png" ) ); + else + label->setPixmap( QPixmap( ":/vlc128.png" ) ); + + QGridLayout *backgroundLayout = new QGridLayout( this ); + backgroundLayout->addWidget( label, 0, 1 ); + backgroundLayout->setColumnStretch( 0, 1 ); + backgroundLayout->setColumnStretch( 2, 1 ); + + CONNECT( THEMIM->getIM(), artChanged( QString ), this, updateArt( QString ) ); } BackgroundWidget::~BackgroundWidget() { - backgroundLayout->takeAt( 0 ); - delete backgroundLayout; } -void BackgroundWidget::setArt( QString url ) +void BackgroundWidget::resizeEvent( QResizeEvent * event ) { - if( url.isNull() ) - label->setPixmap( QPixmap( ":/vlc128.png" ) ); + if( event->size().height() <= MIN_BG_SIZE ) + label->hide(); else - label->setPixmap( QPixmap( url ) ); -} - -QSize BackgroundWidget::sizeHint() const -{ - return widgetSize; + label->show(); } -void BackgroundWidget::resizeEvent( QResizeEvent *e ) +void BackgroundWidget::updateArt( QString url ) { - if( e->size().height() < ICON_SIZE -1 ) - label->setMaximumWidth( e->size().height() ); + if( url.isEmpty() ) + { + if( QDate::currentDate().dayOfYear() >= 354 ) + label->setPixmap( QPixmap( ":/vlc128-christmas.png" ) ); + else + label->setPixmap( QPixmap( ":/vlc128.png" ) ); + return; + } else - label->setMaximumWidth( ICON_SIZE ); + { + label->setPixmap( QPixmap( url ) ); + msg_Dbg( p_intf, "changing input b_need_update done "); + } } void BackgroundWidget::contextMenuEvent( QContextMenuEvent *event ) { QVLCMenu::PopupMenu( p_intf, true ); } + /********************************************************************** * Visualization selector panel **********************************************************************/ VisualSelector::VisualSelector( intf_thread_t *_p_i ) : - QFrame( NULL ), p_intf( _p_i ) + QFrame( NULL ), p_intf( _p_i ) { QHBoxLayout *layout = new QHBoxLayout( this ); layout->setMargin( 0 ); @@ -232,25 +282,23 @@ AdvControlsWidget::AdvControlsWidget( intf_thread_t *_p_i ) : advLayout->setMargin( 0 ); advLayout->setSpacing( 0 ); -/* FIXME A to B function */ + /* A to B Button */ ABButton = new QPushButton( "AB" ); ABButton->setMaximumSize( QSize( 26, 26 ) ); ABButton->setIconSize( QSize( 20, 20 ) ); advLayout->addWidget( ABButton ); BUTTON_SET_ACT( ABButton, "AB", qtr( "A to B" ), fromAtoB() ); - timeA = 0; - timeB = 0; + timeA = timeB = 0; CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ), this, AtoBLoop( float, int, int ) ); - -//FIXME Frame by frame function +#if 0 frameButton = new QPushButton( "Fr" ); frameButton->setMaximumSize( QSize( 26, 26 ) ); frameButton->setIconSize( QSize( 20, 20 ) ); advLayout->addWidget( frameButton ); BUTTON_SET_ACT( frameButton, "Fr", qtr( "Frame by Frame" ), frame() ); +#endif -/* FIXME Record function */ recordButton = new QPushButton( "R" ); recordButton->setMaximumSize( QSize( 26, 26 ) ); recordButton->setIconSize( QSize( 20, 20 ) ); @@ -258,39 +306,39 @@ AdvControlsWidget::AdvControlsWidget( intf_thread_t *_p_i ) : BUTTON_SET_ACT_I( recordButton, "", record_16px.png, qtr( "Record" ), record() ); + /* Snapshot Button */ snapshotButton = new QPushButton( "S" ); snapshotButton->setMaximumSize( QSize( 26, 26 ) ); snapshotButton->setIconSize( QSize( 20, 20 ) ); advLayout->addWidget( snapshotButton ); BUTTON_SET_ACT( snapshotButton, "S", qtr( "Take a snapshot" ), snapshot() ); - } AdvControlsWidget::~AdvControlsWidget() -{ -} +{} void AdvControlsWidget::enableInput( bool enable ) { ABButton->setEnabled( enable ); recordButton->setEnabled( enable ); } + void AdvControlsWidget::enableVideo( bool enable ) { snapshotButton->setEnabled( enable ); +#if 0 frameButton->setEnabled( enable ); +#endif } void AdvControlsWidget::snapshot() { - vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); + vout_thread_t *p_vout = + (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout ) vout_Control( p_vout, VOUT_SNAPSHOT ); } -void AdvControlsWidget::frame() -{ -} - +/* Function called when the button is clicked() */ void AdvControlsWidget::fromAtoB() { if( !timeA ) @@ -311,8 +359,7 @@ void AdvControlsWidget::fromAtoB() ABButton->setText( "AB" ); } -void AdvControlsWidget::record(){} - +/* Function called regularly when in an AtoB loop */ void AdvControlsWidget::AtoBLoop( float f_pos, int i_time, int i_length ) { if( timeB ) @@ -322,38 +369,53 @@ void AdvControlsWidget::AtoBLoop( float f_pos, int i_time, int i_length ) } } +/* FIXME Record function */ +void AdvControlsWidget::record(){} + +#if 0 +//FIXME Frame by frame function +void AdvControlsWidget::frame(){} +#endif + /***************************** * DA Control Widget ! *****************************/ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, + MainInterface *_p_mi, bool b_advControls, bool b_shiny ) : - QFrame( NULL ), p_intf( _p_i ) + QFrame( NULL ), p_intf( _p_i ) { controlLayout = new QGridLayout( this ); controlLayout->setSpacing( 0 ); - setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); +#if QT43 + controlLayout->setContentsMargins( 9, 6, 9, 6 ); +#else + controlLayout->setMargin( 6 ); +#endif + + setSizePolicy( QSizePolicy::Preferred , QSizePolicy::Maximum ); /** The main Slider **/ slider = new InputSlider( Qt::Horizontal, NULL ); controlLayout->addWidget( slider, 0, 1, 1, 16 ); /* Update the position when the IM has changed */ CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ), - slider, setPosition( float,int, int ) ); + slider, setPosition( float, int, int ) ); /* And update the IM, when the position has changed */ CONNECT( slider, sliderDragged( float ), THEMIM->getIM(), sliderUpdate( float ) ); /** Slower and faster Buttons **/ - slowerButton = new QPushButton; - slowerButton->setFlat( true ); + slowerButton = new QToolButton; + slowerButton->setAutoRaise( true ); slowerButton->setMaximumSize( QSize( 26, 20 ) ); BUTTON_SET_ACT( slowerButton, "-", qtr( "Slower" ), slower() ); controlLayout->addWidget( slowerButton, 0, 0 ); - fasterButton = new QPushButton; - fasterButton->setFlat( true ); + fasterButton = new QToolButton; + fasterButton->setAutoRaise( true ); fasterButton->setMaximumSize( QSize( 26, 20 ) ); BUTTON_SET_ACT( fasterButton, "+", qtr( "Faster" ), faster() ); @@ -367,7 +429,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, if( !b_advancedVisible ) advControls->hide(); /** Disc and Menus handling */ - discFrame = new QFrame( this ); + discFrame = new QWidget( this ); QHBoxLayout *discLayout = new QHBoxLayout( discFrame ); discLayout->setSpacing( 0 ); @@ -403,11 +465,47 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, sectionNext() ); CONNECT( menuButton, clicked(), THEMIM->getIM(), sectionMenu() ); - - /** TODO + /** * Telextext QFrame - * Merge with upper menu in a StackLayout + * TODO: Merge with upper menu in a StackLayout **/ +#ifdef ZVBI_COMPILED + telexFrame = new QWidget( this ); + QHBoxLayout *telexLayout = new QHBoxLayout( telexFrame ); + telexLayout->setSpacing( 0 ); + telexLayout->setMargin( 0 ); + + QToolButton *telexOn = new QToolButton; + telexOn->setText( qtr( "On" ) ); + setupSmallButton( telexOn ); + telexLayout->addWidget( telexOn ); + + QToolButton *telexTransparent = new QToolButton; + telexTransparent->setText( qtr( "Transparent" ) ); + setupSmallButton( telexTransparent ); + telexLayout->addWidget( telexTransparent ); + + QSpinBox *telexPage = new QSpinBox; + telexPage->setRange( 0, 999 ); + telexPage->setValue( 100 ); + telexPage->setAccelerated( true ); + telexPage->setWrapping( true ); + telexPage->setAlignment( Qt::AlignRight ); + telexPage->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); + telexLayout->addWidget( telexPage ); + + controlLayout->addWidget( telexFrame, 1, 10, 2, 3, Qt::AlignBottom ); + telexFrame->hide(); + + CONNECT( telexPage, valueChanged( int ), THEMIM->getIM(), + telexGotoPage( int ) ); + CONNECT( telexOn, clicked( bool ), THEMIM->getIM(), + telexToggle( bool ) ); + CONNECT( telexTransparent, clicked( bool ), + THEMIM->getIM(), telexSetTransparency( bool ) ); + CONNECT( THEMIM->getIM(), teletextEnabled( bool ), + telexFrame, setVisible( bool ) ); +#endif /** Play Buttons **/ QSizePolicy sizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); @@ -417,8 +515,8 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, /* Play */ playButton = new QPushButton; playButton->setSizePolicy( sizePolicy ); - playButton->setMaximumSize( QSize( 38, 38 ) ); - playButton->setMinimumSize( QSize( 45, 45 ) ); + playButton->setMaximumSize( QSize( 36, 36 ) ); + playButton->setMinimumSize( QSize( 36, 36 ) ); playButton->setIconSize( QSize( 30, 30 ) ); controlLayout->addWidget( playButton, 2, 0, 2, 2 ); @@ -460,42 +558,46 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, BUTTON_SET_ACT_I( nextButton, "", next.png, qtr( "Next" ), next() ); BUTTON_SET_ACT_I( stopButton, "", stop.png, qtr( "Stop" ), stop() ); - controlLayout->setColumnStretch( 7 , 2 ); + controlLayout->setColumnMinimumWidth( 7, 20 ); + controlLayout->setColumnStretch( 7, 0 ); + controlLayout->setColumnStretch( 8, 0 ); + controlLayout->setColumnStretch( 9, 0 ); /* * Other first Line buttons - * Might need to be inside a frame to avoid a few resizing pb - * FIXME */ /** Fullscreen/Visualisation **/ fullscreenButton = new QPushButton( "F" ); BUTTON_SET_ACT( fullscreenButton, "F", qtr( "Fullscreen" ), fullscreen() ); setupSmallButton( fullscreenButton ); - controlLayout->addWidget( fullscreenButton, 3, 10 ); + controlLayout->addWidget( fullscreenButton, 3, 10, Qt::AlignBottom ); /** Playlist Button **/ playlistButton = new QPushButton; setupSmallButton( playlistButton ); - controlLayout->addWidget( playlistButton, 3, 11 ); + controlLayout->addWidget( playlistButton, 3, 11, Qt::AlignBottom ); BUTTON_SET_IMG( playlistButton, "" , playlist.png, qtr( "Show playlist" ) ); + CONNECT( playlistButton, clicked(), _p_mi, togglePlaylist() ); /** extended Settings **/ QPushButton *extSettingsButton = new QPushButton( "F" ); BUTTON_SET_ACT( extSettingsButton, "Ex", qtr( "Extended Settings" ), extSettings() ); setupSmallButton( extSettingsButton ); - controlLayout->addWidget( extSettingsButton, 3, 12 ); + controlLayout->addWidget( extSettingsButton, 3, 12, Qt::AlignBottom ); + controlLayout->setColumnStretch( 13, 0 ); + controlLayout->setColumnMinimumWidth( 13, 24 ); controlLayout->setColumnStretch( 14, 5 ); /* Volume */ VolumeClickHandler *hVolLabel = new VolumeClickHandler( p_intf, this ); volMuteLabel = new QLabel; - volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) ); + volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-medium.png" ) ); volMuteLabel->setToolTip( qtr( "Mute" ) ); volMuteLabel->installEventFilter( hVolLabel ); - controlLayout->addWidget( volMuteLabel, 3, 15 ); + controlLayout->addWidget( volMuteLabel, 3, 15, Qt::AlignBottom ); if( b_shiny ) { @@ -509,21 +611,27 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, volumeSlider->setOrientation( Qt::Horizontal ); } volumeSlider->setMaximumSize( QSize( 200, 40 ) ); - volumeSlider->setMinimumSize( QSize( 80, 20 ) ); + volumeSlider->setMinimumSize( QSize( 106, 30 ) ); volumeSlider->setFocusPolicy( Qt::NoFocus ); - controlLayout->addWidget( volumeSlider, 3, 16, 1, 2 ); + controlLayout->addWidget( volumeSlider, 2, 16, 2 , 2, Qt::AlignBottom ); /* Set the volume from the config */ volumeSlider->setValue( ( config_GetInt( p_intf, "volume" ) ) * VOLUME_MAX / (AOUT_VOLUME_MAX/2) ); + /* Force the update at build time in order to have a muted icon if needed */ + updateVolume( volumeSlider->value() ); + /* Volume control connection */ CONNECT( volumeSlider, valueChanged( int ), this, updateVolume( int ) ); - msg_Dbg( p_intf, "size: %i - %i", size().height(), size().width() ); + CONNECT( THEMIM, volumeChanged( void ), this, updateVolume( void ) ); + + updateInput(); } + ControlsWidget::~ControlsWidget() -{ -} +{} + void ControlsWidget::stop() { THEMIM->stop(); @@ -586,17 +694,19 @@ void ControlsWidget::updateVolume( int i_sliderVolume ) } if( i_sliderVolume == 0 ) volMuteLabel->setPixmap( QPixmap(":/pixmaps/volume-muted.png" ) ); - else if( i_sliderVolume < VOLUME_MAX / 2 ) + else if( i_sliderVolume < VOLUME_MAX / 3 ) volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) ); - else volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) ); + else if( i_sliderVolume > (VOLUME_MAX * 2 / 3 ) ) + volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) ); + else volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-medium.png" ) ); } -void ControlsWidget::updateOnTimer() +void ControlsWidget::updateVolume() { /* Audio part */ audio_volume_t i_volume; aout_VolumeGet( p_intf, &i_volume ); - i_volume = ( i_volume * VOLUME_MAX )/ (AOUT_VOLUME_MAX/2) ; + 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 ) @@ -605,19 +715,27 @@ void ControlsWidget::updateOnTimer() volumeSlider->setValue( i_volume ); b_my_volume = false; } +} +void ControlsWidget::updateInput() +{ /* Activate the interface buttons according to the presence of the input */ enableInput( THEMIM->getIM()->hasInput() ); - //enableVideo( THEMIM->getIM()->hasVideo() ); - enableVideo( true ); + enableVideo( THEMIM->getIM()->hasVideo() && THEMIM->getIM()->hasInput() ); } void ControlsWidget::setStatus( int status ) { - if( status == PLAYING_S ) // Playing + if( status == PLAYING_S ) /* Playing */ + { playButton->setIcon( QIcon( ":/pixmaps/pause.png" ) ); + playButton->setToolTip( qtr( "Pause" ) ); + } else + { playButton->setIcon( QIcon( ":/pixmaps/play.png" ) ); + playButton->setToolTip( qtr( "Play" ) ); + } } /** @@ -628,7 +746,8 @@ void ControlsWidget::setStatus( int status ) */ void ControlsWidget::fullscreen() { - vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); + vout_thread_t *p_vout = + (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout) { var_SetBool( p_vout, "fullscreen", !var_GetBool( p_vout, "fullscreen" ) ); @@ -682,85 +801,9 @@ void ControlsWidget::toggleAdvanced() advControls->hide(); b_advancedVisible = false; } - //FIXME connect this one :D - emit advancedControlsToggled( b_advancedVisible ); // doComponentsUpdate(); -} - -/********************************************************************** - * Playlist Widget. The embedded playlist - **********************************************************************/ -#include "components/playlist/panels.hpp" -#include "components/playlist/selector.hpp" - -PlaylistWidget::PlaylistWidget( intf_thread_t *_p_i ) : - p_intf ( _p_i ) -{ - /* Left Part and design */ - QWidget *leftW = new QWidget( this ); - QVBoxLayout *left = new QVBoxLayout( leftW ); - - /* Source Selector */ - selector = new PLSelector( this, p_intf, THEPL ); - left->addWidget( selector ); - - /* Art label */ - art = new QLabel( "" ); - art->setMinimumHeight( 128 ); - art->setMinimumWidth( 128 ); - art->setMaximumHeight( 128 ); - art->setMaximumWidth( 128 ); - art->setScaledContents( true ); - art->setPixmap( QPixmap( ":/noart.png" ) ); - left->addWidget( art ); - - /* Initialisation of the playlist */ - playlist_item_t *p_root = playlist_GetPreferredNode( THEPL, - THEPL->p_local_category ); - - rightPanel = qobject_cast( new StandardPLPanel( this, - p_intf, THEPL, p_root ) ); - - /* Connects */ - CONNECT( selector, activated( int ), rightPanel, setRoot( int ) ); - - CONNECT( qobject_cast( rightPanel )->model, - artSet( QString ) , this, setArt( QString ) ); - /* Forward removal requests from the selector to the main panel */ - CONNECT( qobject_cast( selector )->model, - shouldRemove( int ), - qobject_cast( rightPanel ), removeItem( int ) ); - - connect( selector, SIGNAL( activated( int ) ), - this, SIGNAL( rootChanged( int ) ) ); - emit rootChanged( p_root->i_id ); - - /* Add the two sides of the QSplitter */ - addWidget( leftW ); - addWidget( rightPanel ); - - leftW->setMaximumWidth( 250 ); - setCollapsible( 1, false ); - - QList sizeList; - sizeList << 180 << 520 ; - setSizes( sizeList ); -} - -void PlaylistWidget::setArt( QString url ) -{ - if( url.isNull() ) - art->setPixmap( QPixmap( ":/noart.png" ) ); - else if( prevArt != url ) - { - art->setPixmap( QPixmap( url ) ); - prevArt = url; - emit artSet( url ); - } + emit advancedControlsToggled( b_advancedVisible ); } -PlaylistWidget::~PlaylistWidget() -{ -} /********************************************************************** * Speed control widget @@ -785,21 +828,26 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) : CONNECT( speedSlider, valueChanged( int ), this, updateRate( int ) ); - normalSpeedButton = new QPushButton( "N" ); + QToolButton *normalSpeedButton = new QToolButton( this ); normalSpeedButton->setMaximumSize( QSize( 26, 20 ) ); - normalSpeedButton->setFlat( true ); + normalSpeedButton->setAutoRaise( true ); + normalSpeedButton->setText( "N" ); 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); + speedControlLayout->addWidget( speedSlider ); + speedControlLayout->addWidget( normalSpeedButton ); + setLayout( speedControlLayout ); } SpeedControlWidget::~SpeedControlWidget() +{} + +void SpeedControlWidget::setEnable( bool b_enable ) { + speedSlider->setEnabled( b_enable ); } #define RATE_SLIDER_MAXIMUM 3.0 @@ -854,13 +902,13 @@ void SpeedControlWidget::updateRate( int sliderValue ) if( sliderValue < 0.0 ) { - rate = INPUT_RATE_DEFAULT* RATE_SLIDER_LENGTH / - ( sliderValue * ( 1.0 - RATE_SLIDER_MINIMUM ) + RATE_SLIDER_LENGTH ) ; + rate = (int)(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 ); + rate = (int)(INPUT_RATE_DEFAULT* RATE_SLIDER_LENGTH / + ( sliderValue * ( RATE_SLIDER_MAXIMUM - 1.0 ) + RATE_SLIDER_LENGTH )); } THEMIM->getIM()->setRate(rate); @@ -870,5 +918,3 @@ void SpeedControlWidget::resetRate() { THEMIM->getIM()->setRate(INPUT_RATE_DEFAULT); } - -