]> git.sesse.net Git - vlc/blobdiff - modules/gui/pda/pda_callbacks.c
PDA Interface:
[vlc] / modules / gui / pda / pda_callbacks.c
index 2c07645ea778e965fde273a4c54ece968a707409..f9d1e9dba89c8c1533ce6f08617fecf827a70ae2 100644 (file)
@@ -2,7 +2,7 @@
  * pda_callbacks.c : Callbacks for the pda Linux Gtk+ plugin.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: pda_callbacks.c,v 1.3 2003/11/07 07:59:00 jpsaman Exp $
+ * $Id: pda_callbacks.c,v 1.15 2003/11/21 09:23:49 jpsaman Exp $
  *
  * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
  *
@@ -35,6 +35,8 @@
 #include <dirent.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <pwd.h>
+#include <grp.h>
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
@@ -47,7 +49,9 @@
 #include "pda_support.h"
 #include "pda.h"
 
-static char* get_file_stat(const char *path, uid_t *uid, gid_t *gid, off_t *size);
+#define VLC_MAX_MRL     256
+
+static char *get_file_perms(struct stat st);
 
 /*****************************************************************************
  * Useful function to retrieve p_intf
@@ -83,6 +87,31 @@ void * E_(__GtkGetIntf)( GtkWidget * widget )
     return p_data;
 }
 
+void PlaylistAddItem(GtkWidget *widget, gchar *name)
+{
+    GtkTreeView  *p_tvplaylist = NULL;
+
+    /* Add to playlist object. */
+    p_tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(widget), "tvPlaylist");
+    if (p_tvplaylist)
+    {
+        GtkTreeModel *p_play_model;
+        GtkTreeIter   p_play_iter;
+
+        p_play_model = gtk_tree_view_get_model(p_tvplaylist);
+
+        if (p_play_model)
+        {
+            /* Add a new row to the playlist treeview model */
+            gtk_list_store_append (GTK_LIST_STORE(p_play_model), &p_play_iter);
+            gtk_list_store_set (GTK_LIST_STORE(p_play_model), &p_play_iter,
+                                    0, name,   /* Add path to it !!! */
+                                    1, "no info",
+                                    -1 );
+        }
+    }
+}
+
 void PlaylistRebuildListStore( GtkListStore * p_list, playlist_t * p_playlist )
 {
     GtkTreeIter iter;
@@ -103,21 +132,16 @@ void PlaylistRebuildListStore( GtkListStore * p_list, playlist_t * p_playlist )
                             0, ppsz_text[0],
                             1, ppsz_text[1],
                             -1);
-
     }
     vlc_mutex_unlock( &p_playlist->object_lock );
 }
 
-/*****************************************************************************
- * Helper functions for URL changes in Media and Preferences notebook pages.
- ****************************************************************************/
+#if 0
 void MediaURLOpenChanged( GtkWidget *widget, gchar *psz_url )
 {
     intf_thread_t *p_intf = GtkGetIntf( widget );
-    playlist_t *p_playlist;
-    GtkListStore *p_liststore;
+    playlist_t   *p_playlist;
 
-    // Add p_url to playlist .... but how ?
     p_playlist = (playlist_t *)
              vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
 
@@ -139,32 +163,30 @@ void MediaURLOpenChanged( GtkWidget *widget, gchar *psz_url )
                           PLAYLIST_APPEND, PLAYLIST_END );
         }
         vlc_object_release(  p_playlist );
-        msg_Dbg(p_intf, "MediaURLOpenChange: Populating GtkTreeView Playlist" );
-        p_liststore = gtk_list_store_new (2,
-                                   G_TYPE_STRING,
-                                   G_TYPE_STRING);
-        PlaylistRebuildListStore(p_liststore, p_playlist);
-        msg_Dbg(p_intf, "MediaURLOpenChange: Updating GtkTreeView Playlist" );
-        gtk_tree_view_set_model(p_intf->p_sys->p_tvplaylist, (GtkTreeModel*) p_liststore);     
+
+        PlaylistAddItem(GTK_WIDGET(widget), psz_url);
     }
 }
+#endif
 
 /*****************************************************************
  * Read directory helper function.
  ****************************************************************/
