]> git.sesse.net Git - vlc/blobdiff - plugins/gtk/gtk_open.c
* ALL: got rid of p_object->p_this which is now useless.
[vlc] / plugins / gtk / gtk_open.c
index 064f447e0f45d4ee5380a364a473d2c0c3240a01..50ff3f6329e36f286808c49def427954f94b47ee 100644 (file)
@@ -2,7 +2,7 @@
  * gtk_open.c : functions to handle file/disc/network open widgets.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: gtk_open.c,v 1.22 2002/04/15 04:36:45 jobi Exp $
+ * $Id: gtk_open.c,v 1.26 2002/06/01 18:04:48 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -28,7 +28,8 @@
 #include <sys/types.h>                                              /* off_t */
 #include <stdlib.h>
 
-#include <videolan/vlc.h>
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
 
 #ifdef MODULE_NAME_IS_gnome
 #   include <gnome.h>
 
 #include <string.h>
 
-#include "stream_control.h"
-#include "input_ext-intf.h"
-
-#include "interface.h"
-#include "intf_playlist.h"
-
 #include "gtk_callbacks.h"
 #include "gtk_interface.h"
 #include "gtk_support.h"
@@ -72,7 +67,7 @@ gboolean GtkFileOpenShow( GtkWidget       *widget,
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
                              "p_intf", p_intf );
 
-        if( (psz_path = config_GetPszVariable( "search_path" )) )
+        if( (psz_path = config_GetPsz( p_intf, "search-path" )) )
             gtk_file_selection_set_filename( GTK_FILE_SELECTION(
                 p_intf->p_sys->p_fileopen ), psz_path );
         if( psz_path ) free( psz_path );
