]> git.sesse.net Git - vlc/commitdiff
Qt: move to Stack Widget, part 2
authorJean-Baptiste Kempf <jb@videolan.org>
Tue, 13 Oct 2009 13:19:29 +0000 (15:19 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Fri, 4 Dec 2009 06:21:37 +0000 (07:21 +0100)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/components/controller.cpp
modules/gui/qt4/components/interface_widgets.cpp
modules/gui/qt4/main_interface.cpp
modules/gui/qt4/main_interface.hpp

index 8cdebf5fb7afdc03bd5e04e09c4e52dc1a61ebb4..8fd2ffd103f69ead56a84b4c66a562a04ebdecbd 100644 (file)
@@ -584,8 +584,6 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i,
                                 QWidget *_parent ) :
                                 AbstractController( _p_i, _parent )
 {
-    setSizePolicy( QSizePolicy::Preferred , QSizePolicy::Maximum );
-
     /* advanced Controls handling */
     b_advancedVisible = b_advControls;
 
index f6196240a8915c6169d0018710536940dc42afb0..2909f41c687257c73bd81b959b650bfbf96c47fa 100644 (file)
@@ -301,10 +301,10 @@ BackgroundWidget::BackgroundWidget( intf_thread_t *_p_i )
     /* A cone in the middle */
     label = new QLabel;
     label->setMargin( 5 );
-    label->setMaximumHeight( MAX_BG_SIZE );
+/*    label->setMaximumHeight( MAX_BG_SIZE );
     label->setMaximumWidth( MAX_BG_SIZE );
     label->setMinimumHeight( MIN_BG_SIZE );
-    label->setMinimumWidth( MIN_BG_SIZE );
+    label->setMinimumWidth( MIN_BG_SIZE );*/
     label->setAlignment( Qt::AlignCenter );
     if( QDate::currentDate().dayOfYear() >= 354 )
         label->setPixmap( QPixmap( ":/logo/vlc128-christmas.png" ) );
@@ -549,10 +549,10 @@ CoverArtLabel::CoverArtLabel( QWidget *parent, intf_thread_t *_p_i )
     setContextMenuPolicy( Qt::ActionsContextMenu );
     CONNECT( this, updateRequested(), this, askForUpdate() );
 
-    setMinimumHeight( 128 );
+    /*setMinimumHeight( 128 );
     setMinimumWidth( 128 );
     setMaximumHeight( 128 );
-    setMaximumWidth( 128 );
+    setMaximumWidth( 128 );*/
     setScaledContents( false );
     setAlignment( Qt::AlignCenter );
 
index 64318891322de2271d021e99dedaf74e7d8d2443..badfbe24a9f0cb2491b37082b9ef6473364d2c0c 100644 (file)
@@ -275,11 +275,15 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     CONNECT( this, customContextMenuRequested( const QPoint& ),
              this, popupMenu( const QPoint& ) );
 
+    debug();
+
     /* Final sizing and showing */
-    setMinimumWidth( __MAX( controls->sizeHint().width(),
-                            menuBar()->sizeHint().width() ) );
     setVisible( !b_shouldHide );
+    //setMinimumSize( QSize( 0, 0 ) );
+//    setMinimumWidth( __MAX( controls->sizeHint().width(),
+  //                          menuBar()->sizeHint().width() ) );
 
+    debug();
     /* And switch to minimal view if needed
        Must be called after the show() */
     if( i_visualmode == QT_MINIMAL_MODE )
@@ -290,6 +294,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     updateGeometry();
     resize( sizeHint() );
 
+
 #ifdef WIN32
     createTaskBarButtons();
 #endif
@@ -300,7 +305,10 @@ MainInterface::~MainInterface()
     msg_Dbg( p_intf, "Destroying the main interface" );
 
     /* Unsure we hide the videoWidget before destroying it */
-    if( videoIsActive ) videoWidget->hide();
+    if( videoIsActive )
+    {
+        showBg();
+    }
 
     /* Save playlist state */
     if( playlistWidget )
@@ -355,7 +363,7 @@ MainInterface::~MainInterface()
  *****************************/
 void MainInterface::recreateToolbars()
 {
-    msg_Dbg( p_intf, "Recreating the toolbars" );
+    msg_Err( p_intf, "Recreating the toolbars" );
     settings->beginGroup( "MainWindow" );
     delete controls;
     delete inputC;
@@ -368,7 +376,7 @@ void MainInterface::recreateToolbars()
 
     mainLayout->insertWidget( 2, inputC );
     mainLayout->insertWidget( settings->value( "ToolbarPos", 0 ).toInt() ? 0: 3,
-                               controls );
+                              controls );
     settings->endGroup();
 }
 
