]> git.sesse.net Git - vlc/commitdiff
* Added DVD/VCD button and menu for quick DVD device selection to the
authorSam Hocevar <sam@videolan.org>
Sun, 4 Mar 2001 03:12:00 +0000 (03:12 +0000)
committerSam Hocevar <sam@videolan.org>
Sun, 4 Mar 2001 03:12:00 +0000 (03:12 +0000)
    Gnome and Gtk+ interfaces, so that vlc can play a DVD even when
    launched from a GUI.

15 files changed:
plugins/dvd/input_dvd.c
plugins/gnome/gnome_callbacks.c
plugins/gnome/gnome_callbacks.h
plugins/gnome/gnome_interface.c
plugins/gnome/gnome_interface.h
plugins/gnome/gnome_sys.h
plugins/gnome/intf_gnome.c
plugins/gnome/intf_gnome.glade
plugins/gtk/gtk_callbacks.c
plugins/gtk/gtk_callbacks.h
plugins/gtk/gtk_interface.c
plugins/gtk/gtk_interface.h
plugins/gtk/gtk_sys.h
plugins/gtk/intf_gtk.c
plugins/gtk/intf_gtk.glade

index 7ffe7f70763b65bf8addb7135d480cb7fc9fe299..7ea12969b7e977c5e7196d44ffd8194e6cdd4b7a 100644 (file)
@@ -10,7 +10,7 @@
  *  -dvd_udf to find files
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: input_dvd.c,v 1.26 2001/03/03 11:01:07 sam Exp $
+ * $Id: input_dvd.c,v 1.27 2001/03/04 03:12:00 sam Exp $
  *
  * Author: Stéphane Borel <stef@via.ecp.fr>
  *
