diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp
index 2e5e81c307b06b2a6ab919281be414da239ffedc..5815ebffedac18dd8cb4cf93153f60e425633194 100644
--- a/modules/gui/qt4/components/interface_widgets.cpp
+++ b/modules/gui/qt4/components/interface_widgets.cpp
@@ -150,12 +150,13 @@ VisualSelector::VisualSelector( intf_thread_t *_p_i ) :
{
setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
QHBoxLayout *layout = new QHBoxLayout( this );
+ layout->setMargin( 0 );
QPushButton *prevButton = new QPushButton( "Prev" );
QPushButton *nextButton = new QPushButton( "Next");
layout->addWidget( prevButton );
layout->addWidget( nextButton );
setLayout( layout );
- setMaximumHeight( 30 );
+ setMaximumHeight( 35 );
}
VisualSelector::~VisualSelector()
diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp
index 60ef8175ad652e9cc920a6a98734f7ca4210f5bd..0f9427bf288c232608dce8a102c7d8add4923f18 100644
--- a/modules/gui/qt4/input_manager.hpp
+++ b/modules/gui/qt4/input_manager.hpp
@@ -35,6 +35,8 @@ public:
virtual ~InputManager();
void delInput();
+ bool hasAudio() { return b_has_audio; }
+ bool hasVideo() { return b_has_video; }
bool b_has_audio, b_has_video, b_had_audio, b_had_video;
private:
intf_thread_t *p_intf;
diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index 33888fae5bb6cac530b9a550e6b30b0439ef43ab..e3ff231d2b67292169be46ab8717461ed8cdd936 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -51,6 +51,14 @@
ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) ); \
ui.button##Button->setToolTip( tooltip );
+#define VISIBLE(i) (i && i->isVisible())
+
+#define SET_WIDTH(i,j) i->widgetSize.setWidth(j)
+#define SET_HEIGHT(i,j) i->widgetSize.setHeight(j)
+#define SET_WH( i,j,k) i->widgetSize.setWidth(j); i->widgetSize.setHeight(k);
+
+#define DS(i) i.width(),i.height()
+
static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
vlc_value_t, void *);
/* Video handling */
@@ -110,13 +118,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
CONNECT( slider, sliderDragged( float ),
THEMIM->getIM(), sliderUpdate( float ) );
- /* Actions */
- BUTTONACT( ui.playButton, play() );
- BUTTONACT( ui.stopButton, stop() );
- BUTTONACT( ui.nextButton, next() );
- BUTTONACT( ui.prevButton, prev() );
- BUTTONACT( ui.playlistButton, playlist() );
-
var_Create( p_intf, "interaction", VLC_VAR_ADDRESS );
var_AddCallback( p_intf, "interaction", InteractCallback, this );
p_intf->b_interaction = VLC_TRUE;
@@ -143,28 +144,23 @@ void MainInterface::handleMainUi( QSettings *settings )
ui.hboxLayout->insertWidget( 0, slider );
BUTTON_SET( prev, previous.png, qtr( "Previous" ) );
+ BUTTONACT( ui.prevButton, prev() );
BUTTON_SET( next, next.png , qtr( "Next" ) );
+ BUTTONACT( ui.nextButton, next() );
BUTTON_SET( play, play.png , qtr( "Play" ) );
+ BUTTONACT( ui.playButton, play() );
BUTTON_SET( stop, stop.png , qtr( "Stop" ) );
- ui.discFrame->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ BUTTONACT( ui.stopButton, stop() );
-#define SET( button, image ) ui.button##Button->setText(""); \
- ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) );
- SET( prev, previous.png );
- SET( next, next.png );
- SET( play, play.png );
- SET( stop, stop.png );
- SET( playlist, volume-low.png );
-#undef SET
+ BUTTON_SET( visual, stop.png, qtr( "Audio visualizations" ) );
+ BUTTONACT( ui.visualButton, visual() );
/* Volume */
- ui.volLowLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
- ui.volHighLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) );
+ ui.volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
ui.volumeSlider->setMaximum( 100 );
-
- VolumeClickHandler *h = new VolumeClickHandler( this );
- ui.volLowLabel->installEventFilter(h);
- ui.volHighLabel->installEventFilter(h);
+ ui.volMuteLabel->setToolTip( qtr( "Mute" ) );
+ VolumeClickHandler *h = new VolumeClickHandler( p_intf, this );
+ ui.volMuteLabel->installEventFilter(h);
ui.volumeSlider->setFocusPolicy( Qt::NoFocus );
/* Fetch configuration from settings and vlc config */
@@ -172,16 +168,37 @@ void MainInterface::handleMainUi( QSettings *settings )
if( config_GetInt( p_intf, "embedded-video" ) )
videoEmbeddedFlag = true;
+ alwaysVideoFlag = false;
+ if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" ))
+ alwaysVideoFlag = true;
+
playlistEmbeddedFlag = true;
/// \todo fetch playlist settings
+
BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ?
qtr( "Show playlist" ) :
qtr( "Open playlist" ) );
+ BUTTONACT( ui.playlistButton, playlist() );
/* Set initial size */
resize ( PREF_W, PREF_H );
addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
+
+ visualSelector = new VisualSelector( p_intf );
+ ui.vboxLayout->insertWidget( 0, visualSelector );
+ visualSelector->hide();
+
+ if( alwaysVideoFlag )
+ {
+ bgWidget = new BackgroundWidget( p_intf );
+ bgWidget->widgetSize = settings->value( "backgroundSize",
+ QSize( 200, 200 ) ).toSize();
+ bgWidget->resize( bgWidget->widgetSize );
+ bgWidget->updateGeometry();
+ ui.vboxLayout->insertWidget( 0, bgWidget );
+ }
+
if( videoEmbeddedFlag )
{
videoWidget = new VideoWidget( p_intf );
@@ -192,22 +209,10 @@ void MainInterface::handleMainUi( QSettings *settings )
p_intf->pf_request_window = ::DoRequest;
p_intf->pf_release_window = ::DoRelease;
p_intf->pf_control_window = ::DoControl;
-
- if( config_GetInt( p_intf, "qt-always-video" ))
- {
- bgWidget = new BackgroundWidget( p_intf );
- bgWidget->widgetSize = settings->value( "backgroundSize",
- QSize( 200, 200 ) ).toSize();
- ui.vboxLayout->insertWidget( 0, bgWidget );
- }
}
-// visualSelector = new VisualSelector( p_intf );
-// visualSelector->hide();
calculateInterfaceSize();
- fprintf( stderr, "Resize to %ix%i\n", mainSize.width(), mainSize.height() );
resize( mainSize );
- mainSize = size();
setMinimumSize( PREF_W, addSize.height() );
}
@@ -218,14 +223,13 @@ void MainInterface::handleMainUi( QSettings *settings )
void MainInterface::calculateInterfaceSize()
{
int width = 0, height = 0;
- fprintf( stderr, "Calculating size\n" );
- if( bgWidget && bgWidget->isVisible() )
+ if( VISIBLE( bgWidget ) )
{
width = bgWidget->widgetSize.width();
height = bgWidget->widgetSize.height();
assert( !(playlistWidget && playlistWidget->isVisible() ) );
}
- else if( playlistWidget && playlistWidget->isVisible() )
+ else if( VISIBLE( playlistWidget ) )
{
width = playlistWidget->widgetSize.width();
height = playlistWidget->widgetSize.height();
@@ -235,55 +239,40 @@ void MainInterface::calculateInterfaceSize()
{
width = videoWidget->widgetSize.width() ;
height = videoWidget->widgetSize.height();
- fprintf( stderr, "Video Size %ix%i\n", videoWidget->widgetSize.width(), videoWidget->widgetSize.height() );
+ fprintf( stderr, "Video Size %ix%i\n", DS( videoWidget->widgetSize ) );
}
else
{
width = PREF_W - addSize.width();
height = PREF_H - addSize.height();
}
- fprintf( stderr, "Setting to %ix%i\n", width + addSize.width() , height + addSize.height() );
- mainSize.setWidth( width + addSize.width() );
- mainSize.setHeight( height + addSize.height() );
+ if( VISIBLE( visualSelector ) )
+ height += visualSelector->height();
+
+ fprintf( stderr, "Setting to %ix%i\n",
+ width + addSize.width() , height + addSize.height() );
+
+ mainSize = QSize( width + addSize.width(), height + addSize.height() );
}
void MainInterface::resizeEvent( QResizeEvent *e )
{
- fprintf( stderr, "Resize event to %ix%i\n", e->size().width(), e->size().height() );
- /* Width : Always passed to all children. We are guaranteed it will
- * not go below PREF_W
- * Height : Only passed to the only visible child
- */
- if( videoWidget )
+ fprintf( stderr, "Resize event to %ix%i\n", DS( e->size() ) );
+ videoWidget->widgetSize.setWidth( e->size().width() - addSize.width() );
+ if( videoWidget && videoIsActive && videoWidget->widgetSize.height() > 1 )
{
- videoWidget->widgetSize.setWidth( e->size().width() -
- addSize.width() );
- if( videoIsActive && videoWidget->widgetSize.height() > 1 )
- {
- videoWidget->widgetSize.setHeight( e->size().height() -
- addSize.height() );
- videoWidget->updateGeometry();
- }
- fprintf( stderr, "Video set to %ix%i\n",
- videoWidget->widgetSize.width(),
- videoWidget->widgetSize.height() );
+ SET_WH( videoWidget, e->size().width() - addSize.width(),
+ e->size().height() - addSize.height() );
+ videoWidget->updateGeometry();
+ fprintf( stderr, "Video set to %ix%i\n", DS( videoWidget->widgetSize) );
}
- if( playlistWidget )
+ if( VISIBLE( playlistWidget ) )
{
- if( playlistWidget->isVisible() )
- {
- playlistWidget->widgetSize.setWidth( e->size().width() -
- addSize.width() );
-
- playlistWidget->widgetSize.setHeight( e->size().height() -
- addSize.height() );
- playlistWidget->updateGeometry();
- }
- fprintf( stderr, "Playlist set to %ix%i\n",playlistWidget->widgetSize.width(), playlistWidget->widgetSize.height() );
+ SET_WH( playlistWidget , e->size().width() - addSize.width(),
+ e->size().height() - addSize.height() );
+ playlistWidget->updateGeometry();
+ fprintf( stderr, "PL set to %ix%i\n",DS(playlistWidget->widgetSize ) );
}
-// videoWidget->widgetSize.setHeight( e->size().height() - addSize.height() );
-// videoWidget->widgetSize.setWidth( e->size().width() - addSize.width() );
-// videoWidget->updateGeometry() ;
}
void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
@@ -294,16 +283,28 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
if( ret )
{
videoIsActive = true;
- if( playlistWidget && playlistWidget->isVisible() )
+ if( VISIBLE( playlistWidget ) )
{
embeddedPlaylistWasActive = true;
playlistWidget->hide();
}
- if( bgWidget && bgWidget->isVisible() )
+ bool bgWasVisible = false;
+ if( VISIBLE( bgWidget) )
{
+ bgWasVisible = true;
bgWidget->hide();
}
- videoWidget->widgetSize = QSize( *pi_width, *pi_height );
+ if( THEMIM->getIM()->hasVideo() || !bgWasVisible )
+ {
+ videoWidget->widgetSize = QSize( *pi_width, *pi_height );
+ }
+ else /* Background widget available, use its size */
+ {
+ /* Ok, our visualizations are bad, so don't do this for the moment
+ * use the requested size anyway */
+ // videoWidget->widgetSize = bgWidget->widgeTSize;
+ videoWidget->widgetSize = QSize( *pi_width, *pi_height );
+ }
videoWidget->updateGeometry(); /// FIXME: Needed ?
need_components_update = true;
}
@@ -359,6 +360,25 @@ int MainInterface::controlVideo( void *p_window, int i_query, va_list args )
return i_ret;
}
+void MainInterface::visual()
+{
+ if( !VISIBLE( visualSelector) )
+ {
+ visualSelector->show();
+ if( !THEMIM->getIM()->hasVideo() )
+ {
+ /* Show the background widget */
+ }
+ }
+ else
+ {
+ /* Stop any currently running visualization */
+ visualSelector->hide();
+ }
+ calculateInterfaceSize();
+ resize( mainSize );
+}
+
void MainInterface::playlist()
{
// Toggle the playlist dialog
@@ -382,7 +402,7 @@ void MainInterface::playlist()
playlistWidget->hide();
}
/// Todo, reset its size ?
- if( playlistWidget->isVisible() )
+ if( VISIBLE( playlistWidget) )
{
fprintf( stderr, "hiding playlist\n" );
playlistWidget->hide();
@@ -404,6 +424,7 @@ void MainInterface::playlist()
videoWidget->resize( videoWidget->widgetSize );
videoWidget->updateGeometry();
}
+ if( VISIBLE( bgWidget ) ) bgWidget->hide();
}
calculateInterfaceSize();
diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp
index cfad5c50e08eb060ed895c2b1fb59018a7dfa78f..8a11a46bf9cd5f0aff6fa69981d8240f8dc4aa35 100644
--- a/modules/gui/qt4/main_interface.hpp
+++ b/modules/gui/qt4/main_interface.hpp
@@ -49,8 +49,6 @@ class MainInterface : public QVLCMW
public:
MainInterface( intf_thread_t *);
virtual ~MainInterface();
-
-
void *requestVideo( vout_thread_t *p_nvout, int *pi_x,
int *pi_y, unsigned int *pi_width,
unsigned int *pi_height );
@@ -80,6 +78,7 @@ private:
bool playlistEmbeddedFlag;
bool videoEmbeddedFlag;
+ bool alwaysVideoFlag;
InputManager *main_input_manager;
InputSlider *slider;
@@ -97,6 +96,7 @@ private slots:
void prev();
void next();
void playlist();
+ void visual();
void updateVolume( int sliderVolume );
};
@@ -104,24 +104,21 @@ private slots:
class VolumeClickHandler : public QObject
{
public:
- VolumeClickHandler( MainInterface *_m ) :QObject(_m) {m = _m; }
+ VolumeClickHandler( intf_thread_t *_p_intf, MainInterface *_m ) :QObject(_m)
+ {m = _m; p_intf = _p_intf; }
virtual ~VolumeClickHandler() {};
bool eventFilter( QObject *obj, QEvent *e )
{
if (e->type() == QEvent::MouseButtonPress )
{
- if( obj->objectName() == "volLowLabel" )
- {
- m->ui.volumeSlider->setValue( 0 );
- }
- else
- m->ui.volumeSlider->setValue( 100 );
+ aout_VolumeMute( p_intf, NULL );
return true;
}
return false;
}
private:
MainInterface *m;
+ intf_thread_t *p_intf;
};
#endif
diff --git a/modules/gui/qt4/ui/main_interface.ui b/modules/gui/qt4/ui/main_interface.ui
index 15b4e60ee429955a08329f9f13b106d62d7502a4..2f7f00e7074949f153f29845bd5443ef1b81ada8 100644
--- a/modules/gui/qt4/ui/main_interface.ui
+++ b/modules/gui/qt4/ui/main_interface.ui
@@ -182,7 +182,7 @@
-
-
+
@@ -210,7 +210,7 @@
-
-
+
@@ -219,7 +219,7 @@
-
-
+