Qt4 - threads assertions fixes, docking playlist and size of main interfaces fixes.
authorJean-Baptiste Kempf <jb@videolan.org>
Mon, 15 Oct 2007 08:47:27 +0000 (08:47 +0000)
committerJean-Baptiste Kempf <jb@videolan.org>
Mon, 15 Oct 2007 08:47:27 +0000 (08:47 +0000)
modules/gui/qt4/components/interface_widgets.cpp
modules/gui/qt4/components/interface_widgets.hpp
modules/gui/qt4/dialogs/playlist.cpp
modules/gui/qt4/dialogs/playlist.hpp
modules/gui/qt4/main_interface.cpp
modules/gui/qt4/main_interface.hpp

index 3841ee0..981e10e 100644 (file)
@@ -238,12 +238,6 @@ AdvControlsWidget::AdvControlsWidget( intf_thread_t *_p_i ) :
     advLayout->addWidget( ABButton );
     BUTTON_SET_ACT( ABButton, "AB", qtr( "A to B" ), fromAtoB() );
 
-    snapshotButton = new QPushButton( "S" );
-    snapshotButton->setMaximumSize( QSize( 26, 26 ) );
-    snapshotButton->setIconSize( QSize( 20, 20 ) );
-    advLayout->addWidget( snapshotButton );
-    BUTTON_SET_ACT( snapshotButton, "S", qtr( "Take a snapshot" ), snapshot() );
-
 //FIXME Frame by frame function
     frameButton = new QPushButton( "Fr" );
     frameButton->setMaximumSize( QSize( 26, 26 ) );
@@ -259,11 +253,11 @@ AdvControlsWidget::AdvControlsWidget( intf_thread_t *_p_i ) :
     BUTTON_SET_ACT_I( recordButton, "", record_16px.png,
             qtr( "Record" ), record() );
 
-    normalButton = new QPushButton( "N" );
-    normalButton->setMaximumSize( QSize( 26, 26 ) );
-    normalButton->setIconSize( QSize( 20, 20 ) );
-    advLayout->addWidget( normalButton );
-    BUTTON_SET_ACT( normalButton, "N", qtr( "Normal rate" ), normal() );
+    snapshotButton = new QPushButton( "S" );
+    snapshotButton->setMaximumSize( QSize( 26, 26 ) );
+    snapshotButton->setIconSize( QSize( 20, 20 ) );
+    advLayout->addWidget( snapshotButton );
+    BUTTON_SET_ACT( snapshotButton, "S", qtr( "Take a snapshot" ), snapshot() );
 
 }
 
@@ -275,7 +269,6 @@ void AdvControlsWidget::enableInput( bool enable )
 {
     ABButton->setEnabled( enable );
     recordButton->setEnabled( enable );
-    normalButton->setEnabled( enable );
 }
 void AdvControlsWidget::enableVideo( bool enable )
 {
@@ -283,11 +276,6 @@ void AdvControlsWidget::enableVideo( bool enable )
     frameButton->setEnabled( enable );
 }
 
-void AdvControlsWidget::normal()
-{
-    THEMIM->getIM()->normalRate();
-}
-
 void AdvControlsWidget::snapshot()
 {
     vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
@@ -304,18 +292,10 @@ void AdvControlsWidget::record(){}
 ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) :
                              QFrame( NULL ), p_intf( _p_i )
 {
-    //QSize size( 500, 200 );
-    //resize( size );
     controlLayout = new QGridLayout( this );
     controlLayout->setSpacing( 0 );
     setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum );
 
-#if DEBUG_COLOR
-    QPalette palette2;
-    palette2.setColor(this->backgroundRole(), Qt::magenta);
-    setPalette(palette2);
-#endif
-
     /** The main Slider **/
     slider = new InputSlider( Qt::Horizontal, NULL );
     controlLayout->addWidget( slider, 0, 1, 1, 16 );
@@ -327,27 +307,26 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) :
              THEMIM->getIM(), sliderUpdate( float ) );
 
     /** Slower and faster Buttons **/
-    slowerButton = new QPushButton( "S" );
+    slowerButton = new QPushButton;
     slowerButton->setFlat( true );
+    slowerButton->setMaximumSize( QSize( 26, 20 ) );
 
-    BUTTON_SET_ACT( slowerButton, "S", qtr( "Slower" ), slower() );
+    BUTTON_SET_ACT( slowerButton, "-", qtr( "Slower" ), slower() );
     controlLayout->addWidget( slowerButton, 0, 0 );
-    slowerButton->setMaximumSize( QSize( 26, 20 ) );
 