-void ReadDirectory( intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir )
+void ReadDirectory(intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir )
 {
-//    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(p_list) );
-    GtkTreeIter iter;
+    GtkTreeIter    iter;
     struct dirent **namelist;
+    struct passwd *pw;
+    struct group  *grp;
+    struct stat    st;
     int n=-1, status=-1;
 
-    msg_Dbg(p_intf, "changing to dir %s", psz_dir);
+    msg_Dbg(p_intf, "Changing to dir %s", psz_dir);
     if (psz_dir)
     {
        status = chdir(psz_dir);
        if (status<0)
-          msg_Err( p_intf, "permision denied" );
+          msg_Dbg(p_intf, "permision denied" );
     }
     n = scandir(".", &namelist, 0, alphasort);
 
@@ -173,52 +195,57 @@ void ReadDirectory( intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir )
     else
     {
         int i;
-        uint32_t uid;
-        uint32_t gid;
-        off_t  size;
-        gchar *ppsz_text[5];
+        gchar *ppsz_text[4];
 
-        msg_Dbg( p_intf, "updating interface" );
-
-        /* XXX : kludge temporaire pour yopy */
-        ppsz_text[0]="..";
-        ppsz_text[1] = get_file_stat("..", &uid, &gid, &size);
-        ppsz_text[2] = "";
-        ppsz_text[3] = "";
-        ppsz_text[4] = "";
-
-        /* Add a new row to the model */
-        gtk_list_store_append (p_list, &iter);
-        gtk_list_store_set (p_list, &iter,
-                            0, ppsz_text[0],
-                            1, ppsz_text[1],
-                            2, size,
-                            3, ppsz_text[3],
-                            4, ppsz_text[4],
-                            -1);
-
-        if (ppsz_text[1]) free(ppsz_text[1]);
-
-        /* kludge */
-        for (i=0; i<n; i++)
+        if (lstat("..", &st)==0)
         {
-            if (namelist[i]->d_name[0] != '.')
+            /* user, group  */
+            pw  = getpwuid(st.st_uid);
+            grp = getgrgid(st.st_gid);
+
+            /* XXX : kludge temporaire pour yopy */
+            ppsz_text[0] = "..";
+            ppsz_text[1] = get_file_perms(st);
+            ppsz_text[2] = pw->pw_name;
+            ppsz_text[3] = grp->gr_name;
+
+            /* Add a new row to the model */
+            gtk_list_store_append (p_list, &iter);
+            gtk_list_store_set (p_list, &iter,
+                                0, ppsz_text[0],
+                                1, ppsz_text[1],
+                                2, st.st_size,
+                                3, ppsz_text[2],
+                                4, ppsz_text[3],
+                                -1);
+
+            if (ppsz_text[1]) free(ppsz_text[1]);
+        }
+            /* kludge */
+        for (i=0; i<n; i++)
+        {           
+            if ((namelist[i]->d_name[0] != '.') &&
+                (lstat(namelist[i]->d_name, &st)==0))
             {
+                /* user, group  */
+                pw  = getpwuid(st.st_uid);
+                grp = getgrgid(st.st_gid);
+
                 /* This is a list of strings. */
                 ppsz_text[0] = namelist[i]->d_name;
-                ppsz_text[1] = get_file_stat(namelist[i]->d_name, &uid, &gid, &size);
-                ppsz_text[2] = "";
-                ppsz_text[3] = "";
-                ppsz_text[4] = "";
-
-//                msg_Dbg(p_intf, "(%d) file: %s permission: %s user: %ull group: %ull size: %ull", i, ppsz_text[0], ppsz_text[1], uid, gid, size );
+                ppsz_text[1] = get_file_perms(st);
+                ppsz_text[2] = pw->pw_name;
+                ppsz_text[3] = grp->gr_name;
+#if 0
+                msg_Dbg(p_intf, "(%d) file: %s permission: %s user: %s group: %s", i, ppsz_text[0], ppsz_text[1], ppsz_text[2], ppsz_text[3] );
+#endif
                 gtk_list_store_append (p_list, &iter);
                 gtk_list_store_set (p_list, &iter,
                                     0, ppsz_text[0],
                                     1, ppsz_text[1],
-                                    2, size,
-                                    3, ppsz_text[3],
-                                    4, ppsz_text[4],
+                                    2, st.st_size,
+                                    3, ppsz_text[2],
+                                    4, ppsz_text[3],
                                     -1);
 
                 if (ppsz_text[1]) free(ppsz_text[1]);
@@ -226,90 +253,77 @@ void ReadDirectory( intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir )
         }
         free(namelist);
     }
-
-    /* now switch to the "file" tab */
-    if (p_intf->p_sys->p_mediabook)
-    {
-       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_mediabook) );
-       gtk_notebook_set_page(p_intf->p_sys->p_mediabook,0);
-    }
 }
 
