[vlc-devel] commit: Qt: undock the playlist (Jean-Baptiste Kempf )

git version control git at videolan.org
Sun Feb 28 23:22:29 CET 2010


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Wed Feb 24 16:19:53 2010 +0100| [84a974e668238b979e389eddf656ca32f51e3de4] | committer: Jean-Baptiste Kempf 

Qt: undock the playlist

Ref #3332

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=84a974e668238b979e389eddf656ca32f51e3de4
---

 modules/gui/qt4/main_interface.cpp |   79 ++++++++++++++++++++++--------------
 modules/gui/qt4/main_interface.hpp |   15 ++-----
 modules/gui/qt4/menus.cpp          |    6 +++
 3 files changed, 58 insertions(+), 42 deletions(-)

diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index 7b7d293..2617b72 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * main_interface.cpp : Main interface
  ****************************************************************************
- * Copyright (C) 2006-2009 the VideoLAN team
+ * Copyright (C) 2006-2010 VideoLAN and AUTHORS
  * $Id$
  *
  * Authors: Clément Stenac <zorglub at videolan.org>
@@ -72,7 +72,8 @@
 #include <vlc_vout_window.h>
 #include <vlc_vout_display.h>
 
-// #define DEBUG_INTF
+//#define DEBUG_INTF
+
 /* Callback prototypes */
 static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
                         vlc_value_t old_val, vlc_value_t new_val, void *param );
@@ -130,6 +131,10 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     settings = getSettings();
     settings->beginGroup( "MainWindow" );
 