@@ -601,7 +601,8 @@ static int DVDSetArea( input_thread_t * p_input,
                 break;
             default:
                 i_id = 0;
-                intf_ErrMsg( "dvd error: unkown audio" );
+                intf_ErrMsg( "dvd error: unknown audio type %.2x",
+                         p_method->ifo.vts.mat.p_audio_atrt[i].i_coding_mode );
             }
         
             intf_WarnMsg( 1, "dvd info: audio stream %d %s\t(0x%x)",
index 7f410d6de9be81e28a7ad826f2aafde1f8798205..d3dc3d59d7847d258887f6d6294f6ac7cba04666 100644 (file)
@@ -632,3 +632,131 @@ on_popup_subtitle_activate             (GtkMenuItem     *menuitem,
 
 }
 
+
+void
+on_menubar_disc_activate               (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
+
+void
+on_toolbar_disc_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
+
+void
+on_disc_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+    char *psz_device, *psz_source, *psz_method;
+
+    psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+                                         GTK_WIDGET(button), "disc_name" ) ) );
+
+    /* "dvd:foo" has size 5 + strlen(foo) */
+    psz_source = malloc( 5 + strlen( psz_device ) );
+    if( psz_source == NULL )
+    {
+        return;
+    }
+
+    /* Check which method was activated */
+    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                          "disc_dvd" ) )->active )
+    {
+        psz_method = "dvd";
+    }
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "disc_vcd" ) )->active )
+    {
+        psz_method = "vcd";
+    }
+    else
+    {
+        intf_ErrMsg( "intf error: unknown toggle button configuration" );
+        free( psz_source );
+        return;
+    }
+    
+    /* Build source name and add it to playlist */
+    sprintf( psz_source, "%s:%s", psz_method, psz_device );
+    intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+
+    gtk_widget_hide( p_intf->p_sys->p_disc );
+}
+
+
+void
+on_disc_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+
+    gtk_widget_hide( p_intf->p_sys->p_disc );
+}
+
+
+void
+on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
+            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/dvd" );
+    }
+}
+
+
+void
+on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
+            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/cdrom" );
+    }
+}
+
+
+void
+on_popup_disc_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
index 57e91e16ca7fd68eadd08b1d67fe87e2f5e0a15e..085252a8bd52e7f02a8fbc1fbae4d3eec16aef2d 100644 (file)
@@ -221,3 +221,31 @@ on_popup_audio_activate                (GtkMenuItem     *menuitem,
 void
 on_popup_subtitle_activate             (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
+
+void
+on_menubar_disc_activate               (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_toolbar_disc_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_disc_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_disc_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_popup_disc_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
index 72b10c59951a976dca5a1035a468e4079ebd5dab..8e14d00c658748345488edb308cc896a8062871b 100644 (file)
 static GnomeUIInfo menubar_file_menu_uiinfo[] =
 {
   GNOMEUIINFO_MENU_OPEN_ITEM (on_menubar_open_activate, NULL),
+  {
+    GNOME_APP_UI_ITEM, N_("Open _disc..."),
+    N_("Open a DVD or VCD"),
+    (gpointer) on_menubar_disc_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM,
+    0, (GdkModifierType) 0, NULL
+  },
   GNOMEUIINFO_SEPARATOR,
   GNOMEUIINFO_MENU_EXIT_ITEM (on_menubar_exit_activate, NULL),
   GNOMEUIINFO_END
@@ -88,6 +95,7 @@ create_intf_window (void)
   GtkWidget *toolbar;
   GtkWidget *tmp_toolbar_icon;
   GtkWidget *toolbar_open;
+  GtkWidget *toolbar_disc;
   GtkWidget *toolbar_back;
   GtkWidget *toolbar_stop;
   GtkWidget *toolbar_play;
@@ -126,15 +134,20 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (menubar_file_menu_uiinfo[1].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator1",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_disc",
                             menubar_file_menu_uiinfo[1].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (menubar_file_menu_uiinfo[2].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_exit",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator1",
                             menubar_file_menu_uiinfo[2].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
+  gtk_widget_ref (menubar_file_menu_uiinfo[3].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_exit",
+                            menubar_file_menu_uiinfo[3].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
   gtk_widget_ref (menubar_uiinfo[1].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_view",
                             menubar_uiinfo[1].widget,
@@ -213,6 +226,18 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_open);
 
+  tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_CDROM);
+  toolbar_disc = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Disc"),
+                                NULL, NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_ref (toolbar_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_disc", toolbar_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_disc);
+
   gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
 
   tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_BACK);
@@ -387,6 +412,9 @@ create_intf_window (void)
   gtk_signal_connect (GTK_OBJECT (toolbar_open), "clicked",
                       GTK_SIGNAL_FUNC (on_toolbar_open_clicked),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_disc), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_disc_clicked),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (toolbar_back), "clicked",
                       GTK_SIGNAL_FUNC (on_toolbar_back_clicked),
                       NULL);
@@ -468,6 +496,13 @@ static GnomeUIInfo intf_popup_uiinfo[] =
   },
   GNOMEUIINFO_SEPARATOR,
   GNOMEUIINFO_MENU_OPEN_ITEM (on_popup_open_activate, NULL),
+  {
+    GNOME_APP_UI_ITEM, N_("Open _disc..."),
+    N_("Open DVD or VCD"),
+    (gpointer) on_popup_disc_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM,
+    0, (GdkModifierType) 0, NULL
+  },
   GNOMEUIINFO_SEPARATOR,
   {
     GNOME_APP_UI_SUBTREE, N_("_Title"),
@@ -537,45 +572,50 @@ create_intf_popup (void)
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[6].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator3",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_disc",
                             intf_popup_uiinfo[6].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[7].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_title",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator3",
                             intf_popup_uiinfo[7].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
+  gtk_widget_ref (intf_popup_uiinfo[8].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_title",
+                            intf_popup_uiinfo[8].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
   gtk_widget_ref (popup_title_menu_uiinfo[0].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_chapter",
                             popup_title_menu_uiinfo[0].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
-  gtk_widget_ref (intf_popup_uiinfo[8].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio",
-                            intf_popup_uiinfo[8].widget,
-                            (GtkDestroyNotify) gtk_widget_unref);
-
   gtk_widget_ref (intf_popup_uiinfo[9].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subtitle",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio",
                             intf_popup_uiinfo[9].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[10].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator4",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subtitle",
                             intf_popup_uiinfo[10].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[11].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_about",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator4",
                             intf_popup_uiinfo[11].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[12].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_exit",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_about",
                             intf_popup_uiinfo[12].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
+  gtk_widget_ref (intf_popup_uiinfo[13].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_exit",
+                            intf_popup_uiinfo[13].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
   return intf_popup;
 }
 
@@ -812,3 +852,118 @@ create_intf_playlist (void)
   return intf_playlist;
 }
 
+GtkWidget*
+create_intf_disc (void)
+{
+  GtkWidget *intf_disc;
+  GtkWidget *dialog_vbox4;
+  GtkWidget *frame1;
+  GtkWidget *vbox4;
+  GSList *disc_group = NULL;
+  GtkWidget *disc_dvd;
+  GtkWidget *disc_vcd;
+  GtkWidget *hbox1;
+  GtkWidget *label14;
+  GtkWidget *disc_name;
+  GtkWidget *dialog_action_area4;
+  GtkWidget *disc_ok;
+  GtkWidget *disc_cancel;
+
+  intf_disc = gnome_dialog_new (_("Open disc"), NULL);
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "intf_disc", intf_disc);
+  gtk_window_set_policy (GTK_WINDOW (intf_disc), FALSE, FALSE, FALSE);
+
+  dialog_vbox4 = GNOME_DIALOG (intf_disc)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "dialog_vbox4", dialog_vbox4);
+  gtk_widget_show (dialog_vbox4);
+
+  frame1 = gtk_frame_new (_("Disc type"));
+  gtk_widget_ref (frame1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "frame1", frame1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (frame1);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox4), frame1, TRUE, TRUE, 0);
+
+  vbox4 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_ref (vbox4);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "vbox4", vbox4,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (vbox4);
+  gtk_container_add (GTK_CONTAINER (frame1), vbox4);
+
+  disc_dvd = gtk_radio_button_new_with_label (disc_group, _("DVD"));
+  disc_group = gtk_radio_button_group (GTK_RADIO_BUTTON (disc_dvd));
+  gtk_widget_ref (disc_dvd);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_dvd", disc_dvd,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_dvd);
+  gtk_box_pack_start (GTK_BOX (vbox4), disc_dvd, FALSE, FALSE, 0);
+
+  disc_vcd = gtk_radio_button_new_with_label (disc_group, _("VCD (unsupported yet)"));
+  disc_group = gtk_radio_button_group (GTK_RADIO_BUTTON (disc_vcd));
+  gtk_widget_ref (disc_vcd);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_vcd", disc_vcd,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_vcd);
+  gtk_box_pack_start (GTK_BOX (vbox4), disc_vcd, FALSE, FALSE, 0);
+
+  hbox1 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (hbox1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "hbox1", hbox1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (hbox1);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox4), hbox1, TRUE, TRUE, 0);
+
+  label14 = gtk_label_new (_("Device name (eg. /dev/cdrom or /dev/dvd): "));
+  gtk_widget_ref (label14);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "label14", label14,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (label14);
+  gtk_box_pack_start (GTK_BOX (hbox1), label14, FALSE, FALSE, 0);
+
+  disc_name = gtk_entry_new ();
+  gtk_widget_ref (disc_name);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_name", disc_name,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_name);
+  gtk_box_pack_start (GTK_BOX (hbox1), disc_name, TRUE, TRUE, 0);
+  gtk_entry_set_text (GTK_ENTRY (disc_name), _("/dev/dvd"));
+
+  dialog_action_area4 = GNOME_DIALOG (intf_disc)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "dialog_action_area4", dialog_action_area4);
+  gtk_widget_show (dialog_action_area4);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END);
+  gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area4), 8);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_disc), GNOME_STOCK_BUTTON_OK);
+  disc_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_disc)->buttons)->data);
+  gtk_widget_ref (disc_ok);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_ok", disc_ok,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_ok);
+  GTK_WIDGET_SET_FLAGS (disc_ok, GTK_CAN_DEFAULT);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_disc), GNOME_STOCK_BUTTON_CANCEL);
+  disc_cancel = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_disc)->buttons)->data);
+  gtk_widget_ref (disc_cancel);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_cancel", disc_cancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_cancel);
+  GTK_WIDGET_SET_FLAGS (disc_cancel, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (disc_dvd), "toggled",
+                      GTK_SIGNAL_FUNC (on_disc_dvd_toggled),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_vcd), "toggled",
+                      GTK_SIGNAL_FUNC (on_disc_vcd_toggled),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_ok), "clicked",
+                      GTK_SIGNAL_FUNC (on_disc_ok_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_cancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_disc_cancel_clicked),
+                      NULL);
+
+  return intf_disc;
+}
+
index e4b4ae190f0a6eca0aa6e68e4e0a3b049b7d9458..2979135585d69ef6ac62f28c57e97be4e5cba78b 100644 (file)
@@ -8,3 +8,4 @@ GtkWidget* create_intf_about (void);
 GtkWidget* create_intf_fileopen (void);
 GtkWidget* create_intf_modules (void);
 GtkWidget* create_intf_playlist (void);
