#include "util/qvlcframe.hpp"
#include "dialogs_provider.hpp"
#include "components/interface_widgets.hpp"
+#include "dialogs/playlist.hpp"
+#include "menus.hpp"
+
#include <QCloseEvent>
-#include <assert.h>
#include <QPushButton>
#include <QStatusBar>
#include <QKeyEvent>
-#include "menus.hpp"
+
+#include <assert.h>
#include <vlc_keys.h>
#ifdef WIN32
MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
{
- /* All UI stuff */
- QWidget *main = new QWidget( this );
- setCentralWidget( main );
+ settings = new QSettings( "VideoLAN", "VLC" );
+ settings->beginGroup( "MainWindow" );
+
setWindowTitle( QString::fromUtf8( _("VLC media player") ) );
- ui.setupUi( centralWidget() );
+ handleMainUi( settings );
+
+ QVLCMenu::createMenuBar( menuBar(), p_intf );
+ /* Status bar */
+ timeLabel = new QLabel( 0 );
+ nameLabel = new QLabel( 0 );
+ statusBar()->addWidget( nameLabel, 4 );
+ statusBar()->addPermanentWidget( timeLabel, 1 );
setFocusPolicy( Qt::StrongFocus );
+ /* Init input manager */
+ MainInputManager::getInstance( p_intf );
+ ON_TIMEOUT( updateOnTimer() );
+
+ /* Volume control */
+ CONNECT( ui.volumeSlider, valueChanged(int), this, updateVolume(int) );
+ /* Connect the input manager to the GUI elements it manages */
+ CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
+ slider, setPosition( float,int, int ) );
+ CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
+ this, setDisplay( float, int, int ) );
+ CONNECT( THEMIM->getIM(), nameChanged( QString ), this,setName( QString ) );
+ CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) );
+ 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;
+}
+
+MainInterface::~MainInterface()
+{
+ /// \todo Save everything
+ p_intf->b_interaction = VLC_FALSE;
+ var_DelCallback( p_intf, "interaction", InteractCallback, this );
+}
+
+void MainInterface::handleMainUi( QSettings *settings )
+{
+ QWidget *main = new QWidget( this );
+ setCentralWidget( main );
+ ui.setupUi( centralWidget() );
+
slider = new InputSlider( Qt::Horizontal, NULL );
ui.hboxLayout->insertWidget( 0, slider );
+
ui.prevButton->setText( "" );
ui.nextButton->setText( "" );
ui.playButton->setText( "" );
ui.nextButton->setIcon( QIcon( ":/pixmaps/next.png" ) );
ui.playButton->setIcon( QIcon( ":/pixmaps/play.png" ) );
ui.stopButton->setIcon( QIcon( ":/pixmaps/stop.png" ) );
+
+ /* Volume */
ui.volLowLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
ui.volHighLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) );
ui.volumeSlider->setMaximum( 100 );
- ui.playlistButton->setText( "" );
- ui.playlistButton->setIcon( QIcon( ":/pixmaps/volume-low.png" ) );
VolumeClickHandler *h = new VolumeClickHandler( this );
ui.volLowLabel->installEventFilter(h);
ui.volHighLabel->installEventFilter(h);
-
ui.volumeSlider->setFocusPolicy( Qt::NoFocus );
- QVLCMenu::createMenuBar( menuBar(), p_intf );
+ ui.playlistButton->setText( "" );
+ ui.playlistButton->setIcon( QIcon( ":/pixmaps/volume-low.png" ) );
- timeLabel = new QLabel( 0 );
- nameLabel = new QLabel( 0 );
- statusBar()->addWidget( nameLabel, 4 );
- statusBar()->addPermanentWidget( timeLabel, 1 );
+ /* Fetch configuration from settings and vlc config */
+ videoEmbeddedFlag = false;
+ if( config_GetInt( p_intf, "embedded-video" ) )
+ videoEmbeddedFlag = true;
+
+ playlistEmbeddedFlag = true;
+ /// \todo fetch playlist settings
resize ( PREF_W, PREF_H );
- if( config_GetInt( p_intf, "embedded" ) )
+
+ if( videoEmbeddedFlag )
{
videoWidget = new VideoWidget( p_intf );
- if( config_GetInt( p_intf, "qt-always-video" ) )
+ videoWidget->widgetSize = QSize( 1, 1 );
+ videoWidget->resize( videoWidget->widgetSize );
+ ui.vboxLayout->insertWidget( 0, videoWidget );
+
+ if( config_GetInt( p_intf, "qt-always-video" ))
{
- QSettings settings( "VideoLAN", "VLC" );
- settings.beginGroup( "MainWindow" );
- videoSize = settings.value( "videoSize", QSize( 200, 200 ) ).
- toSize();
+ bgWidget = new BackgroundWidget( p_intf );
+ bgWidget->widgetSize = settings->value( "backgroundSize",
+ QSize( 200, 200 ) ).toSize();
+ ui.vboxLayout->insertWidget( 0, bgWidget );
+ bgWidget->hide();
}
- else
- videoSize = QSize( 1,1 );
- videoWidget->resize( videoSize );
- ui.vboxLayout->insertWidget( 0, videoWidget );
}
- readSettings( "MainWindow" );
+ // Size for fixed elements
addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
- mainSize.setWidth( videoSize.width() + addSize.width() );
- mainSize.setHeight( videoSize.height() + addSize.height() );
+
+ calculateInterfaceSize();
resize( mainSize );
+ /// \bug still needed ?
mainSize = size();
setMinimumSize( PREF_W, addSize.height() );
-
- /* Init input manager */
- MainInputManager::getInstance( p_intf );
- ON_TIMEOUT( updateOnTimer() );
-
- /* Volume control */
- CONNECT( ui.volumeSlider, valueChanged(int), this, updateVolume(int) );
- /* Connect the input manager to the GUI elements it manages */
- CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
- slider, setPosition( float,int, int ) );
- CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
- this, setDisplay( float, int, int ) );
- CONNECT( THEMIM->getIM(), nameChanged( QString ), this,setName( QString ) );
- CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) );
- 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() );
- CONNECT( ui.playlistButton, clicked(), THEDP, playlistDialog() );
-
- var_Create( p_intf, "interaction", VLC_VAR_ADDRESS );
- var_AddCallback( p_intf, "interaction", InteractCallback, this );
- p_intf->b_interaction = VLC_TRUE;
}
-MainInterface::~MainInterface()
+void MainInterface::calculateInterfaceSize()
{
- writeSettings( "MainWindow" );
- if( config_GetInt( p_intf, "qt-always-video" ) )
+ int width = 0, height = 0;
+ if( bgWidget->isVisible() )
{
- QSettings s("VideoLAN", "VLC" );
- s.beginGroup( "MainWindow" );
- s.setValue( "videoSize", videoSize );
- s.endGroup();
+ width += bgWidget->widgetSize.width();
+ height += bgWidget->widgetSize.height();
+ assert( !playlistWidget->isVisible() );
+
}
- p_intf->b_interaction = VLC_FALSE;
- var_DelCallback( p_intf, "interaction", InteractCallback, this );
+ if( playlistWidget->isVisible() )
+ {
+ width += playlistWidget->widgetSize.width();
+ height += playlistWidget->widgetSize.height();
+ }
+ mainSize.setWidth( width + videoWidget->widgetSize.width() +
+ addSize.width() );
+ mainSize.setHeight( height + videoWidget->widgetSize.height() +
+ addSize.height() );
}
void MainInterface::resizeEvent( QResizeEvent *e )
{
- videoSize.setHeight( e->size().height() - addSize.height() );
- videoSize.setWidth( e->size().width() - addSize.width() );
+ videoWidget->widgetSize.setHeight( e->size().height() - addSize.height() );
+ videoWidget->widgetSize.setWidth( e->size().width() - addSize.width() );
p_intf->p_sys->p_video->updateGeometry() ;
}
if( e->modifiers()& Qt::ControlModifier ) i_vlck |= KEY_MODIFIER_CTRL;
if( e->modifiers()& Qt::MetaModifier ) i_vlck |= KEY_MODIFIER_META;
- fprintf( stderr, "After modifiers %x\n", i_vlck );
bool found = false;
- fprintf( stderr, "Qt %x\n", e->key() );
/* Look for some special keys */
#define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
switch( e->key() )
HANDLE( Key_Delete, KEY_DELETE );
}
- fprintf( stderr, "After keys %x\n", i_vlck );
if( !found )
{
/* Force lowercase */
playlist_Next( THEPL );
}
+void MainInterface::playlist()
+{
+ // Toggle the playlist dialog
+ if( !playlistEmbeddedFlag )
+ {
+ if( playlistWidget )
+ {
+ /// \todo Destroy it
+
+ }
+ THEDP->playlistDialog();
+ return;
+ }
+
+ if( !playlistWidget )
+ {
+ PlaylistDialog::killInstance();
+ playlistWidget = new PlaylistWidget( p_intf );
+ ui.vboxLayout->insertWidget( 0, playlistWidget );
+ playlistWidget->widgetSize = settings->value( "playlistSize",
+ QSize( 600, 300 ) ).toSize();
+ }
+ /// Todo, reset its size ?
+ if( playlistWidget->isVisible() ) playlistWidget->show();
+ else playlistWidget->hide();
+
+ calculateInterfaceSize();
+ resize( mainSize );
+}
+
void MainInterface::setDisplay( float pos, int time, int length )
{
char psz_length[MSTRTIME_MAX_SIZE], psz_time[MSTRTIME_MAX_SIZE];