@@ -93,10 +88,17 @@ void GtkFileOpenCancel( GtkButton * button, gpointer user_data )
 void GtkFileOpenOk( GtkButton * button, gpointer user_data )
 {
     intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_fileopen" );
+    playlist_t *    p_playlist;
     GtkCList *      p_playlist_clist;
     GtkWidget *     p_filesel;
     gchar *         psz_filename;
-    int             i_end = p_main->p_playlist->i_size;
+
+    p_playlist = vlc_object_find( p_intf->p_vlc,
+                                  VLC_OBJECT_PLAYLIST, FIND_CHILD );
+    if( p_playlist == NULL )
+    {
+        return;
+    }
 
     /* hide the file selector */
     p_filesel = gtk_widget_get_toplevel( GTK_WIDGET(button) );
@@ -105,21 +107,24 @@ void GtkFileOpenOk( GtkButton * button, gpointer user_data )
     /* add the new file to the interface playlist */
     psz_filename =
         gtk_file_selection_get_filename( GTK_FILE_SELECTION( p_filesel ) );
-    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)psz_filename );
+    playlist_Add( p_playlist, 0, (char*)psz_filename );
 
     /* catch the GTK CList */
     p_playlist_clist = GTK_CLIST( gtk_object_get_data(
         GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
     /* update the plugin display */
-    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+    GtkRebuildCList( p_playlist_clist, p_playlist );
 
+    vlc_object_release( p_playlist );
     /* end current item, select added item  */
-    if( p_input_bank->pp_input[0] != NULL )
+#if 0
+    if( p_intf->p_vlc->p_input_bank->pp_input[0] != NULL )
     {
-        p_input_bank->pp_input[0]->b_eof = 1;
+        p_intf->p_vlc->p_input_bank->pp_input[0]->b_eof = 1;
     }
 
-    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    intf_PlaylistJumpto( p_intf->p_vlc->p_playlist, i_end - 1 );
+#endif
 }
 
 /*****************************************************************************
@@ -149,11 +154,13 @@ gboolean GtkDiscOpenShow( GtkWidget       *widget,
 
 void GtkDiscOpenDvd( GtkToggleButton * togglebutton, gpointer user_data )
 {
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(togglebutton), "intf_disc" );
+
     if( togglebutton->active )
     {
         char *psz_dvd_device;
 
-        if( (psz_dvd_device = config_GetPszVariable( "dvd_device" )) )
+        if( (psz_dvd_device = config_GetPsz( p_intf, "dvd" )) )
             gtk_entry_set_text(
                 GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),
                                           "disc_name" ) ), psz_dvd_device );
@@ -163,11 +170,13 @@ void GtkDiscOpenDvd( GtkToggleButton * togglebutton, gpointer user_data )
 
 void GtkDiscOpenVcd( GtkToggleButton * togglebutton, gpointer user_data )
 {
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(togglebutton), "intf_disc" );
+
     if( togglebutton->active )
     {
         char *psz_vcd_device;
 
-        if( (psz_vcd_device = config_GetPszVariable( "vcd_device" )) )
+        if( (psz_vcd_device = config_GetPsz( p_intf, "vcd" )) )
             gtk_entry_set_text(
                 GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),
                                           "disc_name" ) ), psz_vcd_device );
@@ -178,11 +187,18 @@ void GtkDiscOpenVcd( GtkToggleButton * togglebutton, gpointer user_data )
 void GtkDiscOpenOk( GtkButton * button, gpointer user_data )
 {
     intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+    playlist_t *    p_playlist;
     GtkCList *      p_playlist_clist;
     char *          psz_device, *psz_source, *psz_method;
-    int             i_end = p_main->p_playlist->i_size;
     int             i_title, i_chapter;
 
+    p_playlist = vlc_object_find( p_intf->p_vlc,
+                                  VLC_OBJECT_PLAYLIST, FIND_CHILD );
+    if( p_playlist == NULL )
+    {
+        return;
+    }
+
     gtk_widget_hide( p_intf->p_sys->p_disc );
     psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
                                          GTK_WIDGET(button), "disc_name" ) ) );
@@ -200,7 +216,7 @@ void GtkDiscOpenOk( GtkButton * button, gpointer user_data )
     }
     else
     {
-        intf_ErrMsg( "intf error: unknown disc type toggle button position" );
+        msg_Err( p_intf, "unknown disc type toggle button position" );
         return;
     }
     
@@ -225,7 +241,7 @@ void GtkDiscOpenOk( GtkButton * button, gpointer user_data )
     /* Build source name and add it to playlist */
     sprintf( psz_source, "%s:%s@%d,%d",
              psz_method, psz_device, i_title, i_chapter );
-    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+    playlist_Add( p_playlist, 0, psz_source );
     free( psz_source );
 
     /* catch the GTK CList */
@@ -233,15 +249,19 @@ void GtkDiscOpenOk( GtkButton * button, gpointer user_data )
         GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
 
     /* update the display */
-    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+    GtkRebuildCList( p_playlist_clist, p_playlist );
 
     /* stop current item, select added item */
-    if( p_input_bank->pp_input[0] != NULL )
+#if 0
+    if( p_intf->p_vlc->p_input_bank->pp_input[0] != NULL )
     {
-        p_input_bank->pp_input[0]->b_eof = 1;
+        p_intf->p_vlc->p_input_bank->pp_input[0]->b_eof = 1;
     }
 
-    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    intf_PlaylistJumpto( p_intf->p_vlc->p_playlist, i_end - 1 );
+#endif
+
+    vlc_object_release( p_playlist );
 }
 
 
@@ -271,23 +291,23 @@ gboolean GtkNetworkOpenShow( GtkWidget       *widget,
                              "p_intf", p_intf );
 
         gtk_spin_button_set_value( GTK_SPIN_BUTTON( gtk_object_get_data(
-            GTK_OBJECT( p_intf->p_sys->p_network ), "network_port" ) ),
-            config_GetIntVariable( "server_port" ) );
+            GTK_OBJECT( p_intf->p_sys->p_network ), "network_udp_port" ) ),
+            config_GetInt( p_intf, "server-port" ) );
 
