* 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"
VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i )
{
+ /* Init */
vlc_mutex_init( p_intf, &lock );
p_vout = NULL;
hide(); setMinimumSize( 16, 16 );
-
- // CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) );
+ 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() );
- setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
+ /* The core can ask through a callback to resize the video */
+ // CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) );
}
VideoWidget::~VideoWidget()
vlc_mutex_destroy( &lock );
}
-QSize VideoWidget::sizeHint() const
-{
- return widgetSize;
-}
-
/**
- * Request the video to avoid the conflicts
+ * 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 )
{
+ msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y );
emit askVideoWidgetToShow();
if( p_vout )
{
}
/* 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 )
{
- widgetSize = QSize( w, h );
- resize( w, h );
- //updateGeometry(); // Needed for deinterlace
- msg_Dbg( p_intf, "%i %i", sizeHint().height(), sizeHint().width() );
- emit askResize();
+ 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.
**********************************************************************/
#define ICON_SIZE 128
#define MAX_BG_SIZE 400
#define MIN_BG_SIZE 64
-BackgroundWidget::BackgroundWidget( intf_thread_t *_p_i ) :
- QFrame( NULL ), p_intf( _p_i )
+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::MinimumExpanding );
+// setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
/* A dark background */
setAutoFillBackground( true );
/* A cone in the middle */
label = new QLabel;
- label->setScaledContents( true );
label->setMargin( 5 );
label->setMaximumHeight( MAX_BG_SIZE );
label->setMaximumWidth( MAX_BG_SIZE );
else
label->setPixmap( QPixmap( ":/vlc128.png" ) );
- QHBoxLayout *backgroundLayout = new QHBoxLayout( this );
- backgroundLayout->addWidget( label );
+ QGridLayout *backgroundLayout = new QGridLayout( this );
+ backgroundLayout->addWidget( label, 0, 1 );
+ backgroundLayout->setColumnStretch( 0, 1 );
+ backgroundLayout->setColumnStretch( 2, 1 );
- resize( 300, 150 );
- updateGeometry();
- CONNECT( THEMIM, inputChanged( input_thread_t *), this, update( input_thread_t * ) );
+ CONNECT( THEMIM->getIM(), artChanged( QString ), this, updateArt( QString ) );
}
BackgroundWidget::~BackgroundWidget()
{
}
+void BackgroundWidget::resizeEvent( QResizeEvent * event )
+{
+ if( event->size().height() <= MIN_BG_SIZE )
+ label->hide();
+ else
+ label->show();
+}
-void BackgroundWidget::update( input_thread_t *p_input )
+void BackgroundWidget::updateArt( QString url )
{
- if( !p_input || p_input->b_dead )
+ if( url.isEmpty() )
{
if( QDate::currentDate().dayOfYear() >= 354 )
label->setPixmap( QPixmap( ":/vlc128-christmas.png" ) );
label->setPixmap( QPixmap( ":/vlc128.png" ) );
return;
}
-
-
- vlc_object_yield( p_input );
- char *psz_arturl = input_item_GetArtURL( input_GetItem(p_input) );
- vlc_object_release( p_input );
- QString url = qfu( psz_arturl );
- QString arturl = url.replace( "file://",QString("" ) );
- if( arturl.isNull() )
- {
- if( QDate::currentDate().dayOfYear() >= 354 )
- label->setPixmap( QPixmap( ":/vlc128-christmas.png" ) );
- else
- label->setPixmap( QPixmap( ":/vlc128.png" ) );
- }
else
{
- label->setPixmap( QPixmap( arturl ) );
- msg_Dbg( p_intf, "changing input b_need_update done %s", psz_arturl );
- }
- free( psz_arturl );
-}
-
-QSize BackgroundWidget::sizeHint() const
-{
- return label->size();
-}
-
-void BackgroundWidget::resizeEvent( QResizeEvent *e )
-{
- if( e->size().height() < MAX_BG_SIZE -1 )
- {
- label->setMaximumWidth( e->size().height() );
- label->setMaximumHeight( e->size().width() );
- }
- else
- {
- label->setMaximumHeight( MAX_BG_SIZE );
- label->setMaximumWidth( MAX_BG_SIZE );
+ label->setPixmap( QPixmap( url ) );
}
}
timeA = timeB = 0;
CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
this, AtoBLoop( float, int, int ) );
-
+#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
recordButton = new QPushButton( "R" );
recordButton->setMaximumSize( QSize( 26, 26 ) );
void AdvControlsWidget::enableVideo( bool enable )
{
snapshotButton->setEnabled( enable );
+#if 0
frameButton->setEnabled( enable );
+#endif
}
void AdvControlsWidget::snapshot()
/* FIXME Record function */
void AdvControlsWidget::record(){}
+#if 0
//FIXME Frame by frame function
void AdvControlsWidget::frame(){}
+#endif
/*****************************
* DA Control Widget !
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() );
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 );
controlButLayout->addWidget( nextButton );
/* Add this block to the main layout */
- controlLayout->addLayout( controlButLayout, 3, 3, 1, 3, Qt::AlignBottom );
+ controlLayout->addLayout( controlButLayout, 3, 3, 1, 3 );
BUTTON_SET_ACT_I( playButton, "", play.png, qtr( "Play" ), play() );
BUTTON_SET_ACT_I( prevButton, "" , previous.png,
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, Qt::AlignBottom );
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 */
- //resize( QSize( 300, 60 ) );
CONNECT( volumeSlider, valueChanged( int ), this, updateVolume( int ) );
- msg_Dbg( p_intf, "controls size: %i - %i", size().width(), size().height() );
+ CONNECT( THEMIM, volumeChanged( void ), this, updateVolume( void ) );
+
+ updateInput();
}
ControlsWidget::~ControlsWidget()
{}
-/*
-QSize ControlsWidget::sizeHint() const
-{
- return QSize( 300, 50 );
-}
-*/
-
void ControlsWidget::stop()
{
THEMIM->stop();
}
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;
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" ) );
+ }
}
/**
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
#define RATE_SLIDER_MINIMUM 0.3
#define RATE_SLIDER_LENGTH 100.0
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);