From: Clément Stenac Date: Fri, 22 Sep 2006 16:10:16 +0000 (+0000) Subject: Implement dock/undock for the playlist X-Git-Tag: 0.9.0-test0~10183 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=959a473d3686f399c54dfe2e1157bdf9662319dc;p=vlc Implement dock/undock for the playlist --- diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 5815ebffed..e25cf263c4 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -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() ); diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp index c293fa444c..c084807dc9 100644 --- a/modules/gui/qt4/components/interface_widgets.hpp +++ b/modules/gui/qt4/components/interface_widgets.hpp @@ -106,6 +106,8 @@ private: PLSelector *selector; PLPanel *rightPanel; intf_thread_t *p_intf; +private slots: + void undock(); }; #endif diff --git a/modules/gui/qt4/dialogs/playlist.cpp b/modules/gui/qt4/dialogs/playlist.cpp index 8f89545054..718842be8f 100644 --- a/modules/gui/qt4/dialogs/playlist.cpp +++ b/modules/gui/qt4/dialogs/playlist.cpp @@ -22,16 +22,19 @@ ******************************************************************************/ #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 #include #include #include #include -#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(); diff --git a/modules/gui/qt4/dialogs/playlist.hpp b/modules/gui/qt4/dialogs/playlist.hpp index 5e1adf7c81..13e109afd0 100644 --- a/modules/gui/qt4/dialogs/playlist.hpp +++ b/modules/gui/qt4/dialogs/playlist.hpp @@ -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 ); }; diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index e3ff231d2b..67d54c3d06 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -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 ************************************************************************/ diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp index 8a11a46bf9..41b4cf19dd 100644 --- a/modules/gui/qt4/main_interface.hpp +++ b/modules/gui/qt4/main_interface.hpp @@ -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 ); diff --git a/modules/gui/qt4/qt4.hpp b/modules/gui/qt4/qt4.hpp index c2ed8dbda1..39e6d7f736 100644 --- a/modules/gui/qt4/qt4.hpp +++ b/modules/gui/qt4/qt4.hpp @@ -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 {