Start handling input
authorClément Stenac <zorglub@videolan.org>
Mon, 29 May 2006 20:08:14 +0000 (20:08 +0000)
committerClément Stenac <zorglub@videolan.org>
Mon, 29 May 2006 20:08:14 +0000 (20:08 +0000)
Quit

modules/gui/qt4/dialogs_provider.cpp
modules/gui/qt4/input_manager.cpp
modules/gui/qt4/main_interface.cpp
modules/gui/qt4/main_interface.hpp
modules/gui/qt4/qt4.cpp
modules/gui/qt4/util/input_slider.cpp

index 37ce595..bbabc84 100644 (file)
@@ -33,7 +33,7 @@ DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) :
                                       QObject( NULL ), p_intf( _p_intf )
 {
     idle_timer = new QTimer( this );
-    idle_timer->start( 0 );
//   idle_timer->start( 0 );
 
     fixed_timer = new QTimer( this );
     fixed_timer->start( 100 /* milliseconds */ );
@@ -90,17 +90,14 @@ void DialogsProvider::openDialog( int i_dialog )
 void DialogsProvider::streaminfoDialog()
 {
     StreamInfoDialog::getInstance( p_intf )->toggleVisible();
-    QObject::connect( DialogsProvider::getInstance(NULL)->fixed_timer, SIGNAL( timeout() ), this, SLOT( prefsDialog() )) ;
 }
 
 void DialogsProvider::prefsDialog()
 {
-fprintf( stderr, "P\n");
 }
 
 void DialogsProvider::messagesDialog()
 {
-fprintf( stderr, "M\n");
 }
 
 void DialogsProvider::popupMenu( int i_dialog )
index 26f6ea3..80b6b97 100644 (file)
@@ -40,6 +40,7 @@ InputManager::~InputManager()
 
 void InputManager::setInput( input_thread_t *_p_input )
 {
+    fprintf( stderr, "[IM] Got input\n");
     p_input = _p_input;
     emit reset();
 }
@@ -58,5 +59,10 @@ void InputManager::update()
     i_time = var_GetTime( p_input, "time") / 1000000;
     f_pos = var_GetFloat( p_input, "position" );
 
+    fprintf( stderr, "Changing pos\n");
     emit positionUpdated( f_pos, i_time, i_length );
 }
+
+void InputManager::sliderUpdate( float new_pos )
+{
+}
index ae40ad3..8c15c24 100644 (file)
 #include "main_interface.hpp"
 #include "input_manager.hpp"
 #include "dialogs_provider.hpp"
+#include <QCloseEvent>
 
-MainInterface::MainInterface( intf_thread_t *p_intf ) : QWidget( NULL )
+MainInterface::MainInterface( intf_thread_t *_p_intf ) :
+                            QWidget( NULL ), p_intf( _p_intf)
 {
     fprintf( stderr, "QT Main interface\n" );
 
     /* Init UI */
 
     /* Init input manager */
+    p_input = NULL;
+    main_input_manager = new InputManager( this, p_intf );
 }
 
 void MainInterface::init()
 {
     /* Get timer updates */
     QObject::connect( DialogsProvider::getInstance(NULL)->fixed_timer,
-                     SIGNAL( timeout() ), this, SLOT(updateOnTimer() ) );
+                      SIGNAL( timeout() ), this, SLOT(updateOnTimer() ) );
     /* Tell input manager about the input changes */
     QObject::connect( this, SIGNAL( inputChanged( input_thread_t * ) ),
-                  main_input_manager, SLOT( setInput( input_thread_t * ) ) );
+                   main_input_manager, SLOT( setInput( input_thread_t * ) ) );
+
 }
 
 MainInterface::~MainInterface()
@@ -49,5 +54,41 @@ MainInterface::~MainInterface()
 
 void MainInterface::updateOnTimer()
 {
+    if( p_intf->b_die )
+    {
+        QApplication::quit();
+    }
+    vlc_mutex_lock( &p_intf->change_lock );
+    if( p_input && p_input->b_dead )
+    {
+        vlc_object_release( p_input );
+        p_input = NULL;
+        emit inputChanged( NULL );
+    }
+
+    if( !p_input )
+    {
+        playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_intf,
+                                        VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+        assert( p_playlist );
+        PL_LOCK;
+
+        p_input = p_playlist->p_input;
+        if( p_input )
+        {
+            vlc_object_yield( p_input );
+            fprintf( stderr, "Sending input\n");
+            emit inputChanged( p_input );
+        }
 
+        PL_UNLOCK;
+        vlc_object_release( p_playlist );
+    }
+    vlc_mutex_unlock( &p_intf->change_lock );
+}
+
+void MainInterface::closeEvent( QCloseEvent *e )
+{
+    hide();
+    p_intf->b_die = VLC_TRUE;
 }
index 3e5886c..e609cf1 100644 (file)
@@ -27,6 +27,7 @@
 #include <QWidget>
 
 class InputManager;
+class QCloseEvent;
 
 class MainInterface : public QWidget
 {
@@ -35,10 +36,17 @@ public:
     MainInterface( intf_thread_t *);
     virtual ~MainInterface();
     void init();
+protected:
+    void closeEvent( QCloseEvent *);
 private:
     InputManager *main_input_manager;
+    intf_thread_t *p_intf;
+    /// Main input associated to the playlist
+    input_thread_t *p_input;
 private slots:
     void updateOnTimer();
+signals:
+    void inputChanged( input_thread_t *);
 };
 
 #endif
index 179ca84..4fe3eea 100644 (file)
@@ -115,15 +115,18 @@ static void Init( intf_thread_t *p_intf )
     QApplication *app = new QApplication( argc, argv , true );
     p_intf->p_sys->p_app = app;
 
+    // Initialize timers
+    DialogsProvider::getInstance( p_intf );
+
     /* Normal interface */
     if( !p_intf->pf_show_dialog )
     {
         MainInterface *p_mi = new MainInterface( p_intf );
         p_intf->p_sys->p_mi = p_mi;
+        p_mi->init();
         p_mi->show();
     }
 
-    DialogsProvider::getInstance( p_intf );
 
     if( p_intf->pf_show_dialog )
         vlc_thread_ready( p_intf );
index a153acc..09050dc 100644 (file)
@@ -31,7 +31,7 @@ void InputSlider::init()
     setPageStep( 100 );
     setTracking( true );
     QObject::connect( this, SIGNAL( valueChanged(int) ), this,
-                     SLOT( userDrag( int ) ) );
+                      SLOT( userDrag( int ) ) );
 }
 
 void InputSlider::setPosition( float pos, int a, int b )