-        psz_channel_server = config_GetPszVariable( "channel_server" );
+        psz_channel_server = config_GetPsz( p_intf, "channel-server" );
         if( psz_channel_server )
             gtk_entry_set_text( GTK_ENTRY( gtk_object_get_data(
-                GTK_OBJECT( p_intf->p_sys->p_network ), "network_channel" ) ),
+                GTK_OBJECT( p_intf->p_sys->p_network ), "network_channel_address" ) ),
                 psz_channel_server );
         if( psz_channel_server ) free( psz_channel_server );
 
         gtk_spin_button_set_value( GTK_SPIN_BUTTON( gtk_object_get_data(
             GTK_OBJECT( p_intf->p_sys->p_network ), "network_channel_port" ) ),
-            config_GetIntVariable( "channel_port" ) );
+            config_GetInt( p_intf, "channel-port" ) );
 
         gtk_toggle_button_set_active( gtk_object_get_data( GTK_OBJECT(
-            p_intf->p_sys->p_network ), "network_channel_check" ),
-            config_GetIntVariable( "network_channel" ) );
+            p_intf->p_sys->p_network ), "network_channel" ),
+            config_GetInt( p_intf, "network-channel" ) );
     }
 
     gtk_widget_show( p_intf->p_sys->p_network );
@@ -300,131 +320,193 @@ gboolean GtkNetworkOpenShow( GtkWidget       *widget,
 void GtkNetworkOpenOk( GtkButton *button, gpointer user_data )
 {
     intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_network" );
+    playlist_t *    p_playlist;
     GtkCList *      p_playlist_clist;
-    char *          psz_source, *psz_server, *psz_protocol;
+    char *          psz_source, *psz_address;
     unsigned int    i_port;
-    boolean_t       b_broadcast;
-    boolean_t       b_channel;
-    int             i_end = p_main->p_playlist->i_size;
+    vlc_bool_t      b_channel;
+
+    p_playlist = vlc_object_find( p_intf->p_vlc,
+                                  VLC_OBJECT_PLAYLIST, FIND_CHILD );
+    if( p_playlist == NULL )
+    {
+        return;
+    }
 
     gtk_widget_hide( p_intf->p_sys->p_network );
-    psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
-                                 GTK_WIDGET(button), "network_server" ) ) );
+//    psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+//                                 GTK_WIDGET(button), "network_server" ) ) );
 
     /* select added item */
-    if( p_input_bank->pp_input[0] != NULL )
+#if 0
+    if( p_intf->p_vlc->p_input_bank->pp_input[0] != NULL )
     {
-        p_input_bank->pp_input[0]->b_eof = 1;
+        p_intf->p_vlc->p_input_bank->pp_input[0]->b_eof = 1;
     }
+#endif
+
+    /* Manage channel server */
+    b_channel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
+            lookup_widget( GTK_WIDGET(button), "network_channel" ) ) );
+    config_PutInt( p_intf, "network-channel", b_channel );
 
-    /* Check which protocol was activated */
+    /* Check which option was chosen */
+    /* UDP */
     if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                          "network_ts" ) )->active )
+                                          "network_udp" ) )->active )
     {
-        psz_protocol = "udpstream";
+        /* No address in UDP mode */
+        psz_address = "";
+
+        /* Get the port number and make sure it will not
+         * overflow 5 characters */
+        i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
+             lookup_widget( GTK_WIDGET(button), "network_udp_port" ) ) );
+        if( i_port > 65535 )
+        {
+            msg_Err( p_intf, "invalid port %i", i_port );
+        }
+        /* Allocate room for "protocol:@:port" */
+        psz_source = malloc( 5 /* "udp:@" */ + 1 /* ":" */
+                             + 5 /* 0-65535 */ + 1 /* "\0" */ );
+        if( psz_source == NULL )
+        {
+            return;
+        }
+
+        /* Build source name and add it to playlist */
+        sprintf( psz_source, "udp:@:%i", i_port );
+
+        playlist_Add( p_playlist, 0, psz_source );
+        free( psz_source );
+
+        /* catch the GTK CList */
+        p_playlist_clist = GTK_CLIST( gtk_object_get_data(
+            GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+        /* update the display */
+        GtkRebuildCList( p_playlist_clist, p_playlist );
+
+#if 0
+        intf_PlaylistJumpto( p_playlist, i_end - 1 );
+#endif
     }
+
+    /* UDP Multicast */
     else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                               "network_rtp" ) )->active )