-static char* get_file_stat(const char *path, uid_t *uid, gid_t *gid, off_t *size)
+static char *get_file_perms(const struct stat st)
 {
-    struct stat st;
-    char *perm;
+    char  *perm;
 
     perm = (char *) malloc(sizeof(char)*10);
     strncpy( perm, "----------", sizeof("----------"));
-    if (lstat(path, &st)==0)
+
+    /* determine permission modes */
+    if (S_ISLNK(st.st_mode))
+        perm[0]= 'l';
+    else if (S_ISDIR(st.st_mode))
+        perm[0]= 'd';
+    else if (S_ISCHR(st.st_mode))
+        perm[0]= 'c';
+    else if (S_ISBLK(st.st_mode))
+        perm[0]= 'b';
+    else if (S_ISFIFO(st.st_mode))
+        perm[0]= 'f';
+    else if (S_ISSOCK(st.st_mode))
+        perm[0]= 's';
+    else if (S_ISREG(st.st_mode))
+        perm[0]= '-';
+    else /* Unknown type is an error */
+        perm[0]= '?';
+    /* Get file permissions */
+    /* User */
+    if (st.st_mode & S_IRUSR)
+        perm[1]= 'r';
+    if (st.st_mode & S_IWUSR)
+        perm[2]= 'w';
+    if (st.st_mode & S_IXUSR)
     {
-        /* user, group, filesize */
-        *uid = st.st_uid;
-        *gid = st.st_gid;
-        *size = st.st_size;
-        /* determine permission modes */
-        if (S_ISLNK(st.st_mode))
-            perm[0]= 'l';
-        else if (S_ISDIR(st.st_mode))
-            perm[0]= 'd';
-        else if (S_ISCHR(st.st_mode))
-            perm[0]= 'c';
-        else if (S_ISBLK(st.st_mode))
-            perm[0]= 'b';
-        else if (S_ISFIFO(st.st_mode))
-            perm[0]= 'f';
-        else if (S_ISSOCK(st.st_mode))
-            perm[0]= 's';
-        else if (S_ISREG(st.st_mode))
-            perm[0]= '-';
-        else /* Unknown type is an error */
-            perm[0]= '?';
-        /* Get file permissions */
-        /* User */
-        if (st.st_mode & S_IRUSR)
-            perm[1]= 'r';
-        if (st.st_mode & S_IWUSR)
-            perm[2]= 'w';
-        if (st.st_mode & S_IXUSR)
-        {
-            if (st.st_mode & S_ISUID)
-                perm[3] = 's';
-            else
-                perm[3]= 'x';
-        }
-        else if (st.st_mode & S_ISUID)
-            perm[3] = 'S';
-        /* Group */
-        if (st.st_mode & S_IRGRP)
-            perm[4]= 'r';
-        if (st.st_mode & S_IWGRP)
-            perm[5]= 'w';
-        if (st.st_mode & S_IXGRP)
-        {
-            if (st.st_mode & S_ISGID)
-                perm[6] = 's';
-            else
-                perm[6]= 'x';
-        }
-        else if (st.st_mode & S_ISGID)
-            perm[6] = 'S';
-        /* Other */
-        if (st.st_mode & S_IROTH)
-            perm[7]= 'r';
-        if (st.st_mode & S_IWOTH)
-            perm[8]= 'w';
-        if (st.st_mode & S_IXOTH)
-        {
-            // 'sticky' bit
-            if (st.st_mode &S_ISVTX)
-                perm[9] = 't';
-            else
-                perm[9]= 'x';
-        }
-        else if (st.st_mode &S_ISVTX)
-            perm[9]= 'T';
+        if (st.st_mode & S_ISUID)
+            perm[3] = 's';
+        else
+            perm[3]= 'x';
+    }
+    else if (st.st_mode & S_ISUID)
+        perm[3] = 'S';
+    /* Group */
+    if (st.st_mode & S_IRGRP)
+        perm[4]= 'r';
+    if (st.st_mode & S_IWGRP)
+        perm[5]= 'w';
+    if (st.st_mode & S_IXGRP)
+    {
+        if (st.st_mode & S_ISGID)
+            perm[6] = 's';
+        else
+            perm[6]= 'x';
+    }
+    else if (st.st_mode & S_ISGID)
+        perm[6] = 'S';
+    /* Other */
+    if (st.st_mode & S_IROTH)
+        perm[7]= 'r';
+    if (st.st_mode & S_IWOTH)
+        perm[8]= 'w';
+    if (st.st_mode & S_IXOTH)
+    {
+        // 'sticky' bit
+        if (st.st_mode &S_ISVTX)
+            perm[9] = 't';
+        else
+            perm[9]= 'x';
     }
+    else if (st.st_mode &S_ISVTX)
+        perm[9]= 'T';
+
     return perm;
 }
 
@@ -334,81 +348,13 @@ onPDADeleteEvent                       (GtkWidget       *widget,
 }
 
 
-void
-onFileOpen                             (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) );
-    GtkListStore *list;
-
-    if (p_intf->p_sys->p_notebook)
-    {
-       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
-       gtk_notebook_set_page(p_intf->p_sys->p_notebook,0);
-    }
-    if (p_intf->p_sys->p_mediabook)
-    {
-       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_mediabook) );
-       gtk_notebook_set_page(p_intf->p_sys->p_mediabook,0);
-    }
-    gdk_window_raise( p_intf->p_sys->p_window->window );
-    if (p_intf->p_sys->p_tvfile)
-    {
-       /* Get new directory listing */
-       list = gtk_list_store_new (5,
-                                  G_TYPE_STRING,
-                                  G_TYPE_STRING,
-                                  G_TYPE_ULONG,
-                                  G_TYPE_STRING,
-                                  G_TYPE_STRING);
-       ReadDirectory(p_intf, list, ".");
-
-       /* Update TreeView */
-       gtk_tree_view_set_model(p_intf->p_sys->p_tvfile, (GtkTreeModel*) list);
-       g_object_unref(list);
-       gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(p_intf->p_sys->p_tvfile)),GTK_SELECTION_NONE);
-    }
-}
-
-
-void
-onPlaylist                             (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(button) );
-
-    // Toggle notebook
-    if (p_intf->p_sys->p_notebook)
-    {
-        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
-        gtk_notebook_set_page(p_intf->p_sys->p_notebook,1);
-    }
-    gdk_window_raise( p_intf->p_sys->p_window->window );
-}
-
-
-void
-onPreferences                          (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) );
-
-    if (p_intf->p_sys->p_notebook)
-    {
-       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
-       gtk_notebook_set_page(p_intf->p_sys->p_notebook,2);
-    }
-    gdk_window_raise( p_intf->p_sys->p_window->window );
-}
-
-
 void
 onRewind                               (GtkButton       *button,
                                         gpointer         user_data)
 {
     intf_thread_t *  p_intf = GtkGetIntf( button );
 
-    if( p_intf->p_sys->p_input != NULL )
+    if (p_intf->p_sys->p_input != NULL)
     {
         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_SLOWER );
     }