-    fasterButton = new QPushButton( "F" );
+    fasterButton = new QPushButton;
     fasterButton->setFlat( true );
+    fasterButton->setMaximumSize( QSize( 26, 20 ) );
 
-    BUTTON_SET_ACT( fasterButton, "F", qtr( "Faster" ), faster() );
+    BUTTON_SET_ACT( fasterButton, "+", qtr( "Faster" ), faster() );
     controlLayout->addWidget( fasterButton, 0, 17 );
-    fasterButton->setMaximumSize( QSize( 26, 20 ) );
 
     /* advanced Controls handling */
     b_advancedVisible = b_advControls;
 
     advControls = new AdvControlsWidget( p_intf );
-    controlLayout->addWidget( advControls, 1, 3, 2, 5, Qt::AlignBottom );
+    controlLayout->addWidget( advControls, 1, 3, 2, 4, Qt::AlignBottom );
     if( !b_advancedVisible ) advControls->hide();
-    // FIXME THIS should be removed.    need_components_update = true;
 
     /** Disc and Menus handling */
     discFrame = new QFrame( this );
@@ -389,6 +368,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) :
 
     /** TODO
      * Telextext QFrame
+     * Merge with upper menu in a StackLayout
      **/
 
     /** Play Buttons **/
@@ -481,7 +461,6 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) :
 
     /** TODO:
      * Change this slider to use a nice Amarok-like one
-     * Add a Context menu to change to the most useful %
      * **/
     /** FIXME
      *  THis percerntage thing has to be handled correctly
@@ -587,7 +566,7 @@ void ControlsWidget::updateOnTimer()
         volumeSlider->setValue( i_volume );
         b_my_volume = false;
     }
+
     /* Activate the interface buttons according to the presence of the input */
     enableInput( THEMIM->getIM()->hasInput() );
     //enableVideo( THEMIM->getIM()->hasVideo() );
@@ -744,21 +723,16 @@ PlaylistWidget::~PlaylistWidget()
 {
 }
 
-QSize PlaylistWidget::sizeHint() const
-{
-    return widgetSize;
-}
-
 /**********************************************************************
  * Speed control widget
  **********************************************************************/
 SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) :
                              QFrame( NULL ), p_intf( _p_i )
-{    
+{
     QSizePolicy sizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed );
     sizePolicy.setHorizontalStretch( 0 );
     sizePolicy.setVerticalStretch( 0 );
+
     speedSlider = new QSlider;
     speedSlider->setSizePolicy( sizePolicy );
     speedSlider->setMaximumSize( QSize( 80, 200 ) );
@@ -769,16 +743,16 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) :
     speedSlider->setSingleStep( 10 );
     speedSlider->setPageStep( 20 );
     speedSlider->setTickInterval( 20 );
+
     CONNECT( speedSlider, valueChanged( int ), this, updateRate( int ) );
-    
+
     normalSpeedButton = new QPushButton( "N" );
     normalSpeedButton->setMaximumSize( QSize( 26, 20 ) );
     normalSpeedButton->setFlat( true );
     normalSpeedButton->setToolTip( qtr( "Revert to normal play speed" ) );
+
     CONNECT( normalSpeedButton, clicked(), this, resetRate() );
+
     QVBoxLayout *speedControlLayout = new QVBoxLayout;
     speedControlLayout->addWidget(speedSlider);
     speedControlLayout->addWidget(normalSpeedButton);
@@ -800,12 +774,12 @@ void SpeedControlWidget::updateControls( int rate )
         //We don't want to change anything if the user is using the slider
         return;
     }
-    
+
     int sliderValue;
     double speed = INPUT_RATE_DEFAULT / (double)rate;
-    
+
     if( rate >= INPUT_RATE_DEFAULT )
-    {        
+    {
         if( speed < RATE_SLIDER_MINIMUM )
         {
             sliderValue = speedSlider->minimum();
@@ -828,7 +802,7 @@ void SpeedControlWidget::updateControls( int rate )
                                         / ( RATE_SLIDER_MAXIMUM - 1.0 ) );
         }
     }
-    
+
     //Block signals to avoid feedback loop
     speedSlider->blockSignals( true );
     speedSlider->setValue( sliderValue );