+GtkWidget* create_intf_disc (void);
index b32170163a6eda5552fdfab6a27baa829dd41965..1e02edf0a1a0794ce9ac64ad420575c5039d4131 100644 (file)
@@ -2,7 +2,7 @@
  * gnome_sys.h: private Gnome interface description
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: gnome_sys.h,v 1.5 2001/02/16 06:37:09 sam Exp $
+ * $Id: gnome_sys.h,v 1.6 2001/03/04 03:12:00 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -50,6 +50,7 @@ typedef struct intf_sys_s
     GtkWidget *         p_modules;                         /* module manager */
     GtkWidget *         p_about;                             /* about window */
     GtkWidget *         p_fileopen;                      /* file open window */
+    GtkWidget *         p_disc;                     /* disc selection window */
 
     /* XXX: ugly kludge */
     void             ( *pf_gtk_callback ) ( void );
index 1079efdc7fb15fd9de05e3d6505b71131094b939..65547301478b8081130ad4e4755ab4a2a03ff7da 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gnome.c: Gnome interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gnome.c,v 1.18 2001/02/20 23:30:15 sam Exp $
+ * $Id: intf_gnome.c,v 1.19 2001/03/04 03:12:00 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -200,6 +200,7 @@ static void intf_Run( intf_thread_t *p_intf )
     p_intf->p_sys->p_playlist = NULL;
     p_intf->p_sys->p_modules = NULL;
     p_intf->p_sys->p_fileopen = NULL;
+    p_intf->p_sys->p_disc = NULL;
 
     /* Store p_intf to keep an eye on it */
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
index 4af6b49e86bce4c82c0b4237be8c26ae348b2d77..9629a19b3f77f414b02f91c06b2a3f219ea4e996 100644 (file)
              <stock_item>GNOMEUIINFO_MENU_OPEN_ITEM</stock_item>
            </widget>
 
