#include "actions_manager.hpp" // killInstance
#include "extensions_manager.hpp" // killInstance
-#include "util/customwidgets.hpp" // qtEventToVLCKey
+#include "util/customwidgets.hpp" // qtEventToVLCKey, QVLCStackedWidget
#include "util/qt_dirs.hpp" // toNativeSeparators
#include "components/interface_widgets.hpp" // bgWidget, videoWidget
bgWidget = NULL;
videoWidget = NULL;
playlistWidget = NULL;
+ stackCentralOldWidget= NULL;
#ifndef HAVE_MAEMO
sysTray = NULL;
#endif
b_hideAfterCreation = false; // --qt-start-minimized
playlistVisible = false;
input_name = "";
- i_bg_height = 0;
/* Ask for Privacy */
b_videoEmbedded = var_InheritBool( p_intf, "embedded-video" );
/* Does the interface resize to video size or the opposite */
- b_keep_size = !var_InheritBool( p_intf, "qt-video-autoresize" );
+ b_autoresize = var_InheritBool( p_intf, "qt-video-autoresize" );
/* Are we in the enhanced always-video mode or not ? */
i_visualmode = var_InheritInteger( p_intf, "qt-minimal-view" );
/* */
b_plDocked = getSettings()->value( "pl-dock-status", true ).toBool();
-
- /**
- * Retrieve saved sizes for main window
- * mainBasedSize = based window size for normal mode
- * (no video, no background)
- * mainVideoSize = window size with video (all modes)
- **/
- mainBasedSize = settings->value( "mainBasedSize", QSize( 350, 120 ) ).toSize();
- mainVideoSize = settings->value( "mainVideoSize", QSize( 400, 300 ) ).toSize();
-
+ settings->endGroup( );
/**************
* Status Bar *
if( videoWidget )
{
- CONNECT( this, askVideoToResize( unsigned int, unsigned int ),
- videoWidget, SetSizing( unsigned int, unsigned int ) );
- CONNECT( videoWidget, sizeChanged( int, int ),
- this, resizeStack( int, int ) );
+ if( b_autoresize )
+ {
+ CONNECT( this, askVideoToResize( unsigned int, unsigned int ),
+ videoWidget, SetSizing( unsigned int, unsigned int ) );
+ CONNECT( videoWidget, sizeChanged( int, int ),
+ this, resizeStack( int, int ) );
+ }
CONNECT( this, askVideoSetFullScreen( bool ),
videoWidget, SetFullScreen( bool ) );
CONNECT( videoWidget, keyPressed( QKeyEvent * ),
this, handleKeyPress( QKeyEvent * ) );
}
- CONNECT( this, askUpdate(), this, doComponentsUpdate() );
CONNECT( THEDP, toolBarConfUpdated(), this, recreateToolbars() );
- /* Enable the popup menu in the MI */
- setContextMenuPolicy( Qt::CustomContextMenu );
- CONNECT( this, customContextMenuRequested( const QPoint& ),
- this, popupMenu( const QPoint& ) );
-
/** END of CONNECTS**/
/* Register callback for the intf-popupmenu variable */
var_AddCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf );
+ /* Playlist */
+ int i_plVis = settings->value( "MainWindow/playlist-visible", false ).toBool();
+
+ if( i_plVis ) togglePlaylist();
+
/**** FINAL SIZING and placement of interface */
settings->beginGroup( "MainWindow" );
QVLCTools::restoreWidgetPosition( settings, this, QSize(400, 100) );
-
- /* resize to previously saved main window size if appicable */
- //FIXME remove.
- if( b_keep_size )
- {
- if( i_visualmode )
- resize( mainVideoSize );
- else
- resize( mainBasedSize );
- }
-
- /* Playlist */
- int i_plVis = settings->value( "playlist-visible", 0 ).toInt();
-
settings->endGroup();
- if( i_plVis ) togglePlaylist();
-
/* Final sizing and showing */
setVisible( !b_hideAfterCreation );
MainInterface::~MainInterface()
{
/* Unsure we hide the videoWidget before destroying it */
- if( stackCentralOldWidget == playlistWidget )
- showBg();
-
- /* Save playlist state */
- if( playlistWidget )
- {
- if( !isPlDocked() )
- QVLCTools::saveWidgetPosition( p_intf, "Playlist", playlistWidget );
-
- delete playlistWidget;
- }
+ if( stackCentralOldWidget == videoWidget )
+ showTab( bgWidget );
#ifdef WIN32
if( himl )
/* Save states */
settings->beginGroup( "MainWindow" );
+
settings->setValue( "pl-dock-status", b_plDocked );
- settings->setValue( "playlist-visible", (int)playlistVisible );
+ /* Save playlist state */
+ if( playlistWidget )
+ {
+ settings->setValue( "playlist-visible",
+ isPlDocked() ?
+ playlistVisible :
+ playlistWidget->isVisible() /* FIXME */ );
+ }
+
settings->setValue( "adv-controls",
getControlsVisibilityStatus() & CONTROLS_ADVANCED );
- settings->setValue( "mainBasedSize", mainBasedSize );
- settings->setValue( "mainVideoSize", mainVideoSize );
-
- settings->setValue( "backgroundSize", bgWidget->size() );
+ /* Save the stackCentralW sizes */
+ settings->setValue( "bgSize", stackWidgetsSizes[bgWidget] );
+ settings->setValue( "playlistSize", stackWidgetsSizes[playlistWidget] );
/* Save this size */
QVLCTools::saveWidgetPosition(settings, this);
+
settings->endGroup();
+ /* Save undocked playlist size */
+ if( playlistWidget && !isPlDocked() )
+ QVLCTools::saveWidgetPosition( p_intf, "Playlist", playlistWidget );
+
+ delete playlistWidget;
+
delete statusBar();
/* Unregister callbacks */
*****************************/
void MainInterface::recreateToolbars()
{
- // FIXME: do the same for the FSC
+ bool b_adv = getControlsVisibilityStatus() & CONTROLS_ADVANCED;
+
settings->beginGroup( "MainWindow" );
delete controls;
delete inputC;
- controls = new ControlsWidget( p_intf, false, this ); /* FIXME */
- CONNECT( controls, advancedControlsToggled( bool ),
- this, doComponentsUpdate() );
- CONNECT( controls, sizeChanged(),
- this, doComponentsUpdate() );
-
+ controls = new ControlsWidget( p_intf, b_adv, this );
inputC = new InputControlsWidget( p_intf, this );
+ if( fullscreenControls )
+ {
+ delete fullscreenControls;
+ fullscreenControls = new FullscreenControllerWidget( p_intf, this );
+ CONNECT( fullscreenControls, keyPressed( QKeyEvent * ),
+ this, handleKeyPress( QKeyEvent * ) );
+ }
mainLayout->insertWidget( 2, inputC );
mainLayout->insertWidget( settings->value( "ToolbarPos", 0 ).toInt() ? 0: 3,
controls );
mainLayout->setSpacing( 0 ); mainLayout->setMargin( 0 );
/* */
- stackCentralW = new QStackedWidget( main );
+ stackCentralW = new QVLCStackedWidget( main );
/* Bg Cone */
bgWidget = new BackgroundWidget( p_intf );
}
mainLayout->insertWidget( 1, stackCentralW );
+ settings->beginGroup( "MainWindow" );
+ stackWidgetsSizes[bgWidget] = settings->value( "bgSize", QSize( 400, 0 ) ).toSize();
+ /* Resize even if no-auto-resize, because we are at creation */
+ resizeStack( stackWidgetsSizes[bgWidget].width(), stackWidgetsSizes[bgWidget].height() );
+
/* Create the CONTROLS Widget */
controls = new ControlsWidget( p_intf,
settings->value( "adv-controls", false ).toBool(), this );
- CONNECT( controls, advancedControlsToggled( bool ),
- this, doComponentsUpdate() );
- CONNECT( controls, sizeChanged(),
- this, doComponentsUpdate() );
inputC = new InputControlsWidget( p_intf, this );
mainLayout->insertWidget( 2, inputC );
visualSelector->hide();
#endif
- getSettings()->endGroup();
+ settings->endGroup();
+
+ /* Enable the popup menu in the MI */
+ main->setContextMenuPolicy( Qt::CustomContextMenu );
+ CONNECT( main, customContextMenuRequested( const QPoint& ),
+ this, popupMenu( const QPoint& ) );
if ( depth() > 8 ) /* 8bit depth has too many issues with opacity */
/* Create the FULLSCREEN CONTROLS Widget */
timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel);
+ timeLabel->setStyleSheet(
+ "QLabel:hover { background-color: rgba(255, 255, 255, 50%) }" );
+ speedLabel->setStyleSheet(
+ "QLabel:hover { background-color: rgba(255, 255, 255, 50%) }" );
/* and adding those */
statusBarr->addWidget( nameLabel, 8 );
* Handling of sizing of the components
**********************************************************************/
-/* This function is called:
- - toggling of minimal View
- - through askUpdate() by Vout thread request video and resize video (zoom)
- - Advanced buttons toggled
- */
-void MainInterface::doComponentsUpdate()
-{
-#if 0
- if( isFullScreen() || isMaximized() ) return;
-
-// msg_Warn( p_intf, "Updating the geometry" );
- /* Here we resize to sizeHint() and not adjustsize because we want
- the videoWidget to be exactly the correctSize */
-
-#ifdef DEBUG_INTF
- debug();
-#endif
- /* This is WRONG, but I believe there is a Qt bug here */
- setMinimumSize( 0, 0 );
- //resize( sizeHint() );
-
- //adjustSize() ; /* This is not needed, but might help in the future */
-#endif
-}
-
void MainInterface::debug()
{
#ifdef DEBUG_INTF
}
inline void MainInterface::showVideo() { showTab( videoWidget ); }
-inline void MainInterface::showBg() { showTab( bgWidget ); }
+inline void MainInterface::restoreStackOldWidget()
+ { showTab( stackCentralOldWidget ); }
inline void MainInterface::showTab( QWidget *widget )
{
#ifdef DEBUG_INTF
msg_Warn( p_intf, "Old stackCentralOldWidget %i", stackCentralW->indexOf( stackCentralOldWidget ) );
#endif
+
stackCentralOldWidget = stackCentralW->currentWidget();
+ stackWidgetsSizes[stackCentralOldWidget] = stackCentralW->size();
+
stackCentralW->setCurrentWidget( widget );
+ if( b_autoresize )
+ resizeStack( stackWidgetsSizes[widget].width(), stackWidgetsSizes[widget].height() );
#ifdef DEBUG_INTF
msg_Warn( p_intf, "State change %i", stackCentralW->currentIndex() );
#endif
}
-inline void MainInterface::restoreStackOldWidget()
-{
-#ifdef DEBUG_INTF
- msg_Warn( p_intf, "New stackCentralOldWidget %i", stackCentralW->indexOf( stackCentralOldWidget ) );
-#endif
- QWidget *wTemp = stackCentralW->currentWidget();
-
- stackCentralW->setCurrentWidget( stackCentralOldWidget );
-
- stackCentralOldWidget = wTemp;
-#ifdef DEBUG_INTF
- msg_Warn( p_intf, "Debug %i %i",stackCentralW->indexOf( wTemp ), stackCentralW->indexOf( stackCentralW->currentWidget() ) );
-#endif
-}
-
void MainInterface::destroyPopupMenu()
{
QVLCMenu::PopupMenu( p_intf, false );
void MainInterface::popupMenu( const QPoint &p )
{
- /* FIXME
- * Ow, that's ugly: don't show the popup menu if cursor over
- * the main menu bar or the status bar */
- if( !childAt( p ) || ( ( childAt( p ) != menuBar() )
- && ( childAt( p )->parentWidget() != statusBar() ) ) )
- QVLCMenu::PopupMenu( p_intf, true );
+ QVLCMenu::PopupMenu( p_intf, true );
}
void MainInterface::toggleFSC()
{
/* Request the videoWidget */
WId ret = videoWidget->request( pi_x, pi_y,
- pi_width, pi_height, b_keep_size );
+ pi_width, pi_height, !b_autoresize );
*p_id = ret;
if( ret ) /* The videoWidget is available */
{
- /* ask videoWidget to show */
- videoWidget->SetSizing( *pi_width, *pi_height );
-
/* Consider the video active now */
showVideo();
+
+ /* Ask videoWidget to resize correctly, if we are in normal mode */
+ if( !isFullScreen() && !isMaximized() && b_autoresize )
+ videoWidget->SetSizing( *pi_width, *pi_height );
}
}
-
-
/* Asynchronous call from the WindowClose function */
void MainInterface::releaseVideo( void )
{
- emit askReleaseVideo( );
+ emit askReleaseVideo();
}
/* Function that is CONNECTED to the previous emit */
void MainInterface::releaseVideoSlot( void )
{
- videoWidget->release( );
+ videoWidget->release();
- restoreStackOldWidget();
+ if( stackCentralW->currentWidget() == videoWidget )
+ restoreStackOldWidget();
/* We don't want to have a blank video to popup */
stackCentralOldWidget = bgWidget;
-
- /* Try to resize, except when you are in Fullscreen mode */
-// doComponentsUpdate();
}
/* Asynchronous call from WindowControl function */
{
unsigned int i_width = va_arg( args, unsigned int );
unsigned int i_height = va_arg( args, unsigned int );
+ if( isFullScreen() || isMaximized() )
+ showNormal();
emit askVideoToResize( i_width, i_height );
return VLC_SUCCESS;
}
{
playlistWidget = new PlaylistWidget( p_intf, this );
- if( !b_plDocked )
+ if( b_plDocked )
+ {
+ stackCentralW->addWidget( playlistWidget );
+ stackWidgetsSizes[playlistWidget] = settings->value( "playlistSize", QSize( 500, 250 ) ).toSize();
+ }
+ else
{
playlistWidget->setWindowFlags( Qt::Window );
QVLCTools::restoreWidgetPosition( p_intf, "Playlist",
playlistWidget, QSize( 600, 300 ) );
}
- else
- {
- stackCentralW->addWidget( playlistWidget );
- }
}
void MainInterface::togglePlaylist()
{
if( !playlistWidget )
+ {
createPlaylist();
+ }
if( b_plDocked )
{
/* Playlist is not visible, show it */
if( stackCentralW->currentWidget() != playlistWidget )
{
- playlistWidget->forceShow();
showTab( playlistWidget );
}
else /* Hide it! */
{
restoreStackOldWidget();
- stackCentralW->updateGeometry();
- // HACK: So it doesn't limit the stackWidget minimumSize
- playlistWidget->forceHide();
}
playlistVisible = ( stackCentralW->currentWidget() == playlistWidget );
}
}
else
{
+ QVLCTools::saveWidgetPosition( p_intf, "Playlist", playlistWidget );
playlistWidget->setWindowFlags( Qt::Widget ); // Probably a Qt bug here
// It would be logical that QStackWidget::addWidget reset the flags...
stackCentralW->addWidget( playlistWidget );
- stackCentralW->setCurrentWidget( playlistWidget );
+ showTab( playlistWidget );
}
+ playlistVisible = true;
}
/*
*/
void MainInterface::toggleMinimalView( bool b_switch )
{
- if( i_visualmode == 0 )
- { /* NORMAL MODE then */
- if( !videoWidget || stackCentralW->currentWidget() != videoWidget )
- {
- showBg();
- }
- else
+ if( i_visualmode == 0 && b_autoresize ) /* Normal mode */
+ {
+ if( stackCentralW->currentWidget() == bgWidget )
{
- /* If video is visible, then toggle the status of bgWidget */
- //FIXME
- //bgWasVisible = !bgWasVisible;
- /* if( stackCentralOldState == BACK G_TAB )
- stackCentralOldState = HID DEN_TAB;
- else
- stackCentralOldState = BACK G_TAB;
-
- */
+ if( stackCentralW->height() < 16 )
+ {
+ resizeStack( stackCentralW->width(), 100 );
+ }
}
}
- i_bg_height = stackCentralW->height();
-
menuBar()->setVisible( !b_switch );
controls->setVisible( !b_switch );
statusBar()->setVisible( !b_switch );
inputC->setVisible( !b_switch );
- doComponentsUpdate();
-
emit minimalViewToggled( b_switch );
}
/* toggling advanced controls buttons */
-void MainInterface::toggleAdvanced()
+void MainInterface::toggleAdvancedButtons()
{
controls->toggleAdvanced();
// if( fullscreenControls ) fullscreenControls->toggleAdvanced();
/* Get the visibility status of the controls (hidden or not, advanced or not) */
int MainInterface::getControlsVisibilityStatus()
{
+ if( !controls ) return 0;
return( (controls->isVisible() ? CONTROLS_VISIBLE : CONTROLS_HIDDEN )
+ CONTROLS_ADVANCED * controls->b_advancedVisible );
}
visualSelector->hide();
visualSelectorEnabled = false;
}
- doComponentsUpdate();
}
#endif
{
switch( i_status )
{
- case 0:
- case END_S:
- {
- sysTray->setToolTip( qtr( "VLC media player" ) );
- break;
- }
- case PLAYING_S:
- {
- sysTray->setToolTip( input_name );
- break;
- }
- case PAUSE_S:
- {
- sysTray->setToolTip( input_name + " - "
- + qtr( "Paused") );
- break;
- }
+ case PLAYING_S:
+ sysTray->setToolTip( input_name );
+ break;
+ case PAUSE_S:
+ sysTray->setToolTip( input_name + " - " + qtr( "Paused") );
+ break;
+ default:
+ sysTray->setToolTip( qtr( "VLC media player" ) );
+ break;
}
QVLCMenu::updateSystrayMenu( this, p_intf );
}
************************************************************************/
void MainInterface::customEvent( QEvent *event )
{
-#if 0
- if( event->type() == PLDockEvent_Type )
- {
- PlaylistDialog::killInstance();
- playlistEmbeddedFlag = true;
- menuBar()->clear();
- QVLCMenu::createMenuBar(this, p_intf, true, visualSelectorEnabled);
- togglePlaylist();
- }
-#endif
- /*else */
if ( event->type() == (int)SetVideoOnTopEvent_Type )
{
SetVideoOnTopQtEvent* p_event = (SetVideoOnTopQtEvent*)event;
e->ignore();
}
-void MainInterface::resizeEvent( QResizeEvent * event )
-{
-#if 0
- if( b_keep_size )
- {
- if( i_visualmode )
- {
- mainVideoSize = size();
- }
- else
- {
- if( VISIBLE( bgWidget) ||
- ( videoIsActive && videoWidget->isVisible() )
- )
- mainVideoSize = size();
- else
- mainBasedSize = size();
- }
- }
-#endif
- QVLCMW::resizeEvent( event );
- msg_Dbg( p_intf, "Resize Event, height: %i", size().height() );
- debug();
-}
-
void MainInterface::wheelEvent( QWheelEvent *e )
{
int i_vlckey = qtWheelEventToVLCKey( e );