@@ -421,7 +367,7 @@ onPause                                (GtkButton       *button,
 {
     intf_thread_t *  p_intf = GtkGetIntf( button );
 
-    if( p_intf->p_sys->p_input != NULL )
+    if (p_intf->p_sys->p_input != NULL)
     {
         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PAUSE );
     }
@@ -432,30 +378,22 @@ void
 onPlay                                 (GtkButton       *button,
                                         gpointer         user_data)
 {
-     intf_thread_t *  p_intf = GtkGetIntf( GTK_WIDGET( button ) );
-     playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-
-     if( p_playlist == NULL )
-     {
-         /* Display open page */
-         onFileOpen(button,user_data);
-     }
-
-     /* If the playlist is empty, open a file requester instead */
-     vlc_mutex_lock( &p_playlist->object_lock );
-     if( p_playlist->i_size )
-     {
-         vlc_mutex_unlock( &p_playlist->object_lock );
-         playlist_Play( p_playlist );
-         vlc_object_release( p_playlist );
-         gdk_window_lower( p_intf->p_sys->p_window->window );
-     }
-     else
-     {
-         vlc_mutex_unlock( &p_playlist->object_lock );
-         vlc_object_release( p_playlist );
-         /* Display open page */
-         onFileOpen(button,user_data);
+    intf_thread_t *  p_intf = GtkGetIntf( GTK_WIDGET( button ) );
+    playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+
+    if (p_playlist)
+    {
+        vlc_mutex_lock( &p_playlist->object_lock );
+        if (p_playlist->i_size)
+        {
+            vlc_mutex_unlock( &p_playlist->object_lock );
+            playlist_Play( p_playlist );
+        }
+        else
+        {
+            vlc_mutex_unlock( &p_playlist->object_lock );
+        }
+        vlc_object_release( p_playlist );
     }
 }
 
@@ -467,11 +405,10 @@ onStop                                 (GtkButton       *button,
     intf_thread_t *  p_intf = GtkGetIntf( GTK_WIDGET( button ) );
     playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
                                                        FIND_ANYWHERE );
-    ifp_playlist)
+    if (p_playlist)
     {
         playlist_Stop( p_playlist );
         vlc_object_release( p_playlist );
-        gdk_window_raise( p_intf->p_sys->p_window->window );
     }
 }
 
@@ -480,9 +417,9 @@ void
 onForward                              (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *  p_intf = GtkGetIntf( button );
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
-    if( p_intf->p_sys->p_input != NULL )
+    if (p_intf->p_sys->p_input != NULL)
     {
         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_FASTER );
     }
@@ -499,9 +436,8 @@ onAbout                                (GtkButton       *button,
     if (p_intf->p_sys->p_notebook)
     {
         gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
-        gtk_notebook_set_page(p_intf->p_sys->p_notebook,3);
+        gtk_notebook_set_page(p_intf->p_sys->p_notebook,6);
     }
-    gdk_window_raise( p_intf->p_sys->p_window->window );
 }
 
 
@@ -534,34 +470,16 @@ SliderPress                            (GtkWidget       *widget,
     return TRUE;
 }
 
-gboolean addSelectedToPlaylist(GtkTreeModel *model,
+void addSelectedToPlaylist(GtkTreeModel *model,
                                GtkTreePath *path,
                                GtkTreeIter *iter,
                                gpointer *userdata)
 {
-    GtkTreeView  *tvplaylist = NULL;
-    GtkTreeModel *play_model;
-    GtkTreeIter   play_iter;
     gchar *filename;
-    
+
     gtk_tree_model_get(model, iter, 0, &filename, -1);
-    g_print("selected %s\n", filename);
 
-    tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(userdata), "tvPlaylist");
-    if (NULL != tvplaylist)
-    {
-        play_model = gtk_tree_view_get_model(tvplaylist);
-        /* Add a new row to the playlist treeview model */
-        gtk_list_store_append (play_model, &play_iter);
-        gtk_list_store_set (play_model, &play_iter,
-                                0, filename,   /* Add path to it !!! */
-                                1, "00:00:00",
-                                -1 );
-        /* do we need to unref ?? */
-    }
-    else
-//       msg_Err(p_intf, "Error obtaining pointer to Play List");
-       g_print("Error obtaining pointer to Play List");
+    PlaylistAddItem(GTK_WIDGET(userdata), filename);
 }
 
 void
@@ -570,291 +488,285 @@ onFileListRow                          (GtkTreeView     *treeview,
                                         GtkTreeViewColumn *column,
                                         gpointer         user_data)
 {
-    GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);    
-    g_print("onFileListRow\n");
-    gtk_tree_selection_selected_foreach(selection, addSelectedToPlaylist, (gpointer) treeview);
-}
-
-
-void
-onFileListColumns                      (GtkTreeView     *treeview,
-                                        gpointer         user_data)
-{
-    g_print("onFileListColumn\n");
-}
-
+    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(treeview) );
+    GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
 