+           <widget>
+             <class>GtkPixmapMenuItem</class>
+             <name>menubar_disc</name>
+             <tooltip>Open a DVD or VCD</tooltip>
+             <signal>
+               <name>activate</name>
+               <handler>on_menubar_disc_activate</handler>
+               <last_modification_time>Sun, 04 Mar 2001 01:28:32 GMT</last_modification_time>
+             </signal>
+             <label>Open _disc...</label>
+             <right_justify>False</right_justify>
+             <stock_icon>GNOME_STOCK_MENU_CDROM</stock_icon>
+           </widget>
+
            <widget>
              <class>GtkMenuItem</class>
              <name>separator1</name>
          <stock_pixmap>GNOME_STOCK_PIXMAP_OPEN</stock_pixmap>
        </widget>
 
+       <widget>
+         <class>GtkButton</class>
+         <child_name>Toolbar:button</child_name>
+         <name>toolbar_disc</name>
+         <signal>
+           <name>clicked</name>
+           <handler>on_toolbar_disc_clicked</handler>
+           <last_modification_time>Sun, 04 Mar 2001 01:27:51 GMT</last_modification_time>
+         </signal>
+         <label>Disc</label>
+         <stock_pixmap>GNOME_STOCK_PIXMAP_CDROM</stock_pixmap>
+       </widget>
+
        <widget>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
     <stock_item>GNOMEUIINFO_MENU_OPEN_ITEM</stock_item>
   </widget>
 
+  <widget>
+    <class>GtkPixmapMenuItem</class>
+    <name>popup_disc</name>
+    <tooltip>Open DVD or VCD</tooltip>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_disc_activate</handler>
+      <last_modification_time>Sun, 04 Mar 2001 02:57:11 GMT</last_modification_time>
+    </signal>
+    <label>Open _disc...</label>
+    <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_CDROM</stock_icon>
+  </widget>
+
   <widget>
     <class>GtkMenuItem</class>
     <name>separator3</name>
@@ -1001,4 +1042,179 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
   </widget>
 </widget>
 
+<widget>
+  <class>GnomeDialog</class>
+  <name>intf_disc</name>
+  <title>Open disc</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>False</allow_shrink>
+  <allow_grow>False</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <auto_close>False</auto_close>
+  <hide_on_close>False</hide_on_close>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>GnomeDialog:vbox</child_name>
+    <name>dialog-vbox4</name>
+    <homogeneous>False</homogeneous>
+    <spacing>8</spacing>
+    <child>
+      <padding>4</padding>
+      <expand>True</expand>
+      <fill>True</fill>
+    </child>
+
+    <widget>
+      <class>GtkHButtonBox</class>
+      <child_name>GnomeDialog:action_area</child_name>
+      <name>dialog-action_area4</name>
+      <layout_style>GTK_BUTTONBOX_END</layout_style>
+      <spacing>8</spacing>
+      <child_min_width>85</child_min_width>
+      <child_min_height>27</child_min_height>
+      <child_ipad_x>7</child_ipad_x>
+      <child_ipad_y>0</child_ipad_y>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>disc_ok</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_disc_ok_clicked</handler>
+         <last_modification_time>Sun, 04 Mar 2001 01:33:55 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>disc_cancel</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_disc_cancel_clicked</handler>
+         <last_modification_time>Sun, 04 Mar 2001 01:33:50 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkFrame</class>
+      <name>frame1</name>
+      <label>Disc type</label>
+      <label_xalign>0</label_xalign>
+      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkVBox</class>
+       <name>vbox4</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+
+       <widget>
+         <class>GtkRadioButton</class>
+         <name>disc_dvd</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>toggled</name>
+           <handler>on_disc_dvd_toggled</handler>
+           <last_modification_time>Sun, 04 Mar 2001 02:12:52 GMT</last_modification_time>
+         </signal>
+         <label>DVD</label>
+         <active>False</active>
+         <draw_indicator>True</draw_indicator>
+         <group>disc</group>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkRadioButton</class>
+         <name>disc_vcd</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>toggled</name>
+           <handler>on_disc_vcd_toggled</handler>
+           <last_modification_time>Sun, 04 Mar 2001 02:12:58 GMT</last_modification_time>
+         </signal>
+         <label>VCD (unsupported yet)</label>
+         <active>False</active>
+         <draw_indicator>True</draw_indicator>
+         <group>disc</group>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkHBox</class>
+      <name>hbox1</name>
+      <homogeneous>False</homogeneous>
+      <spacing>0</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkLabel</class>
+       <name>label14</name>
+       <label>Device name (eg. /dev/cdrom or /dev/dvd): </label>
+       <justify>GTK_JUSTIFY_CENTER</justify>
+       <wrap>False</wrap>
+       <xalign>0.5</xalign>
+       <yalign>0.5</yalign>
+       <xpad>0</xpad>
+       <ypad>0</ypad>
+       <child>
+         <padding>0</padding>
+         <expand>False</expand>
+         <fill>False</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkEntry</class>
+       <name>disc_name</name>
+       <can_focus>True</can_focus>
+       <editable>True</editable>
+       <text_visible>True</text_visible>
+       <text_max_length>0</text_max_length>
+       <text>/dev/dvd</text>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
 </GTK-Interface>