-    {
-        psz_protocol = "rtp";
-    }
-    else
+                                               "network_multicast" ) )->active )
     {
-        intf_ErrMsg( "intf error: unknown protocol toggle button position" );
-        return;
-    }
+        /* get the address */
+        psz_address = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+                        GTK_WIDGET(button), "network_multicast_address" ) ) );
+        /* Get the port number and make sure it will not
+         * overflow 5 characters */
+        i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
+             lookup_widget( GTK_WIDGET(button), "network_multicast_port" ) ) );
+        if( i_port > 65535 )
+        {
+            msg_Err( p_intf, "invalid port %i", i_port );
+        }
+        /* Allocate room for "protocol:@address:port" */
+        psz_source = malloc( 5 /* "udp:@" */
+                             + strlen( psz_address ) + 1 /* ":" */
+                             + 5 /* 0-65535 */ + 1 /* "\0" */ );
+        if( psz_source == NULL )
+        {
+            return;
+        }
 
-    /* Manage channel server */
-    b_channel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
-        lookup_widget( GTK_WIDGET(button), "network_channel_check" ) ) );
-    config_PutIntVariable( "network_channel", b_channel );
-    if( b_channel )
+        /* Build source name and add it to playlist */
+        sprintf( psz_source, "udp:@%s:%i", psz_address, i_port );
+
+        playlist_Add( p_playlist, 0, psz_source );
+        free( psz_source );
+
+        /* catch the GTK CList */
+        p_playlist_clist = GTK_CLIST( gtk_object_get_data(
+            GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+        /* update the display */
+        GtkRebuildCList( p_playlist_clist, p_playlist );
+
+#if 0
+        intf_PlaylistJumpto( p_playlist, i_end - 1 );
+#endif
+    }
+    
+    /* Channel server */
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "network_channel" ) )->active )
     {
         char *          psz_channel;
         unsigned int    i_channel_port;
 
-        if( p_main->p_channel == NULL )
+        if( p_intf->p_vlc->p_channel == NULL )
         {
-            network_ChannelCreate();
+            network_ChannelCreate( p_intf );
         }
 
         psz_channel = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
-                             GTK_WIDGET(button), "network_channel" ) ) );
+                        GTK_WIDGET(button), "network_channel_address" ) ) );
         i_channel_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
             lookup_widget( GTK_WIDGET(button), "network_channel_port" ) ) );
 
-        config_PutPszVariable( "channel_server", psz_channel );
+        config_PutPsz( p_intf, "channel-server", psz_channel );
         if( i_channel_port < 65536 )
         {
-            config_PutIntVariable( "channel_port", i_channel_port );
+            config_PutInt( p_intf, "channel-port", i_channel_port );
         }
 
         p_intf->p_sys->b_playing = 1;
-
     }
-    else
+    
+    /* HTTP */
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "network_http" ) )->active )
     {
-        /* Get the port number and make sure it will not
-         * overflow 5 characters */
-        i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
-                     lookup_widget( GTK_WIDGET(button), "network_port" ) ) );
-        if( i_port > 65535 )
+        /* get the url */
+        psz_address = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+                        GTK_WIDGET(button), "network_http_url" ) ) );
+
+        /* Allocate room for "protocol://url" */
+        psz_source = malloc( 7 /* "http://" */
+                             + strlen( psz_address ) + 1 /* "\0" */ );
+        if( psz_source == NULL )
         {
-            intf_ErrMsg( "intf error: invalid port %i", i_port );
+            return;
         }
 