+    /* */
+    b_plDocked = getSettings()->value( "pl-dock-status", true ).toBool();
+
+
     /**
      * Retrieve saved sizes for main window
      *   mainBasedSize = based window size for normal mode
@@ -305,7 +310,7 @@ MainInterface::~MainInterface()
     /* Save playlist state */
     if( playlistWidget )
     {
-        if( !isDocked() )
+        if( !isPlDocked() )
             QVLCTools::saveWidgetPosition( p_intf, "Playlist", playlistWidget );
 
         delete playlistWidget;
@@ -330,7 +335,7 @@ MainInterface::~MainInterface()
 
     /* Save states */
     settings->beginGroup( "MainWindow" );
-    settings->setValue( "pl-dock-status", (int)i_pl_dock );
+    settings->setValue( "pl-dock-status", b_plDocked );
     settings->setValue( "playlist-visible", (int)playlistVisible );
     settings->setValue( "adv-controls",
                         getControlsVisibilityStatus() & CONTROLS_ADVANCED );
@@ -765,7 +770,7 @@ void MainInterface::doComponentsUpdate()
     /* Here we resize to sizeHint() and not adjustsize because we want
        the videoWidget to be exactly the correctSize */
 
-#ifndef NDEBUG
+#ifdef DEBUG_INTF
     debug();
 #endif
     /* This is WRONG, but I believe there is a Qt bug here */
@@ -777,7 +782,7 @@ void MainInterface::doComponentsUpdate()
 
 void MainInterface::debug()
 {
-#ifndef NDEBUG
+#ifdef DEBUG_INTF
     msg_Dbg( p_intf, "Stack Size: %i - %i", stackCentralW->size().height(), size().width() );
     if( videoEmbeddedFlag )
         msg_Dbg( p_intf, "Stack Size: %i - %i",
@@ -994,15 +999,11 @@ int MainInterface::controlVideo( int i_query, va_list args )
 /**
  * Toggle the playlist widget or dialog
  **/
-void MainInterface::createPlaylist( bool b_show )
+void MainInterface::createPlaylist()
 {
     playlistWidget = new PlaylistWidget( p_intf, this );
 
-    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 )
+    if( !b_plDocked )
     {
         playlistWidget->setWindowFlags( Qt::Window );
 
@@ -1014,35 +1015,28 @@ void MainInterface::createPlaylist( bool b_show )
     else
     {
 #ifdef DEBUG_INTF
-        msg_Warn( p_intf, "Here %i", stackCentralW->currentIndex() );
+        msg_Warn( p_intf, "Here 1 %i", stackCentralW->currentIndex() );
 #endif
         stackCentralW->insertWidget( PLAYL_TAB, playlistWidget );
 #ifdef DEBUG_INTF
-        msg_Warn( p_intf, "Here %i", stackCentralW->currentIndex() );
+        msg_Warn( p_intf, "Here 2 %i", stackCentralW->currentIndex() );
 #endif
     }
-
-    if( b_show )
-    {
-        playlistVisible = true;
-        stackCentralW->show();
-    }
 }
 
 void MainInterface::togglePlaylist()
 {
 #ifdef DEBUG_INTF
-    msg_Warn( p_intf, "Here toggling %i %i", stackCentralW->currentIndex(), stackCentralOldState );
+    msg_Warn( p_intf, "Here toggling 1 %i %i", stackCentralW->currentIndex(), stackCentralOldState );
 #endif
     if( !playlistWidget )
-    {
-        createPlaylist( true );
-    }
+        createPlaylist();
+
 #ifdef DEBUG_INTF
-    msg_Warn( p_intf, "Here toggling %i %i", stackCentralW->currentIndex(), stackCentralOldState );
+    msg_Warn( p_intf, "Here toggling 2 %i %i", stackCentralW->currentIndex(), stackCentralOldState );
 
 #endif
-    if( i_pl_dock != PL_UNDOCKED )
+    if( b_plDocked )
     {
         /* Playlist not visible */
         if( stackCentralW->currentIndex() != PLAYL_TAB )
@@ -1057,17 +1051,40 @@ void MainInterface::togglePlaylist()
         playlistVisible = ( stackCentralW->currentIndex() == PLAYL_TAB );
         //doComponentsUpdate(); //resize( sizeHint() );
     }
+    else
+    {
+        playlistWidget->setWindowFlags( Qt::Window );
+        playlistVisible = !playlistVisible;
+        playlistWidget->setVisible( playlistVisible );
+    }
 }
 
-/* Function called from the menu to undock the playlist */
-void MainInterface::undockPlaylist()
+void MainInterface::dockPlaylist( bool p_docked )
 {
-//    dockPL->setFloating( true );
-//    adjustSize();
+    b_plDocked = p_docked;
+    if( !playlistWidget ) return; /* Playlist wasn't created yet */
+    if( !p_docked )
+    {
+        stackCentralW->removeWidget( playlistWidget );
+        playlistWidget->setWindowFlags( Qt::Window );
+        QVLCTools::restoreWidgetPosition( p_intf, "Playlist",
+                playlistWidget, QSize( 600, 300 ) );
+        playlistWidget->show();
+        stackCentralW->hide();
+        doComponentsUpdate();
+    }
+    else
+    {
+        stackCentralW->insertWidget( PLAYL_TAB, playlistWidget );
+        stackCentralW->setCurrentWidget( playlistWidget );
+        stackCentralW->show();
+    }
 }
 
-void MainInterface::dockPlaylist( pl_dock_e i_pos )
+/* Function called from the menu to undock the playlist */
+void MainInterface::undockPlaylist()
 {
+    dockPlaylist( false );
 }
 
 void MainInterface::toggleMinimalView( bool b_switch )
diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp
index bf5a09b..7fe5caa 100644
--- a/modules/gui/qt4/main_interface.hpp
+++ b/modules/gui/qt4/main_interface.hpp
@@ -62,13 +62,6 @@ enum {
 };
 
 
-typedef enum pl_dock_e {
-    PL_UNDOCKED,
-    PL_BOTTOM,
-    PL_RIGHT,
-    PL_LEFT
-} pl_dock_e;
-
 class MainInterface : public QVLCMW
 {
     Q_OBJECT;
@@ -91,6 +84,7 @@ public:
     QMenu *getSysTrayMenu() { return systrayMenu; }
 #endif
     int getControlsVisibilityStatus();
+    bool isPlDocked() { return ( b_plDocked != false ); }
 
     /* Sizehint() */
     virtual QSize sizeHint() const;
@@ -113,12 +107,12 @@ protected:
 private:
     void createMainWidget( QSettings* );
     void createStatusBar();
+    void createPlaylist();
 
     /* Systray */
     void handleSystray();
     void createSystray();
     void initSystray();
-    bool isDocked() { return ( i_pl_dock != PL_UNDOCKED ); }
 
     void showTab( int i_tab );
     void restoreStackOldWidget();
@@ -167,7 +161,7 @@ private:
     QSize                mainBasedSize;       ///< based Wnd (normal mode only)
     QSize                mainVideoSize;       ///< Wnd with video (all modes)
     int                  i_visualmode;        ///< Visual Mode
-    pl_dock_e            i_pl_dock;
+    bool                 b_plDocked;
     int                  i_bg_height;         ///< Save height of bgWidget
     bool                 b_hideAfterCreation;
 
@@ -177,11 +171,10 @@ private:
     UINT taskbar_wmsg;
     void createTaskBarButtons();
 #endif
-    void createPlaylist( bool );
 
 public slots:
     void undockPlaylist();
-    void dockPlaylist( pl_dock_e i_pos = PL_BOTTOM );
+    void dockPlaylist( bool b_docked = true );
     void toggleMinimalView( bool );
     void togglePlaylist();
 #ifndef HAVE_MAEMO
diff --git a/modules/gui/qt4/menus.cpp b/modules/gui/qt4/menus.cpp
index e41b42e..648e321 100644
--- a/modules/gui/qt4/menus.cpp
+++ b/modules/gui/qt4/menus.cpp
@@ -474,6 +474,12 @@ QMenu *QVLCMenu::ViewMenu( intf_thread_t *p_intf,
     if( mi->getControlsVisibilityStatus() & CONTROLS_ADVANCED )
         action->setChecked( true );
 
+    /* Docked Playlist */
+    action = menu->addAction( qtr( "Docked Playlist" ) );
+    action->setCheckable( true );
+    action->setChecked( mi->isPlDocked() );
+    CONNECT( action, triggered( bool ), mi, dockPlaylist( bool ) );
+
     if( with_intf )
     // I don't want to manage consistency between menus, so no popup-menu
     {




More information about the vlc-devel mailing list