index 93491832f430df56cf6b7271ee9414d9927b6f91..8d5ad89ac19f7b839b5b21058d56bc0c4976f272 100644 (file)
@@ -28,6 +28,8 @@
  *****************************************************************************/
 #include "defs.h"
 
+#include <stdlib.h>
+
 #include <gtk/gtk.h>
 
 #include "config.h"
@@ -594,3 +596,131 @@ on_about_ok_clicked                    (GtkButton       *button,
     gtk_widget_hide( p_intf->p_sys->p_about );
 }
 
+
+void
+on_menubar_disc_activate               (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
+
+void
+on_toolbar_disc_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
+
+void
+on_disc_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+    char *psz_device, *psz_source, *psz_method;
+
+    psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+                                         GTK_WIDGET(button), "disc_name" ) ) );
+
+    /* "dvd:foo" has size 5 + strlen(foo) */
+    psz_source = malloc( 5 + strlen( psz_device ) );
+    if( psz_source == NULL )
+    {
+        return;
+    }
+
+    /* Check which method was activated */
+    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                          "disc_dvd" ) )->active )
+    {
+        psz_method = "dvd";
+    }
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "disc_vcd" ) )->active )
+    {
+        psz_method = "vcd";
+    }
+    else
+    {
+        intf_ErrMsg( "intf error: unknown toggle button configuration" );
+        free( psz_source );
+        return;
+    }
+    
+    /* Build source name and add it to playlist */
+    sprintf( psz_source, "%s:%s", psz_method, psz_device );
+    intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+
+    gtk_widget_hide( p_intf->p_sys->p_disc );
+}
+
+
+void
+on_disc_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+
+    gtk_widget_hide( p_intf->p_sys->p_disc );
+}
+
+
+void
+on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
+            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/dvd" );
+    }
+}
+
+
+void
+on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
+            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/cdrom" );
+    }
+}
+
+
+void
+on_popup_disc_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_disc );
+    gdk_window_raise( p_intf->p_sys->p_disc->window );
+}
+
index d2ac4d56c4e1ae244beecab1f169729e15c48f8a..946ffe4ad859dd23775a0a10708245a09bdf9a12 100644 (file)
@@ -157,3 +157,31 @@ void
 on_about_ok_clicked                    (GtkButton       *button,
                                         gpointer         user_data);
 
+
+void
+on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_disc_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_disc_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_menubar_disc_activate               (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_toolbar_disc_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_popup_disc_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
index 7376498c55989d117982757d219d136fbb9e56d5..0578b946a0cbf8be8581a12c5ba03426da5aeec8 100644 (file)
@@ -30,6 +30,7 @@ create_intf_window (void)
   GtkWidget *menubar_file_menu;
   GtkAccelGroup *menubar_file_menu_accels;
   GtkWidget *menubar_open;
+  GtkWidget *menubar_disc;
   GtkWidget *separator4;
   GtkWidget *menubar_exit;
   GtkWidget *menubar_view;
@@ -48,6 +49,7 @@ create_intf_window (void)
   GtkWidget *handlebox1;
   GtkWidget *toolbar;
   GtkWidget *toolbar_open;
+  GtkWidget *toolbar_disc;
   GtkWidget *toolbar_back;
   GtkWidget *toolbar_stop;
   GtkWidget *toolbar_play;
@@ -127,6 +129,18 @@ create_intf_window (void)
                               GDK_F3, 0,
                               GTK_ACCEL_VISIBLE);
 
+  menubar_disc = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_disc)->child),
+                                   _("Open _disc..."));
+  gtk_widget_add_accelerator (menubar_disc, "activate_item", menubar_file_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (menubar_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_disc", menubar_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (menubar_disc);
+  gtk_container_add (GTK_CONTAINER (menubar_file_menu), menubar_disc);
+  gtk_tooltips_set_tip (tooltips, menubar_disc, _("Open a DVD or VCD"), NULL);
+
   separator4 = gtk_menu_item_new ();
   gtk_widget_ref (separator4);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator4", separator4,
@@ -284,6 +298,17 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_open);
 
+  toolbar_disc = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Disc"),
+                                _("Open File"), NULL,
+                                NULL, NULL, NULL);
+  gtk_widget_ref (toolbar_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_disc", toolbar_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_disc);
+
   gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
 
   toolbar_back = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
@@ -441,6 +466,9 @@ create_intf_window (void)
   gtk_signal_connect (GTK_OBJECT (menubar_open), "activate",
                       GTK_SIGNAL_FUNC (on_menubar_open_activate),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (menubar_disc), "activate",
+                      GTK_SIGNAL_FUNC (on_menubar_disc_activate),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (menubar_exit), "activate",
                       GTK_SIGNAL_FUNC (on_menubar_exit_activate),
                       NULL);
@@ -459,6 +487,9 @@ create_intf_window (void)
   gtk_signal_connect (GTK_OBJECT (toolbar_open), "clicked",
                       GTK_SIGNAL_FUNC (on_toolbar_open_clicked),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_disc), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_disc_clicked),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (toolbar_back), "clicked",
                       GTK_SIGNAL_FUNC (on_toolbar_back_clicked),
                       NULL);