-        /* do we have a broadcast address */
-        b_broadcast = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
-            lookup_widget( GTK_WIDGET(button), "network_broadcast_check" ) ) );
-        if( b_broadcast )
-        {
-            char *  psz_broadcast;
-            psz_broadcast = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
-                            GTK_WIDGET(button), "network_broadcast" ) ) );
-            /* Allocate room for "protocol://server:port" */
-            psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
-                                   + strlen( psz_server ) + 2 /* "@:" */
-                                   + 5 /* 0-65535 */
-                                   + strlen( psz_broadcast ) + 2 /* "::" */ 
-                                   + 1 /* "\0" */ );
-            if( psz_source == NULL )
-            {
-                return;
-            }
-
-            /* Build source name and add it to playlist */
-            sprintf( psz_source, "%s://%s@:%i/%s", psz_protocol,
-                                                  psz_server,
-                                                  i_port,
-                                                  psz_broadcast );
-        }
-        else
-        {
-            /* Allocate room for "protocol://server:port" */
-            psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
-                                   + strlen( psz_server ) + 2 /* "@:" */
-                                   + 5 /* 0-65535 */ + 1 /* "\0" */ );
-            if( psz_source == NULL )
-            {
-                return;
-            }
-           
-            /* Build source name and add it to playlist */
-            sprintf( psz_source, "%s://%s@:%i",
-                     psz_protocol, psz_server, i_port );
-        }
+        /* Build source name and add it to playlist */
+        sprintf( psz_source, "http://%s", psz_address );
 
-        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+        playlist_Add( p_playlist, 0, psz_source );
         free( psz_source );
-        
+
         /* catch the GTK CList */
         p_playlist_clist = GTK_CLIST( gtk_object_get_data(
             GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
         /* update the display */
-        GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+        GtkRebuildCList( p_playlist_clist, p_playlist );
+
+#if 0
+        intf_PlaylistJumpto( p_playlist, i_end - 1 );
+#endif
+    }
+
+    /* This shouldn't occur */
+    else
+    {
+        msg_Err( p_intf, "unknown protocol toggle button position" );
+        return;
+    }
 
-        intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    /* add the item to the playlist if the channel server wasn't chosen */
+    if( !b_channel )
+    {
     }
+
+    vlc_object_release( p_playlist );
 }
 
 void GtkNetworkOpenCancel( GtkButton * button, gpointer user_data)
@@ -433,72 +515,81 @@ void GtkNetworkOpenCancel( GtkButton * button, gpointer user_data)
 }
 
 
-void GtkNetworkOpenBroadcast( GtkToggleButton * togglebutton,
-                              gpointer user_data )
+void GtkNetworkOpenUDP( GtkToggleButton *togglebutton,
+                                        gpointer user_data )
 {
     GtkWidget *     p_network;
 
     p_network = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
 
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_broadcast_combo" ),
-            gtk_toggle_button_get_active( togglebutton ) );
-
+                    "network_udp_port_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_broadcast" ),
-            gtk_toggle_button_get_active( togglebutton ) );
+                    "network_udp_port" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
 }
 
 
-void GtkNetworkOpenChannel( GtkToggleButton * togglebutton,
-                            gpointer user_data )
+void GtkNetworkOpenMulticast( GtkToggleButton *togglebutton,
+                                              gpointer user_data )
 {
     GtkWidget *     p_network;
-    boolean_t       b_channel;
-    boolean_t       b_broadcast;
 
     p_network = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
-    b_channel = gtk_toggle_button_get_active( togglebutton );
-    b_broadcast = gtk_toggle_button_get_active( gtk_object_get_data(
-                  GTK_OBJECT( p_network ), "network_broadcast_check" ) );
-        
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_channel_combo" ), b_channel ) ;
-
-    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_channel" ), b_channel );
-
+                    "network_multicast_address_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_channel_port" ), b_channel );
+                    "network_multicast_address_combo" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
 
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_channel_port_label" ), b_channel );
-
+                    "network_multicast_port_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_server_combo" ), ! b_channel );
+                    "network_multicast_port" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
+}
 