@@ -381,7 +389,7 @@ void MainInterface::createMainWidget( QSettings *settings )
 
     /* Margins, spacing */
     main->setContentsMargins( 0, 0, 0, 0 );
-    main->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
+//    main->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
     mainLayout->setSpacing( 0 );
     mainLayout->setMargin( 0 );
 
@@ -393,26 +401,27 @@ void MainInterface::createMainWidget( QSettings *settings )
     visualSelector->hide();
     #endif
 
-    QStackedWidget *stackCentralW = new QStackedWidget( main );
+    stackCentralW = new QStackedWidget( main );
     /* Bg Cone */
     bgWidget = new BackgroundWidget( p_intf );
     bgWidget->resize(
             settings->value( "backgroundSize", QSize( 300, 200 ) ).toSize() );
     bgWidget->updateGeometry();
+    stackCentralW->insertWidget( BACKG_TAB, bgWidget );
 
     if( i_visualmode != QT_ALWAYS_VIDEO_MODE &&
         i_visualmode != QT_MINIMAL_MODE )
     {
-        bgWidget->hide();
+        stackCentralW->hide();
     }
-    stackCentralW->addWidget( bgWidget );
 
     /* And video Outputs */
     if( videoEmbeddedFlag )
     {
         videoWidget = new VideoWidget( p_intf );
-        stackCentralW->addWidget( videoWidget );
+        stackCentralW->insertWidget( VIDEO_TAB, videoWidget );
     }
+    mainLayout->insertWidget( 1, stackCentralW, 100 );
 
     /* Create the CONTROLS Widget */
     controls = new ControlsWidget( p_intf,
@@ -423,8 +432,6 @@ void MainInterface::createMainWidget( QSettings *settings )
              this, doComponentsUpdate() );
     inputC = new InputControlsWidget( p_intf, this );
 
-    mainLayout->insertWidget( 1, stackCentralW, 10 );
-
     //mainLayout->setRowStretch( 1, 10 );
     mainLayout->insertWidget( 2, inputC );
     mainLayout->insertWidget( settings->value( "ToolbarPos", 0 ).toInt() ? 0: 3,
@@ -697,6 +704,7 @@ int MainInterface::privacyDialog( QList<ConfigControl *> *controls )
 
 QSize MainInterface::sizeHint() const
 {
+#if 0
     if( b_keep_size )
     {
         if( i_visualmode == QT_ALWAYS_VIDEO_MODE ||
@@ -714,8 +722,11 @@ QSize MainInterface::sizeHint() const
                 return mainBasedSize;
         }
     }
+#endif
+
+    int nwidth  = __MAX( controls->sizeHint().width(),
+                         menuBar()->sizeHint().width() );
 
-    int nwidth  = controls->sizeHint().width();
     int nheight = controls->isVisible() ?
                   controls->size().height()
                   + inputC->size().height()
@@ -723,8 +734,13 @@ QSize MainInterface::sizeHint() const
                   + statusBar()->size().height()
                   : 0 ;
 
-    if( VISIBLE( bgWidget ) )
+    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
@@ -733,9 +749,10 @@ QSize MainInterface::sizeHint() const
     }
     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()  )
     {
@@ -747,6 +764,7 @@ QSize MainInterface::sizeHint() const
     return QSize( nwidth, nheight );
 }
 
+
 /* Video widget cannot do this synchronously as it runs in another thread */
 /* Well, could it, actually ? Probably dangerous ... */
 