@@ -512,9 +543,13 @@ create_intf_popup (void)
   GtkWidget *popup_fast;
   GtkWidget *separator6;
   GtkWidget *popup_open;
+  GtkWidget *popup_disc;
   GtkWidget *separator5;
   GtkWidget *popup_about;
   GtkWidget *popup_exit;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
 
   intf_popup = gtk_menu_new ();
   gtk_object_set_data (GTK_OBJECT (intf_popup), "intf_popup", intf_popup);
@@ -571,6 +606,18 @@ create_intf_popup (void)
   gtk_widget_show (popup_open);
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_open);
 
+  popup_disc = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_disc)->child),
+                                   _("Open _disc..."));
+  gtk_widget_add_accelerator (popup_disc, "activate_item", intf_popup_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (popup_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_disc", popup_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_disc);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_disc);
+  gtk_tooltips_set_tip (tooltips, popup_disc, _("Open DVD or VCD"), NULL);
+
   separator5 = gtk_menu_item_new ();
   gtk_widget_ref (separator5);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator5", separator5,
@@ -616,6 +663,9 @@ create_intf_popup (void)
   gtk_signal_connect (GTK_OBJECT (popup_open), "activate",
                       GTK_SIGNAL_FUNC (on_popup_open_activate),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (popup_disc), "activate",
+                      GTK_SIGNAL_FUNC (on_popup_disc_activate),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (popup_about), "activate",
                       GTK_SIGNAL_FUNC (on_popup_about_activate),
                       NULL);
@@ -623,6 +673,8 @@ create_intf_popup (void)
                       GTK_SIGNAL_FUNC (on_popup_exit_activate),
                       NULL);
 
+  gtk_object_set_data (GTK_OBJECT (intf_popup), "tooltips", tooltips);
+
   return intf_popup;
 }
 
@@ -705,7 +757,6 @@ create_intf_about (void)
   dialog_action_area = GTK_DIALOG (intf_about)->action_area;
   gtk_object_set_data (GTK_OBJECT (intf_about), "dialog_action_area", dialog_action_area);
   gtk_widget_show (dialog_action_area);
-  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area), 10);
 
   about_ok = gtk_button_new_with_label (_("OK"));
   gtk_widget_ref (about_ok);
@@ -757,3 +808,134 @@ create_intf_fileopen (void)
   return intf_fileopen;
 }
 