@@ -838,7 +812,7 @@ void SpeedControlWidget::updateControls( int rate )
 void SpeedControlWidget::updateRate( int sliderValue )
 {
     int rate;
-    
+
     if( sliderValue < 0.0 )
     {
         rate = INPUT_RATE_DEFAULT* RATE_SLIDER_LENGTH /
@@ -850,10 +824,10 @@ void SpeedControlWidget::updateRate( int sliderValue )
                 ( sliderValue * ( RATE_SLIDER_MAXIMUM - 1.0 ) + RATE_SLIDER_LENGTH );
     }
 
-    THEMIM->getIM()->setRate(rate);    
+    THEMIM->getIM()->setRate(rate);
 }
 
 void SpeedControlWidget::resetRate()
 {
-    THEMIM->getIM()->setRate(INPUT_RATE_DEFAULT);    
+    THEMIM->getIM()->setRate(INPUT_RATE_DEFAULT);
 }
index 85dc19d..a33b207 100644 (file)
@@ -91,6 +91,7 @@ private:
     intf_thread_t *p_intf;
 public slots:
     void setArt( QString );
+    void toggle(){ TOGGLEV( this ); }
 };
 
 class VisualSelector : public QFrame
@@ -107,6 +108,7 @@ private slots:
     void next();
 };
 
+/* Advanced Button Bar */
 class QPushButton;
 class AdvControlsWidget : public QFrame
 {
@@ -114,22 +116,23 @@ class AdvControlsWidget : public QFrame
 public:
     AdvControlsWidget( intf_thread_t *);
     virtual ~AdvControlsWidget();
+
     void enableInput( bool );
     void enableVideo( bool );
+
 private:
     intf_thread_t *p_intf;
-    QPushButton *normalButton, *recordButton, *ABButton;
+    QPushButton *recordButton, *ABButton;
     QPushButton *snapshotButton, *frameButton;
+
 private slots:
-    void normal();
     void snapshot();
     void frame();
     void fromAtoB();
     void record();
 };
 
-
-
+/* Button Bar */
 class InputSlider;
 class QSlider;
 class QGridLayout;
@@ -234,7 +237,6 @@ class PlaylistWidget : public QSplitter
 public:
     PlaylistWidget( intf_thread_t *_p_i ) ;
     virtual ~PlaylistWidget();
-    QSize widgetSize;
     virtual QSize sizeHint() const;
 private:
     PLSelector *selector;
index 6615950..9b8b85e 100644 (file)
@@ -44,8 +44,6 @@ PlaylistDialog::PlaylistDialog( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     setWindowTitle( qtr( "Playlist" ) );
     setWindowOpacity( config_GetFloat( p_intf, "qt-opacity" ) );
 
-    createPlMenuBar( menuBar(), p_intf );
-
     QHBoxLayout *l = new QHBoxLayout( centralWidget() );
     PlaylistWidget *plw = new PlaylistWidget( p_intf );
     l->addWidget( plw );
@@ -58,27 +56,6 @@ PlaylistDialog::~PlaylistDialog()
     writeSettings( "playlist" );
 }
 
-void PlaylistDialog::createPlMenuBar( QMenuBar *bar, intf_thread_t *p_intf )
-{
-    QMenu *manageMenu = new QMenu();
-    manageMenu->setTitle( qtr("Manage") );
-    manageMenu->addAction( qtr("Open playlist file"), THEDP,
-            SLOT( openPlaylist() ), qtr( "Ctrl+X") );
-    manageMenu->addSeparator();
-    manageMenu->addAction( qtr("Dock playlist"), this, SLOT( dock() ),
-            qtr( "Ctrl+U" ) );
-    bar->addMenu( manageMenu );
-    bar->addMenu( QVLCMenu::SDMenu( p_intf ) );
-}
-
-void PlaylistDialog::dock()
-{
-    hide();
-    QEvent *event = new QEvent( (QEvent::Type)(PLDockEvent_Type) );
-    QApplication::postEvent( p_intf->p_sys->p_mi, event );
-}
-
-
 void PlaylistDialog::dropEvent(QDropEvent *event)
 {
      const QMimeData *mimeData = event->mimeData();
@@ -104,4 +81,3 @@ void PlaylistDialog::dragLeaveEvent(QDragLeaveEvent *event)
      event->accept();
 }
 
-
index 2f0724e..6c2c926 100644 (file)
@@ -48,8 +48,6 @@ public:
     }
     virtual ~PlaylistDialog();
 private:
-
-    void createPlMenuBar( QMenuBar *bar, intf_thread_t *p_intf );
     PlaylistDialog( intf_thread_t * );
 
     void dropEvent( QDropEvent *);
@@ -58,11 +56,6 @@ private:
     void dragLeaveEvent( QDragLeaveEvent * );
 
     static PlaylistDialog *instance;
-
-    PLSelector *selector;
-    PLPanel *rightPanel;
-private slots:
-    void dock();
 };
 
 