@@ -759,26 +777,45 @@ void MainInterface::doComponentsUpdate()
 {
     if( isFullScreen() || isMaximized() ) return;
 
-    msg_Dbg( p_intf, "Updating the geometry" );
+    msg_Err( p_intf, "Updating the geometry" );
     /* Here we resize to sizeHint() and not adjustsize because we want
        the videoWidget to be exactly the correctSize */
-    resize( sizeHint() );
-    //    adjustSize()  ;
-#ifndef NDEBUG
+    //mainLayout->invalidate();
+//    setMinimumSize( 0, 0 );
+#if 1
     debug();
 #endif
+
+    resize( sizeHint() );
+    //adjustSize()  ;
 }
 
 void MainInterface::debug()
 {
-#ifndef NDEBUG
+#if 1
+    if( stackCentralW->isVisible() )
+        msg_Dbg( p_intf, "CentralStack visible" );
+    else
+        msg_Dbg( p_intf, "CentralStack inVisible" );
+    //msg_Dbg( p_intf, "Stack Size: %i - %i", stackCentralW->sizeHint().height(), stackCentralW->sizeHint().width() );
     msg_Dbg( p_intf, "size: %i - %i", size().height(), size().width() );
     msg_Dbg( p_intf, "sizeHint: %i - %i", sizeHint().height(), sizeHint().width() );
-    if( videoWidget && videoWidget->isVisible() )
+    //msg_Dbg( p_intf, "maximumsize: %i - %i", maximumSize().height(), maximumSize().width() );
+
+    msg_Dbg( p_intf, "Stack minimumsize: %i - %i", stackCentralW->minimumSize().height(), stackCentralW->minimumSize().width() );
+    msg_Dbg( p_intf, "Controls minimumsize: %i - %i", controls->minimumSize().height(), controls->minimumSize().width() );
+    msg_Dbg( p_intf, "Central minimumsize: %i - %i", centralWidget()->minimumSize().height(), centralWidget()->minimumSize().width() );
+        msg_Dbg( p_intf, "Menu minimumsize: %i - %i", menuBar()->minimumSize().height(), menuBar()->minimumSize().width() );
+            msg_Dbg( p_intf, "Input minimuSize: %i - %i", inputC->minimumSize().height(), inputC->minimumSize().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() );
+
+
+    /*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
 }
 
@@ -854,10 +891,11 @@ void MainInterface::getVideoSlot( WId *p_id, int *pi_x, int *pi_y,
     if( ret ) /* The videoWidget is available */
     {
         /* Did we have a bg ? Hide it! */
-        if( VISIBLE( bgWidget) )
+        if( stackCentralW->isVisible() &&
+            stackCentralW->currentIndex() == BACKG_TAB )
         {
+            showBg();
             bgWasVisible = true;
-            bgWidget->toggle();
         }
         else
             bgWasVisible = false;
@@ -867,11 +905,20 @@ void MainInterface::getVideoSlot( WId *p_id, int *pi_x, int *pi_y,
 
         /* Consider the video active now */
         videoIsActive = true;
+        showVideo();
+
+        stackCentralW->resize( *pi_width, *pi_height );
 
         emit askUpdate();
     }
 }
 
+inline void MainInterface::showTab( int i_tab )
+{
+    stackCentralW->setCurrentIndex( i_tab );
+    if( stackCentralW->isHidden() ) stackCentralW->show();
+}
+
 /* Asynchronous call from the WindowClose function */
 void MainInterface::releaseVideo( void )
 {
@@ -887,7 +934,11 @@ void MainInterface::releaseVideoSlot( void )
     {
         /* Reset the bg state */
         bgWasVisible = false;
-        bgWidget->show();
+        showBg();
+    }
+    else {
+        stackCentralW->hide();
+        stackCentralW->setMinimumSize(QSize(0, 0));
     }
 
     videoIsActive = false;
@@ -901,6 +952,8 @@ int MainInterface::controlVideo( int i_query, va_list args )
 {
     switch( i_query )
     {
+        /* Debug to check if VOUT_WINDOW_SET_SIZE is called? */
+        msg_Dbg( p_intf, "Control Video: %i", i_query );
     case VOUT_WINDOW_SET_SIZE:
     {
         unsigned int i_width  = va_arg( args, unsigned int );
@@ -941,9 +994,9 @@ void MainInterface::togglePlaylist()
     {
         playlistWidget = new PlaylistWidget( p_intf );
 
-        i_pl_dock = PL_UNDOCKED;
-/*        i_pl_dock = (pl_dock_e)getSettings()
-                         ->value( "pl-dock-status", PL_UNDOCKED ).toInt(); */
+        i_pl_dock = PL_BOTTOM;
+        /*i_pl_dock = (pl_dock_e)getSettings()
+                         ->value( "pl-dock-status", PL_UNDOCKED ).toInt();*/
 
         if( i_pl_dock == PL_UNDOCKED )
         {
@@ -956,7 +1009,9 @@ void MainInterface::togglePlaylist()
         }
         else
         {
-         //   mainLayout->insertWidget( 4, playlistWidget );
+            stackCentralW->insertWidget(PLAYL_TAB, playlistWidget );
+            stackCentralW->setCurrentWidget( playlistWidget );
+            stackCentralW->show();
         }
         playlistVisible = true;
 
@@ -965,21 +1020,16 @@ void MainInterface::togglePlaylist()
     else
     {
     /* toggle the visibility of the playlist */
-      //TOGGLEV( playlistWidget );
-
-      if( playlistWidget->isVisible() && !playlistWidget->isMinimized() )
-      {
-          playlistWidget->hide();
-      }
-      else
-      {
-          playlistWidget->setWindowState(
-              playlistWidget->windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
-          playlistWidget->show();
-      }
-
-      playlistVisible = !playlistVisible;
-      //doComponentsUpdate(); //resize( sizeHint() );
+        if( stackCentralW->currentIndex() != PLAYL_TAB )
+        {
+            stackCentralW->insertWidget(PLAYL_TAB, playlistWidget );
+            stackCentralW->setCurrentWidget( playlistWidget );
+            stackCentralW->show();
+        }
+        else
+            stackCentralW->setCurrentIndex( VIDEO_TAB );
+       playlistVisible = !playlistVisible;
+       //doComponentsUpdate(); //resize( sizeHint() );
     }
 }
 
@@ -999,9 +1049,10 @@ void MainInterface::toggleMinimalView( bool b_switch )
     if( i_visualmode != QT_ALWAYS_VIDEO_MODE &&
         i_visualmode != QT_MINIMAL_MODE )
     { /* NORMAL MODE then */
-        if( !videoWidget || videoWidget->isHidden() )
+        stackCentralW->show();
+        if( !videoWidget || stackCentralW->currentIndex() != VIDEO_TAB )
         {
-            bgWidget->toggle();
+            showBg();
         }
         else
         {
@@ -1010,7 +1061,7 @@ void MainInterface::toggleMinimalView( bool b_switch )
         }
     }
 
-    i_bg_height = bgWidget->height();
+    i_bg_height = stackCentralW->height();
 
     menuBar()->setVisible( !b_switch );
     controls->setVisible( !b_switch );
@@ -1359,6 +1410,7 @@ void MainInterface::handleKeyPress( QKeyEvent *e )
 
 void MainInterface::resizeEvent( QResizeEvent * event )
 {
+#if 0
     if( b_keep_size )
     {
         if( i_visualmode == QT_ALWAYS_VIDEO_MODE ||
@@ -1376,6 +1428,9 @@ void MainInterface::resizeEvent( QResizeEvent * event )
                 mainBasedSize = size();
         }
     }
+#endif
+    QVLCMW::resizeEvent( event );
+    msg_Warn( p_intf, "%i", size().height() );
 }
 
 void MainInterface::wheelEvent( QWheelEvent *e )
@@ -1498,4 +1553,3 @@ static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
     /* Show event */
      return VLC_SUCCESS;
 }
-
index 0770e898d18c8c40918c38c87f8fd5763e93231c..4a53a8909d46d60e28496e0aa511e1d841fa4d75 100644 (file)
@@ -53,12 +53,18 @@ class SpeedControlWidget;
 class QVBoxLayout;
 class QMenu;
 class QSize;
+class QStackedWidget;
 
 enum {
     CONTROLS_VISIBLE  = 0x1,
     CONTROLS_HIDDEN   = 0x2,
     CONTROLS_ADVANCED = 0x4,
 };
+enum {
+    BACKG_TAB,
+    VIDEO_TAB,
+    PLAYL_TAB,
+};
 
 typedef enum pl_dock_e {
     PL_UNDOCKED,
@@ -118,6 +124,10 @@ private:
     void initSystray();
     bool isDocked() { return ( i_pl_dock != PL_UNDOCKED ); }
 
+    void showTab( int i_tab );
+    void showVideo() { showTab( VIDEO_TAB ); }
+    void showBg() { showTab( BACKG_TAB ); }
+
     QSettings           *settings;
 #ifndef HAVE_MAEMO
     QSystemTrayIcon     *sysTray;
@@ -128,7 +138,7 @@ private:
     ControlsWidget      *controls;
     InputControlsWidget *inputC;
     FullscreenControllerWidget *fullscreenControls;
-
+    QStackedWidget      *stackCentralW;
     /* Video */
     VideoWidget         *videoWidget;