+GtkWidget*
+create_intf_disc (void)
+{
+  GtkWidget *intf_disc;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *vbox4;
+  GtkWidget *frame2;
+  GtkWidget *vbox5;
+  GSList *disc_group = NULL;
+  GtkWidget *disc_dvd;
+  GtkWidget *disc_vcd;
+  GtkWidget *hbox2;
+  GtkWidget *label19;
+  GtkWidget *entry2;
+  GtkWidget *dialog_action_area1;
+  GtkWidget *hbox1;
+  GtkWidget *disc_ok;
+  GtkWidget *disc_cancel;
+
+  intf_disc = gtk_dialog_new ();
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "intf_disc", intf_disc);
+  gtk_window_set_title (GTK_WINDOW (intf_disc), _("Open disc"));
+  gtk_window_set_policy (GTK_WINDOW (intf_disc), FALSE, FALSE, FALSE);
+
+  dialog_vbox2 = GTK_DIALOG (intf_disc)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "dialog_vbox2", dialog_vbox2);
+  gtk_widget_show (dialog_vbox2);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_vbox2), 10);
+
+  vbox4 = gtk_vbox_new (FALSE, 5);
+  gtk_widget_ref (vbox4);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "vbox4", vbox4,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (vbox4);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox4, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox4), 5);
+
+  frame2 = gtk_frame_new (_("Disc type"));
+  gtk_widget_ref (frame2);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "frame2", frame2,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (frame2);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame2, TRUE, TRUE, 0);
+
+  vbox5 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_ref (vbox5);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "vbox5", vbox5,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (vbox5);
+  gtk_container_add (GTK_CONTAINER (frame2), vbox5);
+
+  disc_dvd = gtk_radio_button_new_with_label (disc_group, _("DVD"));
+  disc_group = gtk_radio_button_group (GTK_RADIO_BUTTON (disc_dvd));
+  gtk_widget_ref (disc_dvd);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_dvd", disc_dvd,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_dvd);
+  gtk_box_pack_start (GTK_BOX (vbox5), disc_dvd, FALSE, FALSE, 0);
+
+  disc_vcd = gtk_radio_button_new_with_label (disc_group, _("VCD (unsupported yet)"));
+  disc_group = gtk_radio_button_group (GTK_RADIO_BUTTON (disc_vcd));
+  gtk_widget_ref (disc_vcd);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_vcd", disc_vcd,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_vcd);
+  gtk_box_pack_start (GTK_BOX (vbox5), disc_vcd, FALSE, FALSE, 0);
+
+  hbox2 = gtk_hbox_new (FALSE, 5);
+  gtk_widget_ref (hbox2);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "hbox2", hbox2,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (hbox2);
+  gtk_box_pack_start (GTK_BOX (vbox4), hbox2, TRUE, TRUE, 0);
+
+  label19 = gtk_label_new (_("Device name (eg. /dev/cdrom or /dev/dvd):"));
+  gtk_widget_ref (label19);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "label19", label19,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (label19);
+  gtk_box_pack_start (GTK_BOX (hbox2), label19, FALSE, FALSE, 0);
+
+  entry2 = gtk_entry_new ();
+  gtk_widget_ref (entry2);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "entry2", entry2,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (entry2);
+  gtk_box_pack_start (GTK_BOX (hbox2), entry2, TRUE, TRUE, 0);
+  gtk_entry_set_text (GTK_ENTRY (entry2), _("/dev/dvd"));
+
+  dialog_action_area1 = GTK_DIALOG (intf_disc)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_disc), "dialog_action_area1", dialog_action_area1);
+  gtk_widget_show (dialog_action_area1);
+
+  hbox1 = gtk_hbox_new (TRUE, 5);
+  gtk_widget_ref (hbox1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "hbox1", hbox1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (hbox1);
+  gtk_box_pack_end (GTK_BOX (dialog_action_area1), hbox1, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 10);
+
+  disc_ok = gtk_button_new_with_label (_("OK"));
+  gtk_widget_ref (disc_ok);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_ok", disc_ok,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_ok);
+  gtk_box_pack_start (GTK_BOX (hbox1), disc_ok, FALSE, TRUE, 0);
+
+  disc_cancel = gtk_button_new_with_label (_("Cancel"));
+  gtk_widget_ref (disc_cancel);
+  gtk_object_set_data_full (GTK_OBJECT (intf_disc), "disc_cancel", disc_cancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (disc_cancel);
+  gtk_box_pack_start (GTK_BOX (hbox1), disc_cancel, FALSE, TRUE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (disc_dvd), "toggled",
+                      GTK_SIGNAL_FUNC (on_disc_dvd_toggled),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_vcd), "toggled",
+                      GTK_SIGNAL_FUNC (on_disc_vcd_toggled),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_ok), "clicked",
+                      GTK_SIGNAL_FUNC (on_disc_ok_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (disc_cancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_disc_cancel_clicked),
+                      NULL);
+
+  return intf_disc;
+}
+
index 17900a679d07f035f00c48b6745ac5305a3c3f33..a21ce2d2f49bde4b87c9964a950d3bff516f7eaa 100644 (file)
@@ -6,3 +6,4 @@ GtkWidget* create_intf_window (void);
 GtkWidget* create_intf_popup (void);
 GtkWidget* create_intf_about (void);
 GtkWidget* create_intf_fileopen (void);
+GtkWidget* create_intf_disc (void);
index e26f33889b9d66e71234a5b324c8834016d81ef5..5f208d78008914cb2581aafb2b3fa5cffa6fcac1 100644 (file)
@@ -2,7 +2,7 @@
  * gtk_sys.h: private Gtk+ interface description
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: gtk_sys.h,v 1.1 2001/02/21 11:49:18 sam Exp $
+ * $Id: gtk_sys.h,v 1.2 2001/03/04 03:12:00 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -50,6 +50,7 @@ typedef struct intf_sys_s
     GtkWidget *         p_modules;                         /* module manager */
     GtkWidget *         p_about;                             /* about window */
     GtkWidget *         p_fileopen;                      /* file open window */
+    GtkWidget *         p_disc;                     /* disc selection window */
 
     /* XXX: ugly kludge */
     void             ( *pf_gtk_callback ) ( void );
index 3d4b0266edc9b2047648c02bd62ce84b77330b40..c15217c8c88a9c70389da5bcfd9e4421c789578c 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gtk.c: Gtk+ interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gtk.c,v 1.1 2001/02/21 11:49:18 sam Exp $
+ * $Id: intf_gtk.c,v 1.2 2001/03/04 03:12:00 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -202,6 +202,7 @@ static void intf_Run( intf_thread_t *p_intf )
     p_intf->p_sys->p_playlist = NULL;
     p_intf->p_sys->p_modules = NULL;
     p_intf->p_sys->p_fileopen = NULL;
+    p_intf->p_sys->p_disc = NULL;
 
     /* Store p_intf to keep an eye on it */
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
index 8f4205ff4c264e2a34826c405e4ce3ff6a624928..213393fcac47eda784b7d2ef34adafd34d35f9da 100644 (file)
              <right_justify>False</right_justify>
            </widget>
 