-    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_server_label" ), ! b_channel );
 
-    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_server" ), ! b_channel );
+void GtkNetworkOpenChannel( GtkToggleButton *togglebutton,
+                                       gpointer user_data )
+{
+    GtkWidget *     p_network;
 
+    p_network = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_port_label" ), ! b_channel );
-
+                    "network_channel_address_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_port" ), ! b_channel );
+                    "network_channel_address_combo" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
 
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_broadcast_check" ), ! b_channel );
-    
+                    "network_channel_port_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_broadcast_combo" ), b_broadcast && ! b_channel );
+                    "network_channel_port" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
+}
+
+
+void GtkNetworkOpenHTTP( GtkToggleButton *togglebutton,
+                                         gpointer user_data )
+{   
+    GtkWidget *     p_network;
 
+    p_network = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
-            "network_broadcast" ), b_broadcast && ! b_channel );
+                    "network_http_url_label" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
+    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
+                    "network_http_url" ),
+                    gtk_toggle_button_get_active( togglebutton ) );
 }
 
+
 /*****************************************************************************
  * Open satellite callbacks
  *****************************************************************************
@@ -526,12 +617,19 @@ gboolean GtkSatOpenShow( GtkWidget       *widget,
 void GtkSatOpenOk( GtkButton * button, gpointer user_data )
 {
     intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_sat" );
+    playlist_t *    p_playlist;
     GtkCList *      p_playlist_clist;
     char *          psz_source;
-    int             i_end = p_main->p_playlist->i_size;
     int             i_freq, i_srate;
     int             i_fec;
-    boolean_t       b_pol;
+    vlc_bool_t      b_pol;
+
+    p_playlist = vlc_object_find( p_intf->p_vlc,
+                                  VLC_OBJECT_PLAYLIST, FIND_CHILD );
+    if( p_playlist == NULL )
+    {
+        return;
+    }
 
     gtk_widget_hide( p_intf->p_sys->p_sat );
 
@@ -549,7 +647,7 @@ void GtkSatOpenOk( GtkButton * button, gpointer user_data )
     i_fec = strtol( gtk_entry_get_text( GTK_ENTRY( GTK_COMBO( 
                 lookup_widget( GTK_WIDGET( button ), "sat_fec" )
                 )->entry ) ), NULL, 10 );
-        
+
     /* Select frequency and symbol rate */
     i_freq = gtk_spin_button_get_value_as_int(
                               GTK_SPIN_BUTTON( lookup_widget(
@@ -568,7 +666,7 @@ void GtkSatOpenOk( GtkButton * button, gpointer user_data )
     /* Build source name and add it to playlist */
     sprintf( psz_source, "%s:%d,%d,%d,%d",
              "satellite", i_freq, b_pol, i_fec, i_srate );
-    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+    playlist_Add( p_playlist, 0, psz_source );
     free( psz_source );
 
     /* catch the GTK CList */
@@ -576,15 +674,19 @@ void GtkSatOpenOk( GtkButton * button, gpointer user_data )
         GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
 
     /* update the display */
-    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+    GtkRebuildCList( p_playlist_clist, p_playlist );
 
     /* stop current item, select added item */
-    if( p_input_bank->pp_input[0] != NULL )
+#if 0
+    if( p_intf->p_vlc->p_input_bank->pp_input[0] != NULL )
     {
-        p_input_bank->pp_input[0]->b_eof = 1;
+        p_intf->p_vlc->p_input_bank->pp_input[0]->b_eof = 1;
     }
 
-    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    intf_PlaylistJumpto( p_intf->p_vlc->p_playlist, i_end - 1 );
+#endif
+
+    vlc_object_release( p_playlist );
 }