]> git.sesse.net Git - vlc/blob - modules/gui/pda/pda_callbacks.c
PDA interface update:
[vlc] / modules / gui / pda / pda_callbacks.c
1 /*****************************************************************************
2  * pda_callbacks.c : Callbacks for the pda Linux Gtk+ plugin.
3  *****************************************************************************
4  * Copyright (C) 2000, 2001 VideoLAN
5  * $Id: pda_callbacks.c,v 1.2 2003/10/27 22:42:02 jpsaman Exp $
6  *
7  * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 /*****************************************************************************
25  * Preamble
26  *****************************************************************************/
27 #include <sys/types.h>                                              /* off_t */
28 #include <stdlib.h>
29 #include <vlc/vlc.h>
30 #include <vlc/intf.h>
31 #include <vlc/vout.h>
32
33 #include <stdio.h>
34 #include <string.h>
35 #include <dirent.h>
36 #include <sys/stat.h>
37 #include <unistd.h>
38
39 #ifdef HAVE_CONFIG_H
40 #  include <config.h>
41 #endif
42
43 #include <gtk/gtk.h>
44
45 #include "pda_callbacks.h"
46 #include "pda_interface.h"
47 #include "pda_support.h"
48 #include "pda.h"
49
50 static char* get_file_stat(const char *path, uid_t *uid, gid_t *gid, off_t *size);
51
52 /*****************************************************************************
53  * Useful function to retrieve p_intf
54  ****************************************************************************/
55 void * E_(__GtkGetIntf)( GtkWidget * widget )
56 {
57     void *p_data;
58
59     if( GTK_IS_MENU_ITEM( widget ) )
60     {
61         /* Look for a GTK_MENU */
62         while( widget->parent && !GTK_IS_MENU( widget ) )
63         {
64             widget = widget->parent;
65         }
66
67         /* Maybe this one has the data */
68         p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" );
69         if( p_data )
70         {
71             return p_data;
72         }
73
74         /* Otherwise, the parent widget has it */
75         widget = gtk_menu_get_attach_widget( GTK_MENU( widget ) );
76     }
77
78     /* We look for the top widget */
79     widget = gtk_widget_get_toplevel( GTK_WIDGET( widget ) );
80
81     p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" );
82
83     return p_data;
84 }
85
86 void PlaylistRebuildListStore( GtkListStore * p_list, playlist_t * p_playlist )
87 {
88     GtkTreeIter iter;
89     int         i_dummy;
90     gchar *     ppsz_text[2];
91     GdkColor    red;
92     red.red     = 65535;
93     red.blue    = 0;
94     red.green   = 0;
95
96     vlc_mutex_lock( &p_playlist->object_lock );
97     for( i_dummy = p_playlist->i_size ; i_dummy-- ; )
98     {
99         ppsz_text[0] = p_playlist->pp_items[i_dummy]->psz_name;
100         ppsz_text[1] = "no info";
101         gtk_list_store_append (p_list, &iter);
102         gtk_list_store_set (p_list, &iter,
103                             0, ppsz_text[0],
104                             1, ppsz_text[1],
105                             -1);
106
107     }
108     vlc_mutex_unlock( &p_playlist->object_lock );
109 }
110
111 /*****************************************************************************
112  * Helper functions for URL changes in Media and Preferences notebook pages.
113  ****************************************************************************/
114 void MediaURLOpenChanged( GtkWidget *widget, gchar *psz_url )
115 {
116     intf_thread_t *p_intf = GtkGetIntf( widget );
117     playlist_t *p_playlist;
118     GtkListStore *p_liststore;
119
120     // Add p_url to playlist .... but how ?
121     p_playlist = (playlist_t *)
122              vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
123
124     if( p_playlist ==  NULL)
125     {
126         return;
127     }
128
129     if( p_playlist )
130     {
131         if (p_intf->p_sys->b_autoplayfile)
132         {
133             playlist_Add( p_playlist, (char*)psz_url, 0, 0,
134                           PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END);
135         }
136         else
137         {
138             playlist_Add( p_playlist, (char*)psz_url, 0, 0,
139                           PLAYLIST_APPEND, PLAYLIST_END );
140         }
141         vlc_object_release(  p_playlist );
142         msg_Dbg(p_intf, "MediaURLOpenChange: Populating GtkTreeView Playlist" );
143         p_liststore = gtk_list_store_new (2,
144                                    G_TYPE_STRING,
145                                    G_TYPE_STRING);
146         PlaylistRebuildListStore(p_liststore, p_playlist);
147         msg_Dbg(p_intf, "MediaURLOpenChange: Updating GtkTreeView Playlist" );
148         gtk_tree_view_set_model(p_intf->p_sys->p_tvplaylist, (GtkTreeModel*) p_liststore);     
149     }
150 }
151
152 /*****************************************************************
153  * Read directory helper function.
154  ****************************************************************/
155 void ReadDirectory( intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir )
156 {
157 //    intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(p_list) );
158     GtkTreeIter iter;
159     struct dirent **namelist;
160     int n=-1, status=-1;
161
162     msg_Dbg(p_intf, "changing to dir %s", psz_dir);
163     if (psz_dir)
164     {
165        status = chdir(psz_dir);
166        if (status<0)
167           msg_Err( p_intf, "permision denied" );
168     }
169     n = scandir(".", &namelist, 0, alphasort);
170
171     if (n<0)
172         perror("scandir");
173     else
174     {
175         int i;
176         uint32_t uid;
177         uint32_t gid;
178         off_t  size;
179         gchar *ppsz_text[5];
180
181         msg_Dbg( p_intf, "updating interface" );
182
183         /* XXX : kludge temporaire pour yopy */
184         ppsz_text[0]="..";
185         ppsz_text[1] = get_file_stat("..", &uid, &gid, &size);
186         ppsz_text[2] = "";
187         ppsz_text[3] = "";
188         ppsz_text[4] = "";
189
190         /* Add a new row to the model */
191         gtk_list_store_append (p_list, &iter);
192         gtk_list_store_set (p_list, &iter,
193                             0, ppsz_text[0],
194                             1, ppsz_text[1],
195                             2, size,
196                             3, ppsz_text[3],
197                             4, ppsz_text[4],
198                             -1);
199
200         if (ppsz_text[1]) free(ppsz_text[1]);
201
202         /* kludge */
203         for (i=0; i<n; i++)
204         {
205             if (namelist[i]->d_name[0] != '.')
206             {
207                 /* This is a list of strings. */
208                 ppsz_text[0] = namelist[i]->d_name;
209                 ppsz_text[1] = get_file_stat(namelist[i]->d_name, &uid, &gid, &size);
210                 ppsz_text[2] = "";
211                 ppsz_text[3] = "";
212                 ppsz_text[4] = "";
213
214 //                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 );
215                 gtk_list_store_append (p_list, &iter);
216                 gtk_list_store_set (p_list, &iter,
217                                     0, ppsz_text[0],
218                                     1, ppsz_text[1],
219                                     2, size,
220                                     3, ppsz_text[3],
221                                     4, ppsz_text[4],
222                                     -1);
223
224                 if (ppsz_text[1]) free(ppsz_text[1]);
225             }
226         }
227         free(namelist);
228     }
229
230     /* now switch to the "file" tab */
231     if (p_intf->p_sys->p_mediabook)
232     {
233        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_mediabook) );
234        gtk_notebook_set_page(p_intf->p_sys->p_mediabook,0);
235     }
236 }
237
238 static char* get_file_stat(const char *path, uid_t *uid, gid_t *gid, off_t *size)
239 {
240     struct stat st;
241     char *perm;
242
243     perm = (char *) malloc(sizeof(char)*10);
244     strncpy( perm, "----------", sizeof("----------"));
245     if (lstat(path, &st)==0)
246     {
247         /* user, group, filesize */
248         *uid = st.st_uid;
249         *gid = st.st_gid;
250         *size = st.st_size;
251         /* determine permission modes */
252         if (S_ISLNK(st.st_mode))
253             perm[0]= 'l';
254         else if (S_ISDIR(st.st_mode))
255             perm[0]= 'd';
256         else if (S_ISCHR(st.st_mode))
257             perm[0]= 'c';
258         else if (S_ISBLK(st.st_mode))
259             perm[0]= 'b';
260         else if (S_ISFIFO(st.st_mode))
261             perm[0]= 'f';
262         else if (S_ISSOCK(st.st_mode))
263             perm[0]= 's';
264         else if (S_ISREG(st.st_mode))
265             perm[0]= '-';
266         else /* Unknown type is an error */
267             perm[0]= '?';
268         /* Get file permissions */
269         /* User */
270         if (st.st_mode & S_IRUSR)
271             perm[1]= 'r';
272         if (st.st_mode & S_IWUSR)
273             perm[2]= 'w';
274         if (st.st_mode & S_IXUSR)
275         {
276             if (st.st_mode & S_ISUID)
277                 perm[3] = 's';
278             else
279                 perm[3]= 'x';
280         }
281         else if (st.st_mode & S_ISUID)
282             perm[3] = 'S';
283         /* Group */
284         if (st.st_mode & S_IRGRP)
285             perm[4]= 'r';
286         if (st.st_mode & S_IWGRP)
287             perm[5]= 'w';
288         if (st.st_mode & S_IXGRP)
289         {
290             if (st.st_mode & S_ISGID)
291                 perm[6] = 's';
292             else
293                 perm[6]= 'x';
294         }
295         else if (st.st_mode & S_ISGID)
296             perm[6] = 'S';
297         /* Other */
298         if (st.st_mode & S_IROTH)
299             perm[7]= 'r';
300         if (st.st_mode & S_IWOTH)
301             perm[8]= 'w';
302         if (st.st_mode & S_IXOTH)
303         {
304             // 'sticky' bit
305             if (st.st_mode &S_ISVTX)
306                 perm[9] = 't';
307             else
308                 perm[9]= 'x';
309         }
310         else if (st.st_mode &S_ISVTX)
311             perm[9]= 'T';
312     }
313     return perm;
314 }
315
316 /*
317  * Main interface callbacks
318  */
319
320 gboolean
321 onPDADeleteEvent                       (GtkWidget       *widget,
322                                         GdkEvent        *event,
323                                         gpointer         user_data)
324 {
325     intf_thread_t *p_intf = GtkGetIntf( widget );
326
327     msg_Dbg( p_intf, "about to exit vlc ... " );
328     vlc_mutex_lock( &p_intf->change_lock );
329     p_intf->p_vlc->b_die = VLC_TRUE;
330     vlc_mutex_unlock( &p_intf->change_lock );
331     msg_Dbg( p_intf, "about to exit vlc ... signalled" );
332
333     return TRUE;
334 }
335
336
337 void
338 onFileOpen                             (GtkButton       *button,
339                                         gpointer         user_data)
340 {
341     intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) );
342     GtkListStore *list;
343
344     if (p_intf->p_sys->p_notebook)
345     {
346        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
347        gtk_notebook_set_page(p_intf->p_sys->p_notebook,0);
348     }
349     if (p_intf->p_sys->p_mediabook)
350     {
351        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_mediabook) );
352        gtk_notebook_set_page(p_intf->p_sys->p_mediabook,0);
353     }
354     gdk_window_raise( p_intf->p_sys->p_window->window );
355     if (p_intf->p_sys->p_tvfile)
356     {
357        /* Get new directory listing */
358        list = gtk_list_store_new (5,
359                                   G_TYPE_STRING,
360                                   G_TYPE_STRING,
361                                   G_TYPE_ULONG,
362                                   G_TYPE_STRING,
363                                   G_TYPE_STRING);
364        ReadDirectory(p_intf, list, ".");
365
366        /* Update TreeView */
367        gtk_tree_view_set_model(p_intf->p_sys->p_tvfile, (GtkTreeModel*) list);
368        g_object_unref(list);
369        gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(p_intf->p_sys->p_tvfile)),GTK_SELECTION_NONE);
370     }
371 }
372
373
374 void
375 onPlaylist                             (GtkButton       *button,
376                                         gpointer         user_data)
377 {
378     intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(button) );
379
380     // Toggle notebook
381     if (p_intf->p_sys->p_notebook)
382     {
383         gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
384         gtk_notebook_set_page(p_intf->p_sys->p_notebook,1);
385     }
386     gdk_window_raise( p_intf->p_sys->p_window->window );
387 }
388
389
390 void
391 onPreferences                          (GtkButton       *button,
392                                         gpointer         user_data)
393 {
394     intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) );
395
396     if (p_intf->p_sys->p_notebook)
397     {
398        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
399        gtk_notebook_set_page(p_intf->p_sys->p_notebook,2);
400     }
401     gdk_window_raise( p_intf->p_sys->p_window->window );
402 }
403
404
405 void
406 onRewind                               (GtkButton       *button,
407                                         gpointer         user_data)
408 {
409     intf_thread_t *  p_intf = GtkGetIntf( button );
410
411     if( p_intf->p_sys->p_input != NULL )
412     {
413         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_SLOWER );
414     }
415 }
416
417
418 void
419 onPause                                (GtkButton       *button,
420                                         gpointer         user_data)
421 {
422     intf_thread_t *  p_intf = GtkGetIntf( button );
423
424     if( p_intf->p_sys->p_input != NULL )
425     {
426         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PAUSE );
427     }
428 }
429
430
431 void
432 onPlay                                 (GtkButton       *button,
433                                         gpointer         user_data)
434 {
435      intf_thread_t *  p_intf = GtkGetIntf( GTK_WIDGET( button ) );
436      playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
437
438      if( p_playlist == NULL )
439      {
440          /* Display open page */
441          onFileOpen(button,user_data);
442      }
443
444      /* If the playlist is empty, open a file requester instead */
445      vlc_mutex_lock( &p_playlist->object_lock );
446      if( p_playlist->i_size )
447      {
448          vlc_mutex_unlock( &p_playlist->object_lock );
449          playlist_Play( p_playlist );
450          vlc_object_release( p_playlist );
451          gdk_window_lower( p_intf->p_sys->p_window->window );
452      }
453      else
454      {
455          vlc_mutex_unlock( &p_playlist->object_lock );
456          vlc_object_release( p_playlist );
457          /* Display open page */
458          onFileOpen(button,user_data);
459     }
460 }
461
462
463 void
464 onStop                                 (GtkButton       *button,
465                                         gpointer         user_data)
466 {
467     intf_thread_t *  p_intf = GtkGetIntf( GTK_WIDGET( button ) );
468     playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
469                                                        FIND_ANYWHERE );
470     if( p_playlist)
471     {
472         playlist_Stop( p_playlist );
473         vlc_object_release( p_playlist );
474         gdk_window_raise( p_intf->p_sys->p_window->window );
475     }
476 }
477
478
479 void
480 onForward                              (GtkButton       *button,
481                                         gpointer         user_data)
482 {
483     intf_thread_t *  p_intf = GtkGetIntf( button );
484
485     if( p_intf->p_sys->p_input != NULL )
486     {
487         input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_FASTER );
488     }
489 }
490
491
492 void
493 onAbout                                (GtkButton       *button,
494                                         gpointer         user_data)
495 {
496     intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(button) );
497
498     // Toggle notebook
499     if (p_intf->p_sys->p_notebook)
500     {
501         gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
502         gtk_notebook_set_page(p_intf->p_sys->p_notebook,3);
503     }
504     gdk_window_raise( p_intf->p_sys->p_window->window );
505 }
506
507
508 gboolean
509 SliderRelease                          (GtkWidget       *widget,
510                                         GdkEventButton  *event,
511                                         gpointer         user_data)
512 {
513     intf_thread_t *p_intf = GtkGetIntf( widget );
514
515     vlc_mutex_lock( &p_intf->change_lock );
516     p_intf->p_sys->b_slider_free = 1;
517     vlc_mutex_unlock( &p_intf->change_lock );
518
519     return TRUE;
520 }
521
522
523 gboolean
524 SliderPress                            (GtkWidget       *widget,
525                                         GdkEventButton  *event,
526                                         gpointer         user_data)
527 {
528     intf_thread_t *p_intf = GtkGetIntf( widget );
529
530     vlc_mutex_lock( &p_intf->change_lock );
531     p_intf->p_sys->b_slider_free = 0;
532     vlc_mutex_unlock( &p_intf->change_lock );
533
534     return TRUE;
535 }
536
537 gboolean addSelectedToPlaylist(GtkTreeModel *model,
538                                GtkTreePath *path,
539                                GtkTreeIter *iter,
540                                gpointer *userdata)
541 {
542     GtkTreeView  *tvplaylist = NULL;
543     GtkTreeModel *play_model;
544     GtkTreeIter   play_iter;
545     gchar *filename;
546     
547     gtk_tree_model_get(model, iter, 0, &filename, -1);
548     g_print("selected %s\n", filename);
549
550 #if 1
551     tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(userdata), "tvPlaylist");
552     if (NULL != tvplaylist)
553     {
554         play_model = gtk_tree_view_get_model(tvplaylist);
555         /* Add a new row to the playlist treeview model */
556         gtk_list_store_append (play_model, &play_iter);
557         gtk_list_store_set (play_model, &play_iter,
558                                 0, filename,   /* Add path to it !!! */
559                                 1, "00:00:00",
560                                 -1 );
561         /* do we need to unref ?? */
562     }
563     else
564 //       msg_Err(p_intf, "Error obtaining pointer to Play List");
565        g_print("Error obtaining pointer to Play List");
566 #endif
567 }
568
569 void
570 onFileListRow                          (GtkTreeView     *treeview,
571                                         GtkTreePath     *path,
572                                         GtkTreeViewColumn *column,
573                                         gpointer         user_data)
574 {
575     GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);    
576     g_print("onFileListRow\n");
577     gtk_tree_selection_selected_foreach(selection, addSelectedToPlaylist, (gpointer) treeview);
578 }
579
580
581 void
582 onFileListColumns                      (GtkTreeView     *treeview,
583                                         gpointer         user_data)
584 {
585     g_print("onFileListColumn\n");
586 }
587
588
589 gboolean
590 onFileListRowSelected                  (GtkTreeView     *treeview,
591                                         gboolean         start_editing,
592                                         gpointer         user_data)
593 {
594     g_print("onFileListRowSelected\n");
595     return FALSE;
596 }
597
598
599 void
600 onAddFileToPlaylist                    (GtkButton       *button,
601                                         gpointer         user_data)
602 {
603
604 }
605
606
607 void
608 onEntryMRLChanged                      (GtkEditable     *editable,
609                                         gpointer         user_data)
610 {
611     g_print("onMRLChanged\n");
612 }
613
614
615 void
616 onEntryMRLEditingDone                  (GtkCellEditable *celleditable,
617                                         gpointer         user_data)
618 {
619     g_print("onMRLEditingDone\n");
620 }
621
622
623 void
624 onNetworkPortChanged                   (GtkEditable     *editable,
625                                         gpointer         user_data)
626 {
627
628 }
629
630
631 void
632 onEntryNetworkPortEditingDone          (GtkCellEditable *celleditable,
633                                         gpointer         user_data)
634 {
635
636 }
637
638
639 void
640 onNetworkAddressChanged                (GtkEditable     *editable,
641                                         gpointer         user_data)
642 {
643
644 }
645
646
647 void
648 onEntryNetworkAddressEditingDone       (GtkCellEditable *celleditable,
649                                         gpointer         user_data)
650 {
651
652 }
653
654
655 void
656 onNetworkTypeChanged                   (GtkEditable     *editable,
657                                         gpointer         user_data)
658 {
659
660 }
661
662
663 void
664 onEntryNetworkTypeEditingDone          (GtkCellEditable *celleditable,
665                                         gpointer         user_data)
666 {
667
668 }
669
670
671 void
672 onProtocolTypeChanged                  (GtkEditable     *editable,
673                                         gpointer         user_data)
674 {
675
676 }
677
678
679 void
680 onEntryProtocolTypeEditingDone         (GtkCellEditable *celleditable,
681                                         gpointer         user_data)
682 {
683
684 }
685
686
687 void
688 onMRLTypeChanged                       (GtkEditable     *editable,
689                                         gpointer         user_data)
690 {
691
692 }
693
694
695 void
696 onEntryMRLTypeEditingDone              (GtkCellEditable *celleditable,
697                                         gpointer         user_data)
698 {
699
700 }
701
702
703 void
704 onStreamTypeChanged                    (GtkEditable     *editable,
705                                         gpointer         user_data)
706 {
707
708 }
709
710
711 void
712 onEntryStreamTypeEditingDone           (GtkCellEditable *celleditable,
713                                         gpointer         user_data)
714 {
715
716 }
717
718
719 void
720 onAddNetworkPlaylist                   (GtkButton       *button,
721                                         gpointer         user_data)
722 {
723
724 }
725
726
727 void
728 onV4LAudioChanged                      (GtkEditable     *editable,
729                                         gpointer         user_data)
730 {
731
732 }
733
734
735 void
736 onEntryV4LAudioEditingDone             (GtkCellEditable *celleditable,
737                                         gpointer         user_data)
738 {
739
740 }
741
742
743 void
744 onV4LVideoChanged                      (GtkEditable     *editable,
745                                         gpointer         user_data)
746 {
747
748 }
749
750
751 void
752 onEntryV4LVideoEditingDone             (GtkCellEditable *celleditable,
753                                         gpointer         user_data)
754 {
755
756 }
757
758
759 void
760 onAddCameraToPlaylist                  (GtkButton       *button,
761                                         gpointer         user_data)
762 {
763
764 }
765
766
767 void
768 onVideoDeviceChanged                   (GtkEditable     *editable,
769                                         gpointer         user_data)
770 {
771
772 }
773
774
775 void
776 onEntryVideoDeviceEditingDone          (GtkCellEditable *celleditable,
777                                         gpointer         user_data)
778 {
779
780 }
781
782
783 void
784 onVideoCodecChanged                    (GtkEditable     *editable,
785                                         gpointer         user_data)
786 {
787
788 }
789
790
791 void
792 onEntryVideoCodecEditingDone           (GtkCellEditable *celleditable,
793                                         gpointer         user_data)
794 {
795
796 }
797
798
799 void
800 onVideoBitrateChanged                  (GtkEditable     *editable,
801                                         gpointer         user_data)
802 {
803
804 }
805
806
807 void
808 onVideoBitrateEditingDone              (GtkCellEditable *celleditable,
809                                         gpointer         user_data)
810 {
811
812 }
813
814
815 void
816 onAudioDeviceChanged                   (GtkEditable     *editable,
817                                         gpointer         user_data)
818 {
819
820 }
821
822
823 void
824 onEntryAudioDeviceEditingDone          (GtkCellEditable *celleditable,
825                                         gpointer         user_data)
826 {
827
828 }
829
830
831 void
832 onAudioCodecChanged                    (GtkEditable     *editable,
833                                         gpointer         user_data)
834 {
835
836 }
837
838
839 void
840 onEntryAudioCodecEditingDone           (GtkCellEditable *celleditable,
841                                         gpointer         user_data)
842 {
843
844 }
845
846
847 void
848 onAudioBitrateChanged                  (GtkEditable     *editable,
849                                         gpointer         user_data)
850 {
851
852 }
853
854
855 void
856 onAudioBitrateEditingDone              (GtkCellEditable *celleditable,
857                                         gpointer         user_data)
858 {
859
860 }
861
862
863 void
864 onAddServerToPlaylist                  (GtkButton       *button,
865                                         gpointer         user_data)
866 {
867
868 }
869
870
871 gboolean
872 PlaylistEvent                          (GtkWidget       *widget,
873                                         GdkEvent        *event,
874                                         gpointer         user_data)
875 {
876     g_print("onPlaylistEvent\n");
877     return FALSE;
878 }
879
880
881 void
882 onPlaylistColumnsChanged               (GtkTreeView     *treeview,
883                                         gpointer         user_data)
884 {
885     g_print("onPlaylistColumnsChanged\n");
886 }
887
888
889 gboolean
890 onPlaylistRowSelected                  (GtkTreeView     *treeview,
891                                         gboolean         start_editing,
892                                         gpointer         user_data)
893 {
894   g_print("onPlaylistRowSelected\n");
895   return FALSE;
896 }
897
898
899 void
900 onPlaylistRow                          (GtkTreeView     *treeview,
901                                         GtkTreePath     *path,
902                                         GtkTreeViewColumn *column,
903                                         gpointer         user_data)
904 {
905     g_print("onPlaylistRow\n");
906 }
907
908
909 void
910 onUpdatePlaylist                       (GtkButton       *button,
911                                         gpointer         user_data)
912 {
913
914 }
915
916
917 void
918 onDeletePlaylist                       (GtkButton       *button,
919                                         gpointer         user_data)
920 {
921
922 }
923
924
925 void
926 onClearPlaylist                        (GtkButton       *button,
927                                         gpointer         user_data)
928 {
929
930 }
931
932
933 void
934 onPreferenceSave                       (GtkButton       *button,
935                                         gpointer         user_data)
936 {
937
938 }
939
940
941 void
942 onPreferenceApply                      (GtkButton       *button,
943                                         gpointer         user_data)
944 {
945
946 }
947
948
949 void
950 onPreferenceCancel                     (GtkButton       *button,
951                                         gpointer         user_data)
952 {
953
954 }
955