+           <widget>
+             <class>GtkMenuItem</class>
+             <name>menubar_disc</name>
+             <tooltip>Open a DVD or VCD</tooltip>
+             <signal>
+               <name>activate</name>
+               <handler>on_menubar_disc_activate</handler>
+               <last_modification_time>Sun, 04 Mar 2001 02:53:25 GMT</last_modification_time>
+             </signal>
+             <label>Open _disc...</label>
+             <right_justify>False</right_justify>
+           </widget>
+
            <widget>
              <class>GtkMenuItem</class>
              <name>separator4</name>
          <label>Open</label>
        </widget>
 
+       <widget>
+         <class>GtkButton</class>
+         <child_name>Toolbar:button</child_name>
+         <name>toolbar_disc</name>
+         <tooltip>Open File</tooltip>
+         <signal>
+           <name>clicked</name>
+           <handler>on_toolbar_disc_clicked</handler>
+           <last_modification_time>Sun, 04 Mar 2001 02:55:35 GMT</last_modification_time>
+         </signal>
+         <label>Disc</label>
+       </widget>
+
        <widget>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
     <right_justify>False</right_justify>
   </widget>
 
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_disc</name>
+    <tooltip>Open DVD or VCD</tooltip>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_disc_activate</handler>
+      <last_modification_time>Sun, 04 Mar 2001 03:04:11 GMT</last_modification_time>
+    </signal>
+    <label>Open _disc...</label>
+    <right_justify>False</right_justify>
+  </widget>
+
   <widget>
     <class>GtkMenuItem</class>
     <name>separator5</name>
       <class>GtkHBox</class>
       <child_name>Dialog:action_area</child_name>
       <name>dialog-action_area</name>
-      <border_width>10</border_width>
       <homogeneous>True</homogeneous>
       <spacing>5</spacing>
       <child>
@@ -780,4 +818,206 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
   </widget>
 </widget>
 
+<widget>
+  <class>GtkDialog</class>
+  <name>intf_disc</name>
+  <title>Open disc</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>False</allow_shrink>
+  <allow_grow>False</allow_grow>
+  <auto_shrink>False</auto_shrink>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>Dialog:vbox</child_name>
+    <name>dialog-vbox2</name>
+    <border_width>10</border_width>
+    <homogeneous>False</homogeneous>
+    <spacing>0</spacing>
+
+    <widget>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>dialog-action_area1</name>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkHBox</class>
+       <name>hbox1</name>
+       <border_width>10</border_width>
+       <homogeneous>True</homogeneous>
+       <spacing>5</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>False</expand>
+         <fill>True</fill>
+         <pack>GTK_PACK_END</pack>
+       </child>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>disc_ok</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>on_disc_ok_clicked</handler>
+           <last_modification_time>Sun, 04 Mar 2001 02:45:24 GMT</last_modification_time>
+         </signal>
+         <label>OK</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>disc_cancel</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>on_disc_cancel_clicked</handler>
+           <last_modification_time>Sun, 04 Mar 2001 02:45:45 GMT</last_modification_time>
+         </signal>
+         <label>Cancel</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkVBox</class>
+      <name>vbox4</name>
+      <border_width>5</border_width>
+      <homogeneous>False</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkFrame</class>
+       <name>frame2</name>
+       <label>Disc type</label>
+       <label_xalign>0</label_xalign>
+       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+
+       <widget>
+         <class>GtkVBox</class>
+         <name>vbox5</name>
+         <homogeneous>False</homogeneous>
+         <spacing>0</spacing>
+
+         <widget>
+           <class>GtkRadioButton</class>
+           <name>disc_dvd</name>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>toggled</name>
+             <handler>on_disc_dvd_toggled</handler>
+             <last_modification_time>Sun, 04 Mar 2001 02:50:56 GMT</last_modification_time>
+           </signal>
+           <label>DVD</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <group>disc</group>
+           <child>
+             <padding>0</padding>
+             <expand>False</expand>
+             <fill>False</fill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkRadioButton</class>
+           <name>disc_vcd</name>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>toggled</name>
+             <handler>on_disc_vcd_toggled</handler>
+             <last_modification_time>Sun, 04 Mar 2001 02:51:00 GMT</last_modification_time>
+           </signal>
+           <label>VCD (unsupported yet)</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <group>disc</group>
+           <child>
+             <padding>0</padding>
+             <expand>False</expand>
+             <fill>False</fill>
+           </child>
+         </widget>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkHBox</class>
+       <name>hbox2</name>
+       <homogeneous>False</homogeneous>
+       <spacing>5</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>label19</name>
+         <label>Device name (eg. /dev/cdrom or /dev/dvd):</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkEntry</class>
+         <name>entry2</name>
+         <can_focus>True</can_focus>
+         <editable>True</editable>
+         <text_visible>True</text_visible>
+         <text_max_length>0</text_max_length>
+         <text>/dev/dvd</text>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>True</fill>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
 </GTK-Interface>