X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fmain_interface.cpp;h=986964043079ffe6f65f39a34dff049c349c6caf;hb=ac1b335ceb78455180c2a771d4fdcde6002a91ae;hp=99ef957bcd56502df818168d862e725402077dd5;hpb=dce84f16eff36ca70cbb431f0654569eb02ca458;p=vlc diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 99ef957bcd..9869640430 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -34,7 +34,7 @@ #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 @@ -61,11 +61,6 @@ #include /* Wheel event */ #include /* vout_thread_t and VOUT_ events */ -#ifdef WIN32 /* Win7 taskbar */ - #include - #include -#endif - // #define DEBUG_INTF /* Callback prototypes */ @@ -80,6 +75,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL; + stackCentralOldWidget= NULL; #ifndef HAVE_MAEMO sysTray = NULL; #endif @@ -89,9 +85,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) inputC = NULL; b_hideAfterCreation = false; // --qt-start-minimized - playlistVisible = false; // FIXME remove + playlistVisible = false; input_name = ""; - i_bg_height = 0; /* Ask for Privacy */ @@ -112,7 +107,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) 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" ); @@ -127,16 +122,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* */ 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 * @@ -147,7 +133,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) * UI and Widgets design **************************/ setVLCWindowsTitle(); - createMainWidget( settings ); /************ * Menu Bar * @@ -156,6 +141,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) CONNECT( THEMIM->getIM(), voutListChanged( vout_thread_t **, int ), this, destroyPopupMenu() ); + createMainWidget( settings ); /********************************* * Create the Systray Management * *********************************/ @@ -221,22 +207,21 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) if( videoWidget ) { - CONNECT( this, askVideoToResize( unsigned int, unsigned int ), - videoWidget, SetSizing( unsigned int, unsigned 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**/ @@ -248,27 +233,16 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* 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 ); @@ -283,17 +257,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) 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 ) @@ -303,10 +268,10 @@ MainInterface::~MainInterface() CoUninitialize(); #endif - /* Be sure to kill the actionsManager... FIXME */ + /* Be sure to kill the actionsManager... Only used in the MI and control */ ActionsManager::killInstance(); - /* Idem, FIXME */ + /* Idem */ ExtensionsManager::killInstance(); /* Delete the FSC controller */ @@ -314,20 +279,35 @@ MainInterface::~MainInterface() /* 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 */ @@ -342,20 +322,22 @@ MainInterface::~MainInterface() *****************************/ void MainInterface::recreateToolbars() { - // FIXME: do the same for the FSC - //msg_Dbg( p_intf, "Recreating the toolbars" ); + 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 ); @@ -372,7 +354,7 @@ void MainInterface::createMainWidget( QSettings *settings ) mainLayout->setSpacing( 0 ); mainLayout->setMargin( 0 ); /* */ - stackCentralW = new QStackedWidget( main ); + stackCentralW = new QVLCStackedWidget( main ); /* Bg Cone */ bgWidget = new BackgroundWidget( p_intf ); @@ -386,13 +368,14 @@ void MainInterface::createMainWidget( QSettings *settings ) } 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 ); @@ -406,7 +389,12 @@ void MainInterface::createMainWidget( QSettings *settings ) 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 */ @@ -458,6 +446,10 @@ inline void MainInterface::createStatusBar() 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 ); @@ -477,305 +469,39 @@ inline void MainInterface::createStatusBar() timeLabel, setDisplayPosition( float ) ); } -#ifdef WIN32 -void MainInterface::createTaskBarButtons() -{ - taskbar_wmsg = WM_NULL; - /*Here is the code for the taskbar thumb buttons - FIXME:We need pretty buttons in 16x16 px that are handled correctly by masks in Qt - FIXME:the play button's picture doesn't changed to pause when clicked - */ - - CoInitialize( 0 ); - - if( S_OK == CoCreateInstance( &clsid_ITaskbarList, - NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskbarList3, - (void **)&p_taskbl) ) - { - p_taskbl->vt->HrInit(p_taskbl); - - if(himl = ImageList_Create( 15, //cx - 18, //cy - ILC_COLOR,//flags - 4,//initial nb of images - 0//nb of images that can be added - )) - { - QPixmap img = QPixmap(":/toolbar/previous_b"); - QPixmap img2 = QPixmap(":/toolbar/pause_b"); - QPixmap img3 = QPixmap(":/toolbar/play_b"); - QPixmap img4 = QPixmap(":/toolbar/next_b"); - QBitmap mask = img.createMaskFromColor(Qt::transparent); - QBitmap mask2 = img2.createMaskFromColor(Qt::transparent); - QBitmap mask3 = img3.createMaskFromColor(Qt::transparent); - QBitmap mask4 = img4.createMaskFromColor(Qt::transparent); - - if(-1 == ImageList_Add(himl, img.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask.toWinHBITMAP())) - msg_Err( p_intf, "ImageList_Add failed" ); - if(-1 == ImageList_Add(himl, img2.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask2.toWinHBITMAP())) - msg_Err( p_intf, "ImageList_Add failed" ); - if(-1 == ImageList_Add(himl, img3.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask3.toWinHBITMAP())) - msg_Err( p_intf, "ImageList_Add failed" ); - if(-1 == ImageList_Add(himl, img4.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask4.toWinHBITMAP())) - msg_Err( p_intf, "ImageList_Add failed" ); - } - - // Define an array of two buttons. These buttons provide images through an - // image list and also provide tooltips. - DWORD dwMask = THB_BITMAP | THB_FLAGS; - - THUMBBUTTON thbButtons[3]; - thbButtons[0].dwMask = dwMask; - thbButtons[0].iId = 0; - thbButtons[0].iBitmap = 0; - thbButtons[0].dwFlags = THBF_HIDDEN; - - thbButtons[1].dwMask = dwMask; - thbButtons[1].iId = 1; - thbButtons[1].iBitmap = 2; - thbButtons[1].dwFlags = THBF_HIDDEN; - - thbButtons[2].dwMask = dwMask; - thbButtons[2].iId = 2; - thbButtons[2].iBitmap = 3; - thbButtons[2].dwFlags = THBF_HIDDEN; - - HRESULT hr = p_taskbl->vt->ThumbBarSetImageList(p_taskbl, winId(), himl ); - if(S_OK != hr) - msg_Err( p_intf, "ThumbBarSetImageList failed with error %08x", hr ); - else - { - hr = p_taskbl->vt->ThumbBarAddButtons(p_taskbl, winId(), 3, thbButtons); - if(S_OK != hr) - msg_Err( p_intf, "ThumbBarAddButtons failed with error %08x", hr ); - } - CONNECT( THEMIM->getIM(), statusChanged( int ), this, changeThumbbarButtons( int ) ); - } - else - { - himl = NULL; - p_taskbl = NULL; - } - -} - -bool MainInterface::winEvent ( MSG * msg, long * result ) -{ - if (msg->message == taskbar_wmsg) - { - //We received the taskbarbuttoncreated, now we can really create th buttons - createTaskBarButtons(); - } - - short cmd; - switch( msg->message ) - { - case WM_COMMAND: - if (HIWORD(msg->wParam) == THBN_CLICKED) - { - switch(LOWORD(msg->wParam)) - { - case 0: - THEMIM->prev(); - break; - case 1: - THEMIM->togglePlayPause(); - break; - case 2: - THEMIM->next(); - break; - } - } - break; - case WM_APPCOMMAND: - cmd = GET_APPCOMMAND_LPARAM(msg->lParam); - switch(cmd) - { - case APPCOMMAND_MEDIA_PLAY_PAUSE: - THEMIM->togglePlayPause(); - break; - case APPCOMMAND_MEDIA_PLAY: - THEMIM->play(); - break; - case APPCOMMAND_MEDIA_PAUSE: - THEMIM->pause(); - break; - case APPCOMMAND_MEDIA_PREVIOUSTRACK: - THEMIM->prev(); - break; - case APPCOMMAND_MEDIA_NEXTTRACK: - THEMIM->next(); - break; - case APPCOMMAND_MEDIA_STOP: - THEMIM->stop(); - break; - case APPCOMMAND_VOLUME_DOWN: - THEAM->AudioDown(); - break; - case APPCOMMAND_VOLUME_UP: - THEAM->AudioUp(); - break; - case APPCOMMAND_VOLUME_MUTE: - THEAM->toggleMuteAudio(); - break; - default: - msg_Dbg( p_intf, "unknown APPCOMMAND = %d", cmd); - break; - } - break; - } - return false; -} -#endif - /********************************************************************** * Handling of sizing of the components **********************************************************************/ -/* This function is probably wrong, but we don't have many many choices... - Since we can't know from the playlist Widget if we are inside a dock or not, - because the playlist Widget can be called by THEDP, as a separate windows for - the skins. - Maybe the other solution is to redefine the sizeHint() of the playlist and - ask _parent->isFloating()... - If you think this would be better, please FIXME it... -*/ -#if 0 - -QSize MainInterface::sizeHint() const -{ -#if 0 - if( b_keep_size ) - { - if( i_visualmode ) - { - return mainVideoSize; - } - else - { - if( VISIBLE( bgWidget) || - ( videoIsActive && videoWidget->isVisible() ) - ) - return mainVideoSize; - else - return mainBasedSize; - } - } -#endif - - int nwidth = __MAX( controls->sizeHint().width(), - menuBar()->sizeHint().width() ); - - int nheight = controls->isVisible() ? - controls->size().height() - + inputC->size().height() - + menuBar()->size().height() - + statusBar()->size().height() - : 0 ; - - /* if( stackCentralW->isVisible() ) - { - nheight += stackCentralW->height(); - nwidth = __MAX( nwidth, stackCentralW->width() ); - }*/ - -/* if( VISIBLE( bgWidget ) ) - { - msg_Warn( p_intf, "Hello here" ); - if( i_bg_height ) - nheight += i_bg_height; - else - nheight += bgWidget->size().height(); - nwidth = __MAX( nwidth, bgWidget->size().width() ); - } - else if( videoIsActive && videoWidget->isVisible() ) - { - msg_Warn( p_intf, "Hello there" ); - nheight += videoWidget->sizeHint().height(); - nwidth = __MAX( nwidth, videoWidget->sizeHint().width() ); - }*/ -#if 0 - if( !dockPL->isFloating() && dockPL->isVisible() && dockPL->widget() ) - { - nheight += dockPL->size().height(); - nwidth = __MAX( nwidth, dockPL->size().width() ); - msg_Warn( p_intf, "3 %i %i", nheight, nwidth ); - } -#endif - return QSize( nwidth, nheight ); -} -#endif - -/* Video widget cannot do this synchronously as it runs in another thread */ -/* Well, could it, actually ? Probably dangerous ... */ - -/* 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( 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 */ -} - void MainInterface::debug() { #ifdef DEBUG_INTF - msg_Dbg( p_intf, "Stack Size: %i - %i", stackCentralW->size().height(), size().width() ); - if( videoWidget ) - msg_Dbg( p_intf, "Stack Size: %i - %i", - videoWidget->size().height(), - videoWidget->size().width() ); - else - msg_Dbg( p_intf, "no embedded video" ); - msg_Dbg( p_intf, "size: %i - %i", size().height(), size().width() ); msg_Dbg( p_intf, "sizeHint: %i - %i", sizeHint().height(), sizeHint().width() ); - //msg_Dbg( p_intf, "maximumsize: %i - %i", maximumSize().height(), maximumSize().width() ); + msg_Dbg( p_intf, "minimumsize: %i - %i", minimumSize().height(), minimumSize().width() ); msg_Dbg( p_intf, "Stack size: %i - %i", stackCentralW->size().height(), stackCentralW->size().width() ); - msg_Dbg( p_intf, "Stack minimumSize(): %i - %i", stackCentralW->minimumHeight(), stackCentralW->minimumWidth() ); - msg_Dbg( p_intf, "Central minimumsize: %i - %i", centralWidget()->minimumSize().height(), centralWidget()->minimumSize().width() ); + msg_Dbg( p_intf, "Stack sizeHint: %i - %i", stackCentralW->sizeHint().height(), stackCentralW->sizeHint().width() ); msg_Dbg( p_intf, "Central size: %i - %i", centralWidget()->size().height(), centralWidget()->size().width() ); - msg_Dbg( p_intf, "Menu minimumsize: %i - %i", menuBar()->minimumSize().height(), menuBar()->minimumSize().width() ); - msg_Dbg( p_intf, "Input size: %i - %i", inputC->size().height(), inputC->size().width() ); - msg_Dbg( p_intf, "Status minimumsize: %i - %i", statusBar()->minimumSize().height(), statusBar()->minimumSize().width() ); - msg_Dbg( p_intf, "minimumsize: %i - %i", minimumSize().height(), minimumSize().width() ); - msg_Dbg( p_intf, "bg Size: %i - %i", bgWidget->size().height(), bgWidget->size().width() ); - - /*if( videoWidget && videoWidget->isVisible() ) - { - msg_Dbg( p_intf, "size: %i - %i", size().height(), size().width() ); - msg_Dbg( p_intf, "sizeHint: %i - %i", sizeHint().height(), sizeHint().width() ); - }*/ #endif } 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() ); @@ -783,21 +509,6 @@ inline void MainInterface::showTab( QWidget *widget ) #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 ); @@ -805,12 +516,7 @@ void MainInterface::destroyPopupMenu() 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() @@ -865,58 +571,51 @@ void MainInterface::getVideoSlot( WId *p_id, int *pi_x, int *pi_y, { /* 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(); - stackCentralW->resize( *pi_width, *pi_height ); - - emit askUpdate(); + /* 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(); + QApplication::postEvent( this, new SetVideoOnTopQtEvent( false ) ); } /* 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 */ int MainInterface::controlVideo( int i_query, va_list args ) { - /* Debug to check if VOUT_WINDOW_SET_SIZE is called, because this is broken now */ - msg_Warn( p_intf, "Control Video: %i", i_query ); switch( i_query ) { case VOUT_WINDOW_SET_SIZE: { 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 ); - emit askUpdate(); - return VLC_EGENERIC; + return VLC_SUCCESS; } case VOUT_WINDOW_SET_STATE: { @@ -947,8 +646,16 @@ void MainInterface::createPlaylist() { 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 + { +#ifdef WIN32 + playlistWidget->setParent( NULL ); +#endif playlistWidget->setWindowFlags( Qt::Window ); /* This will restore the geometry but will not work for position, @@ -956,36 +663,33 @@ void MainInterface::createPlaylist() 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 { +#ifdef WIN32 + playlistWidget->setParent( NULL ); +#endif playlistWidget->setWindowFlags( Qt::Window ); playlistVisible = !playlistVisible; playlistWidget->setVisible( playlistVisible ); @@ -1002,6 +706,9 @@ void MainInterface::dockPlaylist( bool p_docked ) if( !p_docked ) { stackCentralW->removeWidget( playlistWidget ); +#ifdef WIN32 + playlistWidget->setParent( NULL ); +#endif playlistWidget->setWindowFlags( Qt::Window ); QVLCTools::restoreWidgetPosition( p_intf, "Playlist", playlistWidget, QSize( 600, 300 ) ); @@ -1010,49 +717,41 @@ void MainInterface::dockPlaylist( bool p_docked ) } 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; } +/* + If b_switch is false, then we are normalView + */ 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(); @@ -1061,6 +760,7 @@ void MainInterface::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 ); } @@ -1083,7 +783,6 @@ void MainInterface::visual() visualSelector->hide(); visualSelectorEnabled = false; } - doComponentsUpdate(); } #endif @@ -1261,23 +960,15 @@ void MainInterface::updateSystrayTooltipStatus( int i_status ) { 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 ); } @@ -1346,25 +1037,20 @@ void MainInterface::dragLeaveEvent(QDragLeaveEvent *event) ************************************************************************/ 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; + Qt::WindowFlags oldflags = windowFlags(), newflags; + if( p_event->OnTop() ) - setWindowFlags( windowFlags() | Qt::WindowStaysOnTopHint ); + newflags = oldflags | Qt::WindowStaysOnTopHint; else - setWindowFlags( windowFlags() & ~Qt::WindowStaysOnTopHint ); - show(); /* necessary to apply window flags */ + newflags = oldflags & ~Qt::WindowStaysOnTopHint; + if( newflags != oldflags ) + { + setWindowFlags( newflags ); + show(); /* necessary to apply window flags */ + } } } @@ -1392,31 +1078,6 @@ void MainInterface::handleKeyPress( QKeyEvent *e ) 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 ); @@ -1431,12 +1092,11 @@ void MainInterface::closeEvent( QCloseEvent *e ) THEDP->quit(); } -void MainInterface::toggleFullScreen( void ) +void MainInterface::toggleFullScreen() { if( isFullScreen() ) { showNormal(); - emit askUpdate(); // Needed if video was launched after the F11 emit fullscreenInterfaceToggled( false ); } else @@ -1444,59 +1104,6 @@ void MainInterface::toggleFullScreen( void ) showFullScreen(); emit fullscreenInterfaceToggled( true ); } - -} - -//moc doesn't know about #ifdef, so we have to build this method for every platform -void MainInterface::changeThumbbarButtons( int i_status) -{ -#ifdef WIN32 - // Define an array of three buttons. These buttons provide images through an - // image list and also provide tooltips. - DWORD dwMask = THB_BITMAP | THB_FLAGS; - - THUMBBUTTON thbButtons[3]; - //prev - thbButtons[0].dwMask = dwMask; - thbButtons[0].iId = 0; - thbButtons[0].iBitmap = 0; - - //play/pause - thbButtons[1].dwMask = dwMask; - thbButtons[1].iId = 1; - - //next - thbButtons[2].dwMask = dwMask; - thbButtons[2].iId = 2; - thbButtons[2].iBitmap = 3; - - switch( i_status ) - { - case PLAYING_S: - { - thbButtons[0].dwFlags = THBF_ENABLED; - thbButtons[1].dwFlags = THBF_ENABLED; - thbButtons[2].dwFlags = THBF_ENABLED; - thbButtons[1].iBitmap = 1; - break; - } - case PAUSE_S: - { - thbButtons[0].dwFlags = THBF_ENABLED; - thbButtons[1].dwFlags = THBF_ENABLED; - thbButtons[2].dwFlags = THBF_ENABLED; - thbButtons[1].iBitmap = 2; - break; - } - default: - return; - } - HRESULT hr = p_taskbl->vt->ThumbBarUpdateButtons(p_taskbl, this->winId(), 3, thbButtons); - if(S_OK != hr) - msg_Err( p_intf, "ThumbBarUpdateButtons failed with error %08x", hr ); -#else - ; -#endif } /*****************************************************************************