]> git.sesse.net Git - vlc/commitdiff
Qt4: dialog_Fatal back-end (both modal and non-modal)
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 7 Mar 2009 19:28:30 +0000 (21:28 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 7 Mar 2009 19:28:30 +0000 (21:28 +0200)
(Feel free to move/cleanup)

modules/gui/qt4/main_interface.cpp
modules/gui/qt4/main_interface.hpp

index 5f1eb0f6a847e0cf5a280b48e2b447bf204f02b9..b1736a21d9d81fc2320be30f72b8ce0c1f3971fb 100644 (file)
 #include <QLabel>
 #include <QGroupBox>
 #include <QPushButton>
+#include <QMessageBox>
 
 #include <assert.h>
 
 #include <vlc_keys.h> /* Wheel event */
 #include <vlc_vout.h>
 #include <vlc_dialog.h>
+#include "dialogs/errors.hpp"
 
 /* Callback prototypes */
 static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
@@ -70,8 +72,6 @@ static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
                        vlc_value_t old_val, vlc_value_t new_val, void *param );
 static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
                              vlc_value_t, void *);
-static int DialogCallback( vlc_object_t *, const char *,
-                            vlc_value_t, vlc_value_t, void *);
 
 MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
 {
@@ -206,6 +206,9 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     var_AddCallback( p_intf, "interaction", InteractCallback, this );
     interaction_Register( p_intf );
 
+    connect( this, SIGNAL(fatalDialog( const struct dialog_fatal_t * )),
+             this, SLOT(displayFatalDialog( const struct dialog_fatal_t * )),
+             Qt::BlockingQueuedConnection );
     var_Create( p_intf, "dialog-fatal", VLC_VAR_ADDRESS );
     var_AddCallback( p_intf, "dialog-fatal", DialogCallback, this );
     dialog_Register( p_intf );
@@ -1232,21 +1235,29 @@ static int InteractCallback( vlc_object_t *p_this,
     return VLC_SUCCESS;
 }
 
-static int DialogCallback( vlc_object_t *p_this,
-                           const char *type, vlc_value_t previous,
-                           vlc_value_t value, void *data )
+int MainInterface::DialogCallback( vlc_object_t *p_this,
+                                   const char *type, vlc_value_t previous,
+                                   vlc_value_t value, void *data )
 {
     MainInterface *self = (MainInterface *)data;
     const dialog_fatal_t *dialog = (const dialog_fatal_t *)value.p_address;
-
-    if (!strcmp (type, "dialog-fatal"))
-        printf ("ERROR: %s\n %s\n", dialog->title, dialog->message);
-
-    /* FIXME!!! */
     (void) previous;
+
+    emit self->fatalDialog (dialog);
     return VLC_SUCCESS;
 }
 
+void MainInterface::displayFatalDialog (const dialog_fatal_t *dialog)
+{
+    if (dialog->modal)
+        QMessageBox::critical (NULL, qfu(dialog->title), qfu(dialog->message),
+                               QMessageBox::Ok);
+    else
+    if (config_GetInt (p_intf, "qt-error-dialogs"))
+        ErrorsDialog::getInstance (p_intf)->addError(qfu(dialog->title),
+                                                     qfu(dialog->message));
+}
+
 /*****************************************************************************
  * PopupMenuCB: callback triggered by the intf-popupmenu playlist variable.
  *  We don't show the menu directly here because we don't want the
index 6ca203c2f2e3499f23ce811b9d3d06e132f7f74b..946685b4d80eda225a6f09be128cf389895c522c 100644 (file)
@@ -49,6 +49,7 @@ class FullscreenControllerWidget;
 class SpeedControlWidget;
 class QMenu;
 class QSize;
+struct dialog_fatal_t;
 
 enum {
     CONTROLS_VISIBLE = 0x1,
@@ -150,6 +151,11 @@ private:
     virtual void wheelEvent( QWheelEvent * );
     virtual void resizeEvent( QResizeEvent * event );
 
+    static int DialogCallback( vlc_object_t *, const char *, vlc_value_t,
+                               vlc_value_t, void * );
+private slots:
+    void displayFatalDialog( const struct dialog_fatal_t * );
+
 public slots:
     void undockPlaylist();
     void dockPlaylist( pl_dock_e i_pos = PL_BOTTOM );
@@ -188,6 +194,7 @@ signals:
     void askUpdate();
     void minimalViewToggled( bool );
     void fullscreenInterfaceToggled( bool );
+    void fatalDialog( const struct dialog_fatal_t * );
 };
 
 #endif