index 71157fd..c7fe262 100644 (file)
@@ -258,6 +258,9 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
         var_AddCallback( p_playlist, "intf-show", IntfShowCB, p_intf );
         vlc_object_release( p_playlist );
     }
+
+    CONNECT( this, askReleaseVideo( void * ), this, releaseVideoSlot( void * ) );
+
     // DEBUG FIXME
     hide();
 }
@@ -355,6 +358,7 @@ void MainInterface::handleMainUi( QSettings *settings )
         bgWidget->resize( bgWidget->widgetSize );
         bgWidget->updateGeometry();
         mainLayout->insertWidget( 0, bgWidget );
+        CONNECT( this, askBgWidgetToToggle(), bgWidget, toggle() );
     }
 
     if( videoEmbeddedFlag )
@@ -367,8 +371,6 @@ void MainInterface::handleMainUi( QSettings *settings )
         p_intf->pf_request_window  = ::DoRequest;
         p_intf->pf_release_window  = ::DoRelease;
         p_intf->pf_control_window  = ::DoControl;
-
-        CONNECT( this, askVideoToHide(), videoWidget, hide() );
     }
 
     /* Finish the sizing */
@@ -388,31 +390,26 @@ void MainInterface::calculateInterfaceSize()
     int width = 0, height = 0;
     if( VISIBLE( bgWidget ) )
     {
-        width = bgWidget->widgetSize.width();
+        width  = bgWidget->widgetSize.width();
         height = bgWidget->widgetSize.height();
-//        assert( !(playlistWidget));// && playlistWidget->isVisible() ) );
-    }
-    else if( VISIBLE( playlistWidget ) )
-    {
-        width = playlistWidget->widgetSize.width();
-        height = playlistWidget->widgetSize.height();
     }
     else if( videoIsActive )
     {
-        width  videoWidget->widgetSize.width() ;
+        width  = videoWidget->widgetSize.width() ;
         height = videoWidget->widgetSize.height();
     }
     else
     {
-        width = PREF_W - addSize.width();
+        width  = PREF_W - addSize.width();
         height = PREF_H - addSize.height();
     }
+    if( !dockPL->isFloating() )
+    {
+        width  += dockPL->widget()->width();
+        height += dockPL->widget()->height();
+    }
     if( VISIBLE( visualSelector ) )
         height += visualSelector->height();
-/*    if( VISIBLE( advControls) )
-    {
-        height += advControls->sizeHint().height();
-    }*/
     mainSize = QSize( width + addSize.width(), height + addSize.height() );
 }
 
@@ -428,18 +425,20 @@ void MainInterface::resizeEvent( QResizeEvent *e )
     }
     if( VISIBLE( playlistWidget ) )
     {
-        SET_WH( playlistWidget , e->size().width() - addSize.width(),
-                                 e->size().height() - addSize.height() );
+        //FIXME
+//        SET_WH( playlistWidget , e->size().width() - addSize.width(),
+              //                   e->size().height() - addSize.height() );
         playlistWidget->updateGeometry();
     }
 }
 
 /****************************************************************************
- * Small right-click menus
+ * Small right-click menu for rate control
  ****************************************************************************/
 void MainInterface::showSpeedMenu( QPoint pos )
 {
-    speedControlMenu->exec( QCursor::pos() - pos + QPoint( 0, speedLabel->height() ) );
+    speedControlMenu->exec( QCursor::pos() - pos
+            + QPoint( 0, speedLabel->height() ) );
 }
 
 /****************************************************************************
@@ -467,22 +466,18 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
                                    int *pi_y, unsigned int *pi_width,
                                    unsigned int *pi_height )
 {
-    msg_Dbg( p_intf, "I was here" );
     void *ret = videoWidget->request( p_nvout,pi_x, pi_y, pi_width, pi_height );
     if( ret )
     {
         videoIsActive = true;
-        if( VISIBLE( playlistWidget ) )
-        {
-            embeddedPlaylistWasActive = true;
-//            playlistWidget->hide();
-        }
+
         bool bgWasVisible = false;
         if( VISIBLE( bgWidget) )
         {
             bgWasVisible = true;
-            bgWidget->hide();
+            emit askBgWidgetToToggle();
         }
+
         if( THEMIM->getIM()->hasVideo() || !bgWasVisible )
         {
             videoWidget->widgetSize = QSize( *pi_width, *pi_height );
@@ -501,9 +496,14 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
 }
 
 void MainInterface::releaseVideo( void *p_win )
+{
+    emit askReleaseVideo( p_win );
+}
+
+void MainInterface::releaseVideoSlot( void *p_win )
 {
     videoWidget->release( p_win );
-    emit askVideoToHide();
+    videoWidget->hide();
 
     if( bgWidget )
         bgWidget->show();
@@ -515,7 +515,6 @@ void MainInterface::releaseVideo( void *p_win )
 int MainInterface::controlVideo( void *p_window, int i_query, va_list args )
 {
     int i_ret = VLC_EGENERIC;
-    msg_Dbg( p_intf, "I was there" );
     switch( i_query )
     {
         case VOUT_GET_SIZE:
@@ -567,8 +566,9 @@ void MainInterface::togglePlaylist()
         if(bgWidget)
             CONNECT( playlistWidget, artSet( QString ), bgWidget, setArt(QString) );
 
-        playlistWidget->widgetSize = settings->value( "playlistSize",
-                                               QSize( 650, 310 ) ).toSize();
+        //FIXME
+/*        playlistWidget->widgetSize = settings->value( "playlistSize",
+                                               QSize( 650, 310 ) ).toSize();*/
         /* Add it to the parent DockWidget */
         dockPL->setWidget( playlistWidget );
 
