]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs_provider.cpp
* finish the vout menu (cloeses #302)
[vlc] / modules / gui / qt4 / dialogs_provider.cpp
index edf6d40c9d71e5abe297b079c95fc5723bbcd328..fc7827bcc5979bcfcc40eb3c6f7de2961656e8aa 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * main_inteface.cpp : Main interface
  ****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
+ * Copyright (C) 2006 the VideoLAN team
+ * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
  *
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/
 
-#include "dialogs_provider.hpp"
 #include "qt4.hpp"
 #include <QEvent>
+#include "dialogs_provider.hpp"
 #include "dialogs/playlist.hpp"
+#include "dialogs/prefs_dialog.hpp"
+#include "dialogs/streaminfo.hpp"
+#include <QApplication>
+#include <QSignalMapper>
+#include "menus.hpp"
 
 DialogsProvider* DialogsProvider::instance = NULL;
 
-DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) : QObject(),
-                                  p_intf( _p_intf )
+DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) :
+                                      QObject( NULL ), p_intf( _p_intf )
 {
-    fprintf( stderr, "QT DP" );
+//    idle_timer = new QTimer( this );
+//    idle_timer->start( 0 );
+
+    fixed_timer = new QTimer( this );
+    fixed_timer->start( 150 /* milliseconds */ );
+
+    menusMapper = new QSignalMapper();
+    connect( menusMapper, SIGNAL( mapped(QObject *) ), this,
+            SLOT(menuAction( QObject *)) );
+
+    menusUpdateMapper = new QSignalMapper();
+    connect( menusUpdateMapper, SIGNAL( mapped(QObject *) ), this,
+            SLOT(menuUpdateAction( QObject *)) );
 }
+
 DialogsProvider::~DialogsProvider()
 {
 }
-
 void DialogsProvider::customEvent( QEvent *event )
 {
     if( event->type() == DialogEvent_Type )
     {
-        DialogEvent *de = dynamic_cast<DialogEvent*>(event);
+        DialogEvent *de = static_cast<DialogEvent*>(event);
         switch( de->i_dialog )
         {
             case INTF_DIALOG_FILE:
@@ -59,15 +76,17 @@ void DialogsProvider::customEvent( QEvent *event )
             case INTF_DIALOG_VIDEOPOPUPMENU:
             case INTF_DIALOG_MISCPOPUPMENU:
                popupMenu( de->i_dialog ); break;
-            case INTF_DIALOG_VLM:
+            case INTF_DIALOG_FILEINFO:
+               streaminfoDialog(); break;
             case INTF_DIALOG_INTERACTION:
+               doInteraction( de->p_arg ); break;
+            case INTF_DIALOG_VLM:
             case INTF_DIALOG_BOOKMARKS:
-            case INTF_DIALOG_FILEINFO:
+               bookmarksDialog(); break;
             case INTF_DIALOG_WIZARD:
             default:
-               fprintf( stderr, "Unimplemented dialog\n");
+               msg_Warn( p_intf, "unimplemented dialog\n" );
         }
-        fprintf( stderr, "Showing dialog\n");
     }
 }
 
@@ -76,18 +95,88 @@ void DialogsProvider::playlistDialog()
     PlaylistDialog::getInstance( p_intf )->toggleVisible();
 }
 
+void DialogsProvider::openDialog()
+{
+    openDialog( 0 );
+}
 void DialogsProvider::openDialog( int i_dialog )
 {
 }
 
+void DialogsProvider::doInteraction( intf_dialog_args_t *p_arg )
+{
+    InteractionDialog *qdialog;
+    interaction_dialog_t *p_dialog = p_arg->p_dialog;
+    switch( p_dialog->i_action )
+    {
+    case INTERACT_NEW:
+        qdialog = new InteractionDialog( p_intf, p_dialog );
+        p_dialog->p_private = (void*)qdialog;
+        qdialog->show();
+        break;
+    case INTERACT_UPDATE:
+        qdialog = (InteractionDialog*)(p_dialog->p_private);
+        if( qdialog)
+            qdialog->Update();
+        break;
+    case INTERACT_HIDE:
+        qdialog = (InteractionDialog*)(p_dialog->p_private);
+        if( qdialog )
+            qdialog->hide();
+        p_dialog->i_status = HIDDEN_DIALOG;
+        break;
+    case INTERACT_DESTROY:
+        qdialog = (InteractionDialog*)(p_dialog->p_private);
+        delete qdialog; 
+        p_dialog->i_status = DESTROYED_DIALOG;
+        break;
+    }
+}
+
+void DialogsProvider::quit()
+{
+    p_intf->b_die = VLC_TRUE;
+    QApplication::quit();
+}
+
+void DialogsProvider::streaminfoDialog()
+{
+    StreamInfoDialog::getInstance( p_intf, true )->toggleVisible();
+}
+
+void DialogsProvider::streamingDialog()
+{
+}
+
 void DialogsProvider::prefsDialog()
 {
+    PrefsDialog::getInstance( p_intf )->toggleVisible();
 }
 
 void DialogsProvider::messagesDialog()
 {
 }
 
+void DialogsProvider::menuAction( QObject *data )
+{
+    QVLCMenu::DoAction( p_intf, data );
+}
+
+void DialogsProvider::menuUpdateAction( QObject *data )
+{
+    MenuFunc * f = qobject_cast<MenuFunc *>(data);
+    f->doFunc( p_intf );
+}
+
+void DialogsProvider::simpleOpenDialog()
+{
+}
+void DialogsProvider::bookmarksDialog()
+{
+}
+
+
+
 void DialogsProvider::popupMenu( int i_dialog )
 {