]> git.sesse.net Git - vlc/commitdiff
Implement dock/undock for the playlist
authorClément Stenac <zorglub@videolan.org>
Fri, 22 Sep 2006 16:10:16 +0000 (16:10 +0000)
committerClément Stenac <zorglub@videolan.org>
Fri, 22 Sep 2006 16:10:16 +0000 (16:10 +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
modules/gui/qt4/qt4.hpp

index 5815ebffedac18dd8cb4cf93153f60e425633194..e25cf263c40803aa4c0a557b3f30938f82924696 100644 (file)
@@ -182,6 +182,8 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) : QFrame(NULL),
 
     QPushButton *undockButton = new QPushButton( "UN", this );
     undockButton->setMaximumWidth( 25 );
+    BUTTONACT( undockButton, undock() );
+
     undockButton->setToolTip( qtr( "Undock playlist for main interface" ) );
     QPushButton *sourcesButton = new QPushButton( "Sources", this );
     sourcesButton->setToolTip( qtr( "Select additional stream sources" ) );
@@ -214,6 +216,16 @@ PlaylistWidget::~PlaylistWidget()
 {
 }
 
+void PlaylistWidget::undock()
+{
+    hide();
+    THEDP->playlistDialog();
+    deleteLater();
+
+    QEvent *event = new QEvent( (QEvent::Type)(PLUndockEvent_Type) );
+    QApplication::postEvent( p_intf->p_sys->p_mi, event );
+}
+
 QSize PlaylistWidget::sizeHint() const
 {
     fprintf( stderr, "PL Size %ix%i\n", widgetSize.width(), widgetSize.height() );
index c293fa444c125307da78df87e5bed5bc1e2910e4..c084807dc99d4b0614d3035acf709b33f0771bf1 100644 (file)
@@ -106,6 +106,8 @@ private:
     PLSelector *selector;
     PLPanel *rightPanel;
     intf_thread_t *p_intf;
+private slots:
+    void undock();
 };
 
 #endif
index 8f8954505447a728591d85973c6065b5a9d84806..718842be8f67de7bae5efc3c3774f915cd0692dc 100644 (file)
  ******************************************************************************/
 
 #include "dialogs/playlist.hpp"
-#include "util/qvlcframe.hpp"
+
 #include "qt4.hpp"
+#include "main_interface.hpp"
+#include "util/qvlcframe.hpp"
 #include "components/playlist/panels.hpp"
 #include "components/playlist/selector.hpp"
+#include "dialogs_provider.hpp"
+
 #include <QHBoxLayout>
 #include <QSignalMapper>
 #include <QMenu>
 #include <QAction>
 #include <QMenuBar>
-#include "dialogs_provider.hpp"
 
 PlaylistDialog *PlaylistDialog::instance = NULL;
 
@@ -91,6 +94,7 @@ void PlaylistDialog::createPlMenuBar( QMenuBar *bar, intf_thread_t *p_intf )
     manageMenu->addMenu( subML );
     manageMenu->addAction( "Open playlist file", THEDP, SLOT( openPlaylist() ));
 
+    manageMenu->addAction( "Dock playlist", this, SLOT( dock() ) );
     bar->addMenu( manageMenu );
     bar->addMenu( SDMenu() );
 }
@@ -134,6 +138,13 @@ QMenu *PlaylistDialog::SDMenu()
     return menu;
 }
 
+void PlaylistDialog::dock()
+{
+    hide();
+    QEvent *event = new QEvent( (QEvent::Type)(PLDockEvent_Type) );
+    QApplication::postEvent( p_intf->p_sys->p_mi, event );
+}
+
 void PlaylistDialog::SDMenuAction( QString data )
 {
     char *psz_sd = data.toUtf8().data();
index 5e1adf7c81dc03494d70bc0a6d9e32db7fd4067d..13e109afd0d5ee01f5782868265cce225a201ee5 100644 (file)
@@ -39,7 +39,11 @@ public:
         if( !instance) instance = new PlaylistDialog( p_intf );
         return instance;
     }
-    static void killInstance() { if( instance ) delete instance; }
+    static void killInstance()
+    {
+        if( instance ) delete instance;
+        instance = NULL;
+    }
     virtual ~PlaylistDialog();
 private:
 
@@ -52,6 +56,7 @@ private:
     PLSelector *selector;
     PLPanel *rightPanel;
 private slots:
+    void dock();
     void SDMenuAction( QString );
 };
 
index e3ff231d2b67292169be46ab8717461ed8cdd936..67d54c3d0660d7f08fdc5f9d516798676643d2c0 100644 (file)
@@ -375,8 +375,7 @@ void MainInterface::visual()
         /* Stop any currently running visualization */
         visualSelector->hide();
     }
-    calculateInterfaceSize();
-    resize( mainSize );
+    doComponentsUpdate();
 }
 
 void MainInterface::playlist()
@@ -426,9 +425,7 @@ void MainInterface::playlist()
         }
         if( VISIBLE( bgWidget ) ) bgWidget->hide();
     }
-
-    calculateInterfaceSize();
-    resize( mainSize );
+    doComponentsUpdate();
 }
 
 /* Video widget cannot do this synchronously as it runs in another thread */
@@ -439,6 +436,23 @@ void MainInterface::doComponentsUpdate()
     resize( mainSize );
 }
 
+void MainInterface::customEvent( QEvent *event )
+{
+    if( event->type() == PLUndockEvent_Type )
+    {
+        ui.vboxLayout->removeWidget( playlistWidget );
+        playlistWidget = NULL;
+        playlistEmbeddedFlag = false;
+        doComponentsUpdate();
+    }
+    else if( event->type() == PLDockEvent_Type )
+    {
+        PlaylistDialog::killInstance();
+        playlistEmbeddedFlag = true;
+        playlist();
+    }
+}
+
 /************************************************************************
  * Other stuff
  ************************************************************************/
index 8a11a46bf9cd5f0aff6fa69981d8240f8dc4aa35..41b4cf19dde6fbd8e23df8231d3ef43e9b4ecf87 100644 (file)
@@ -34,7 +34,7 @@ class QSettings;
 class QCloseEvent;
 class QKeyEvent;
 class QLabel;
-
+class QEvent;
 class InputManager;
 class InputSlider;
 class VideoWidget;
@@ -86,6 +86,8 @@ private:
 
     QLabel              *timeLabel;
     QLabel              *nameLabel;
+
+    void customEvent( QEvent *);
 private slots:
     void setStatus( int );
     void setName( QString );
index c2ed8dbda12c66bb5601ef5c8a86f9125f268bbb..39e6d7f73668f5e1924bcfae73c18e95ecd0b38c 100644 (file)
@@ -63,6 +63,8 @@ struct intf_sys_t
 #define ON_TIMEOUT( act ) CONNECT( THEDP->fixed_timer, timeout(), this, act )
 
 static int DialogEvent_Type = QEvent::User + 1;
+static int PLUndockEvent_Type = QEvent::User + 2;
+static int PLDockEvent_Type = QEvent::User + 3;
 
 class DialogEvent : public QEvent
 {