@@ -590,80 +590,13 @@ void MainInterface::togglePlaylist()
     /* toggle the display */
        TOGGLEV( dockPL );
     }
-
-#if 0  // Toggle the playlist dialog if not embedded and return
-    if( !playlistEmbeddedFlag )
-    {
-        if( playlistWidget )
-        {
-            /// \todo Destroy it
-        }
-        return;
-    }
-
-    // Create the playlist Widget and destroy the existing dialog
-    if( !playlistWidget )
-    {
-        PlaylistDialog::killInstance();
-        mainLayout->insertWidget( 0, playlistWidget );
-        playlistWidget->hide();
-    }
-
-    // And toggle visibility
-    if( VISIBLE( playlistWidget ) )
-    {
-        playlistWidget->hide();
-        if( bgWidget ) bgWidget->show();
-        if( videoIsActive )
-        {
-            videoWidget->widgetSize = savedVideoSize;
-            videoWidget->resize( videoWidget->widgetSize );
-            videoWidget->updateGeometry();
-            if( bgWidget ) bgWidget->hide();
-        }
-    }
-    else
-    {
-        playlistWidget->show();
-        if( videoIsActive )
-        {
-            savedVideoSize = videoWidget->widgetSize;
-            videoWidget->widgetSize.setHeight( 0 );
-            videoWidget->resize( videoWidget->widgetSize );
-            videoWidget->updateGeometry();
-        }
-        if( VISIBLE( bgWidget ) ) bgWidget->hide();
-    }
-#endif
     doComponentsUpdate();
 }
 
 void MainInterface::undockPlaylist()
 {
     dockPL->setFloating( true );
-#if 0
-    if( playlistWidget )
-    {
-        playlistWidget->hide();
-        playlistWidget->deleteLater();
-        mainLayout->removeWidget( playlistWidget );
-        playlistWidget = NULL;
-        playlistEmbeddedFlag = false;
-
-        menuBar()->clear();
-        QVLCMenu::createMenuBar( this, p_intf, false, visualSelectorEnabled);
-
-        if( videoIsActive )
-        {
-            videoWidget->widgetSize = savedVideoSize;
-            videoWidget->resize( videoWidget->widgetSize );
-            videoWidget->updateGeometry();
-        }
-
-        doComponentsUpdate();
-        THEDP->playlistDialog();
-    }
-#endif
+    doComponentsUpdate();
 }
 
 #if 0
index 103e383..7f84f5e 100644 (file)
@@ -78,7 +78,7 @@ protected:
     void dragMoveEvent( QDragMoveEvent * );
     void dragLeaveEvent( QDragLeaveEvent * );
     void closeEvent( QCloseEvent *);
+
     friend class VolumeClickHandler;
 private:
     QSettings           *settings;
@@ -135,6 +135,10 @@ public slots:
     void togglePlaylist();
     void toggleUpdateSystrayMenu();
     void toggleAdvanced();
+
+    /* Manage the Video Functions from the vout threads */
+    void releaseVideoSlot( void * );
+
 private slots:
     void debug();
     void updateOnTimer();
@@ -153,7 +157,9 @@ private slots:
     void updateSystrayTooltipStatus( int );
     void showSpeedMenu( QPoint );
 signals:
-    void askVideoToHide();
+    void askReleaseVideo( void * );
+    void askVideoToToggle();
+    void askBgWidgetToToggle();
 };
 
 #endif