-gboolean
-onFileListRowSelected                  (GtkTreeView     *treeview,
-                                        gboolean         start_editing,
-                                        gpointer         user_data)
-{
-    g_print("onFileListRowSelected\n");
-    return FALSE;
-}
-
-
-void
-onAddFileToPlaylist                    (GtkButton       *button,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryMRLChanged                      (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-    g_print("onMRLChanged\n");
-}
-
-
-void
-onEntryMRLEditingDone                  (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-    g_print("onMRLEditingDone\n");
-}
-
-
-void
-onNetworkPortChanged                   (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryNetworkPortEditingDone          (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onNetworkAddressChanged                (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryNetworkAddressEditingDone       (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onNetworkTypeChanged                   (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryNetworkTypeEditingDone          (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onProtocolTypeChanged                  (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryProtocolTypeEditingDone         (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onMRLTypeChanged                       (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryMRLTypeEditingDone              (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onStreamTypeChanged                    (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-onEntryStreamTypeEditingDone           (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
-
-}
+    if (gtk_tree_selection_count_selected_rows(selection) == 1)
+    {
+        struct stat   st;
+        GtkTreeModel *model;
+        GtkTreeIter   iter;
+        gchar        *filename;
 
+        /* This might be a directory selection */
+        model = gtk_tree_view_get_model(treeview);
+        if (!model)
+            msg_Err(p_intf, "PDA: Filelist model contains a NULL pointer\n" );
 
-void
-onAddNetworkPlaylist                   (GtkButton       *button,
-                                        gpointer         user_data)
-{
+        if (path == NULL )
+        {
 #if 0
-    GtkEntry *p_mrl;
+            GList* list;
 
-    p_mrl = (GtkEntry*) lookup_widget(GTK_WIDGET(button),"" );
-    if (NULL != p_mrl)
-    {
-        GtkTreeView  *tvplaylist = NULL;
-        GtkTreeModel *play_model;
-        GtkTreeIter   play_iter;
-        gchar *name;
-        
-        tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(button), "tvPlaylist");
-        if (NULL != tvplaylist)
-        {
-            play_model = gtk_tree_view_get_model(tvplaylist);
-            /* Add a new row to the playlist treeview model */
-            gtk_list_store_append (play_model, &play_iter);
-            gtk_list_store_set (play_model, &play_iter,
-                                    0, name,   /* Add path to it !!! */
-                                    1, "00:00:00",
-                                    -1 );
-            /* do we need to unref ?? */
+            list = gtk_tree_selection_get_selected_rows(selection,model);
+            if (g_list_length(list) == 1)
+            {
+                filename = (gchar *) g_list_nth_data(list,0);
+                msg_Dbg(p_intf, "PDA: filename = %s", (gchar*) filename );
+                PlaylistAddItem(GTK_WIDGET(treeview), filename);
+            }
+            g_list_foreach (list, gtk_tree_path_free, NULL);
+            g_list_free (list);
+#endif
         }
         else
-    //       msg_Err(p_intf, "Error obtaining pointer to Play List");
-           g_print("Error obtaining pointer to Play List");
-    }
-#endif
-}
+        {
+            if (!gtk_tree_model_get_iter(model, &iter, path))
+                msg_Err( p_intf, "PDA: Could not get iter from model" );
 
+            gtk_tree_model_get(model, &iter, 0, &filename, -1);
 
-void
-onV4LAudioChanged                      (GtkEditable     *editable,
-                                        gpointer         user_data)
-{
-
+            if (stat((char*)filename, &st)==0)
+            {
+                if (S_ISDIR(st.st_mode))
+                {
+                    GtkListStore *p_model = NULL;
+
+                    /* Get new directory listing */
+                    p_model = gtk_list_store_new (5,
+                                               G_TYPE_STRING,
+                                               G_TYPE_STRING,
+                                               G_TYPE_UINT64,
+                                               G_TYPE_STRING,
+                                               G_TYPE_STRING);
+                    if (p_model)
+                    {
+                        ReadDirectory(p_intf, p_model, filename);
+
+                        /* Update TreeView with new model */
+                        gtk_tree_view_set_model(treeview, (GtkTreeModel*) p_model);
+                        g_object_unref(p_model);
+                    }
+                }
+                else
+                {
+                    gtk_tree_selection_selected_foreach(selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) treeview);
+                }
+            }
+        }
+    }
+    else
+    {
+        gtk_tree_selection_selected_foreach(selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) treeview);
+    }
 }
 
-
 void
-onEntryV4LAudioEditingDone             (GtkCellEditable *celleditable,
+onAddFileToPlaylist                    (GtkButton       *button,
                                         gpointer         user_data)
 {
+    GtkTreeView       *treeview = NULL;
 
+    treeview = (GtkTreeView *) lookup_widget( GTK_WIDGET(button), "tvFileList");
+    if (treeview)
+    {
+        onFileListRow(treeview, NULL, NULL, NULL );
+    }
 }
 
 
 void
-onV4LVideoChanged                      (GtkEditable     *editable,
+NetworkBuildMRL                        (GtkEditable     *editable,
                                         gpointer         user_data)
 {
+    GtkSpinButton *networkPort = NULL;
+    GtkEntry      *entryMRL = NULL;
+    GtkEntry      *networkType = NULL;
+    GtkEntry      *networkAddress = NULL;
+    GtkEntry      *networkProtocol = NULL;
+    const gchar   *mrlNetworkType;
+    const gchar   *mrlAddress;
+    const gchar   *mrlProtocol;
+    gint           mrlPort;
+    char           text[VLC_MAX_MRL];
+    int            pos = 0;
 
-}
+    entryMRL = (GtkEntry*) lookup_widget( GTK_WIDGET(editable), "entryMRL" );
 
+    networkType     = (GtkEntry*) lookup_widget( GTK_WIDGET(editable), "entryNetworkType" );
+    networkAddress  = (GtkEntry*) lookup_widget( GTK_WIDGET(editable), "entryNetworkAddress" );
+    networkPort     = (GtkSpinButton*) lookup_widget( GTK_WIDGET(editable), "entryNetworkPort" );
+    networkProtocol = (GtkEntry*) lookup_widget( GTK_WIDGET(editable), "entryNetworkProtocolType" );
 
-void
-onEntryV4LVideoEditingDone             (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
+    mrlNetworkType = gtk_entry_get_text(GTK_ENTRY(networkType));
+    mrlAddress     = gtk_entry_get_text(GTK_ENTRY(networkAddress));
+    mrlPort        = gtk_spin_button_get_value_as_int(networkPort);
+    mrlProtocol    = gtk_entry_get_text(GTK_ENTRY(networkProtocol));
 
-}
+    /* Build MRL from parts ;-) */
+    pos = snprintf( &text[0], VLC_MAX_MRL, "%s://", (char*)mrlProtocol);
+    if (strncasecmp( (char*)mrlNetworkType, "multicast",9)==0)
+    {
+        pos += snprintf( &text[pos], VLC_MAX_MRL - pos, "@" );
+    }
+    pos += snprintf( &text[pos], VLC_MAX_MRL - pos, "%s:%d", (char*)mrlAddress, (int)mrlPort );
 
+    if (pos >= VLC_MAX_MRL)
+        text[VLC_MAX_MRL-1]='\0';
 
-void
-onAddCameraToPlaylist                  (GtkButton       *button,
-                                        gpointer         user_data)
-{
-
+    gtk_entry_set_text(entryMRL,text);
 }
 
-
 void
-onVideoDeviceChanged                   (GtkEditable     *editable,
+onAddNetworkPlaylist                   (GtkButton       *button,
                                         gpointer         user_data)
 {
+    GtkEntry     *p_mrl = NULL;
+    const gchar  *mrl_name;
 
-}
-
-
-void
-onEntryVideoDeviceEditingDone          (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
+    p_mrl = (GtkEntry*) lookup_widget(GTK_WIDGET(button),"entryMRL" );
+    if (p_mrl)
+    {
+        mrl_name = gtk_entry_get_text(p_mrl);
 
+        PlaylistAddItem(GTK_WIDGET(button), (gchar *)mrl_name);
+    }
 }
 
 
 void
-onVideoCodecChanged                    (GtkEditable     *editable,
+onAddCameraToPlaylist                  (GtkButton       *button,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GtkGetIntf( button );
+
+    GtkSpinButton *entryV4LChannel = NULL;
+    GtkSpinButton *entryV4LFrequency = NULL;
+    GtkSpinButton *entryV4LSampleRate = NULL;
+    GtkSpinButton *entryV4LQuality = NULL;
+    GtkSpinButton *entryV4LTuner = NULL;
+    gint    i_v4l_channel;
+    gint    i_v4l_frequency;
+    gint    i_v4l_samplerate;
+    gint    i_v4l_quality;
+    gint    i_v4l_tuner;
+
+    GtkEntry      *entryV4LVideoDevice = NULL;
+    GtkEntry      *entryV4LAudioDevice = NULL;
+    GtkEntry      *entryV4LNorm = NULL;
+    GtkEntry      *entryV4LSize = NULL;
+    GtkEntry      *entryV4LSoundDirection = NULL;
+    const gchar   *p_v4l_video_device;
+    const gchar   *p_v4l_audio_device;
+    const gchar   *p_v4l_norm;
+    const gchar   *p_v4l_size;
+    const gchar   *p_v4l_sound_direction;
+
+    /* MJPEG only */
+    GtkCheckButton *checkV4LMJPEG = NULL;
+    GtkSpinButton  *entryV4LDecimation = NULL;
+    gboolean        b_v4l_mjpeg;
+    gint            i_v4l_decimation;
+    /* end MJPEG only */
+
+    char v4l_mrl[VLC_MAX_MRL];
+    int pos;
+
+    pos = snprintf( &v4l_mrl[0], VLC_MAX_MRL, "v4l://");
+
+    entryV4LChannel    = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LChannel" );
+    entryV4LFrequency  = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LFrequency" );
+    entryV4LSampleRate = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LSampleRate" );
+    entryV4LQuality    = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LQuality" );
+    entryV4LTuner      = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LTuner" );
+
+    entryV4LVideoDevice  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryV4LVideoDevice" );
+    entryV4LAudioDevice  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryV4LAudioDevice" );
+    entryV4LNorm  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryV4LNorm" );
+    entryV4LSize  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryV4LSize" );
+    entryV4LSoundDirection  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryV4LSoundDirection" );
+
+    i_v4l_channel = gtk_spin_button_get_value_as_int(entryV4LChannel);
+    i_v4l_frequency = gtk_spin_button_get_value_as_int(entryV4LFrequency);
+    i_v4l_samplerate = gtk_spin_button_get_value_as_int(entryV4LSampleRate);
+    i_v4l_quality = gtk_spin_button_get_value_as_int(entryV4LQuality);
+    i_v4l_tuner = gtk_spin_button_get_value_as_int(entryV4LTuner);
+
+    p_v4l_video_device = gtk_entry_get_text(GTK_ENTRY(entryV4LVideoDevice));
+    p_v4l_audio_device = gtk_entry_get_text(GTK_ENTRY(entryV4LAudioDevice));
+    p_v4l_norm = gtk_entry_get_text(GTK_ENTRY(entryV4LNorm));
+    p_v4l_size  = gtk_entry_get_text(GTK_ENTRY(entryV4LSize));
+    p_v4l_sound_direction = gtk_entry_get_text(GTK_ENTRY(entryV4LSoundDirection));
+
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":%s", (char*)p_v4l_video_device );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":adev=%s", (char*)p_v4l_audio_device );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":norm=%s", (char*)p_v4l_norm );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":size=%s", (char*)p_v4l_size );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":%s", (char*)p_v4l_sound_direction );
+
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":channel=%d", (int)i_v4l_channel );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":frequency=%d", (int)i_v4l_frequency );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":samplerate=%d", (int)i_v4l_samplerate );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":quality=%d", (int)i_v4l_quality );
+    pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":tuner=%d", (int)i_v4l_tuner );
+
+    /* MJPEG only */
+    checkV4LMJPEG      = (GtkCheckButton*) lookup_widget( GTK_WIDGET(button), "checkV4LMJPEG" );
+    b_v4l_mjpeg = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkV4LMJPEG));
+    if (b_v4l_mjpeg)
+    {
+        entryV4LDecimation = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LDecimation" );
+        i_v4l_decimation = gtk_spin_button_get_value_as_int(entryV4LDecimation);
+        pos += snprintf( &v4l_mrl[pos], VLC_MAX_MRL - pos, ":mjpeg:%d", (int)i_v4l_decimation );
+    }
+    /* end MJPEG only */
 
-}
-
-
-void
-onEntryVideoCodecEditingDone           (GtkCellEditable *celleditable,
-                                        gpointer         user_data)
-{
+    if (pos >= VLC_MAX_MRL)
+    {
+        v4l_mrl[VLC_MAX_MRL-1]='\0';
+        msg_Err(p_intf, "Media Resource Locator is truncated to: %s", v4l_mrl);
+    }
 
+    PlaylistAddItem(GTK_WIDGET(button), (gchar*) &v4l_mrl);
 }
 
 
-void
-onVideoBitrateChanged                  (GtkEditable     *editable,
+gboolean
+PlaylistEvent                          (GtkWidget       *widget,
+                                        GdkEvent        *event,
                                         gpointer         user_data)
 {
-
+    return FALSE;
 }
 
 
 void
-onVideoBitrateEditingDone              (GtkCellEditable *celleditable,
+onPlaylistColumnsChanged               (GtkTreeView     *treeview,
                                         gpointer         user_data)
 {
-
 }
 
 
-void
-onAudioDeviceChanged                   (GtkEditable     *editable,
+gboolean
+onPlaylistRowSelected                  (GtkTreeView     *treeview,
+                                        gboolean         start_editing,
                                         gpointer         user_data)
 {
-
+    return FALSE;
 }
 
 
 void
-onEntryAudioDeviceEditingDone          (GtkCellEditable *celleditable,
+onPlaylistRow                          (GtkTreeView     *treeview,
+                                        GtkTreePath     *path,
+                                        GtkTreeViewColumn *column,
                                         gpointer         user_data)
 {
-
 }
 
 
 void
-onAudioCodecChanged                    (GtkEditable     *editable,
+onUpdatePlaylist                       (GtkButton       *button,
                                         gpointer         user_data)
 {
 
@@ -862,7 +774,7 @@ onAudioCodecChanged                    (GtkEditable     *editable,
 
 
 void
-onEntryAudioCodecEditingDone           (GtkCellEditable *celleditable,
+onDeletePlaylist                       (GtkButton       *button,
                                         gpointer         user_data)
 {
 
@@ -870,111 +782,137 @@ onEntryAudioCodecEditingDone           (GtkCellEditable *celleditable,
 
 
 void
-onAudioBitrateChanged                  (GtkEditable     *editable,
+onClearPlaylist                        (GtkButton       *button,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
+    msg_Dbg(p_intf, "Clear playlist" );
 }
 
 
 void
-onAudioBitrateEditingDone              (GtkCellEditable *celleditable,
+onPreferenceSave                       (GtkButton       *button,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
+    msg_Dbg(p_intf, "Preferences Save" );
 }
 
 
 void
-onAddServerToPlaylist                  (GtkButton       *button,
+onPreferenceApply                      (GtkButton       *button,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
-}
-
-
-gboolean
-PlaylistEvent                          (GtkWidget       *widget,
-                                        GdkEvent        *event,
-                                        gpointer         user_data)
-{
-    g_print("onPlaylistEvent\n");
-    return FALSE;
+    msg_Dbg(p_intf, "Preferences Apply" );
 }
 
 
 void
-onPlaylistColumnsChanged               (GtkTreeView     *treeview,
+onPreferenceCancel                     (GtkButton       *button,
                                         gpointer         user_data)
 {
-    g_print("onPlaylistColumnsChanged\n");
-}
-
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
-gboolean
-onPlaylistRowSelected                  (GtkTreeView     *treeview,
-                                        gboolean         start_editing,
-                                        gpointer         user_data)
-{
-  g_print("onPlaylistRowSelected\n");
-  return FALSE;
+    msg_Dbg(p_intf, "Preferences Cancel" );
 }
 
 
 void
-onPlaylistRow                          (GtkTreeView     *treeview,
-                                        GtkTreePath     *path,
-                                        GtkTreeViewColumn *column,
+onAddTranscodeToPlaylist               (GtkButton       *button,
                                         gpointer         user_data)
 {
-    g_print("onPlaylistRow\n");
-}
+    intf_thread_t *p_intf = GtkGetIntf( button );
 
+    GtkEntry       *entryVideoCodec = NULL;
+    GtkSpinButton  *entryVideoBitrate = NULL;
+    GtkSpinButton  *entryVideoBitrateTolerance = NULL;
+    GtkSpinButton  *entryVideoKeyFrameInterval = NULL;
+    GtkCheckButton *checkVideoDeinterlace = NULL;
+    GtkEntry       *entryAudioCodec = NULL;
+    GtkSpinButton  *entryAudioBitrate = NULL;
+    const gchar    *p_video_codec;
+    gint            i_video_bitrate;
+    gint            i_video_bitrate_tolerance;
+    gint            i_video_keyframe_interval;
+    gboolean        b_video_deinterlace;
+    const gchar    *p_audio_codec;
+    gint            i_audio_bitrate;
 
-void
-onUpdatePlaylist                       (GtkButton       *button,
-                                        gpointer         user_data)
-{
+    GtkEntry       *entryStdAccess = NULL;
+    GtkEntry       *entryStdMuxer = NULL;
+    GtkEntry       *entryStdURL = NULL;
+    GtkSpinButton  *entryStdTTL = NULL;
+    const gchar    *p_std_access;
+    const gchar    *p_std_muxer;
+    const gchar    *p_std_url;
+    gint            i_std_ttl;
 
-}
+    gchar mrl[VLC_MAX_MRL];
+    int   pos;
 
+    pos = snprintf( &mrl[0], VLC_MAX_MRL, "--sout '#transcode{");
 
-void
-onDeletePlaylist                       (GtkButton       *button,
-                                        gpointer         user_data)
-{
+    entryVideoCodec   = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryVideoCodec" );
+    entryVideoBitrate = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoBitrate" );
+    entryVideoBitrateTolerance = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoBitrateTolerance" );
+    entryVideoKeyFrameInterval = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoKeyFrameInterval" );
+    
+    p_video_codec = gtk_entry_get_text(GTK_ENTRY(entryVideoCodec));
+    i_video_bitrate = gtk_spin_button_get_value_as_int(entryVideoBitrate);
+    i_video_bitrate_tolerance = gtk_spin_button_get_value_as_int(entryVideoBitrateTolerance);
+    i_video_keyframe_interval = gtk_spin_button_get_value_as_int(entryVideoKeyFrameInterval);
+    
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "vcodec=%s,", (char*)p_video_codec );
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "vb=%d,", (int)i_video_bitrate );
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "vt=%d,", (int)i_video_bitrate_tolerance );
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "keyint=%d,", (int)i_video_keyframe_interval );
+
+    checkVideoDeinterlace = (GtkCheckButton*) lookup_widget( GTK_WIDGET(button), "checkVideoDeinterlace" );
+    b_video_deinterlace = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkVideoDeinterlace));
+    if (b_video_deinterlace)
+    {
+        pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "deinterlace," );
+    }
+    entryAudioCodec   = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryAudioCodec" );
+    entryAudioBitrate = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryAudioBitrate" );
 
-}
+    p_audio_codec = gtk_entry_get_text(GTK_ENTRY(entryAudioCodec));
+    i_audio_bitrate = gtk_spin_button_get_value_as_int(entryAudioBitrate);
 
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "acodec=%s,", (char*)p_audio_codec );
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "ab=%d", (int)i_audio_bitrate );
 
-void
-onClearPlaylist                        (GtkButton       *button,
-                                        gpointer         user_data)
-{
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "}:std{" );
 
-}
+    entryStdAccess = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryStdAccess" );
+    entryStdMuxer  = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryStdMuxer" );
+    entryStdURL = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryStdURL" );
+    entryStdTTL = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryStdTTL" );
 
+    p_std_access = gtk_entry_get_text(GTK_ENTRY(entryStdAccess));
+    p_std_muxer = gtk_entry_get_text(GTK_ENTRY(entryStdMuxer));
+    p_std_url = gtk_entry_get_text(GTK_ENTRY(entryStdURL));
 
-void
-onPreferenceSave                       (GtkButton       *button,
-                                        gpointer         user_data)
-{
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "access=%s,", (char*)p_std_access);
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "mux=%s,", (char*)p_std_muxer);
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "url=%s", (char*)p_std_url);
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, "}'");
 
-}
+    i_std_ttl = gtk_spin_button_get_value_as_int(entryStdTTL);
 
+    pos += snprintf( &mrl[pos], VLC_MAX_MRL - pos, " --ttl=%d", (int)i_std_ttl);
 
-void
-onPreferenceApply                      (GtkButton       *button,
-                                        gpointer         user_data)
-{
+    if (pos >= VLC_MAX_MRL)
+    {
+        mrl[VLC_MAX_MRL-1]='\0';
+        msg_Err(p_intf, "Media Resource Locator is truncated to: %s", mrl );
+    }
 
+    PlaylistAddItem(GTK_WIDGET(button), (gchar*) &mrl);
 }
 
 
-void
-onPreferenceCancel                     (GtkButton       *button,
-                                        gpointer         user_data)
-{
-
-}
-