]> git.sesse.net Git - vlc/blob - modules/gui/pda/pda_callbacks.c
Removing GPE specific stuff.
[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.3 2003/11/07 07:59:00 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     tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(userdata), "tvPlaylist");
551     if (NULL != tvplaylist)
552     {
553         play_model = gtk_tree_view_get_model(tvplaylist);
554         /* Add a new row to the playlist treeview model */
555         gtk_list_store_append (play_model, &play_iter);
556         gtk_list_store_set (play_model, &play_iter,
557                                 0, filename,   /* Add path to it !!! */
558                                 1, "00:00:00",
559                                 -1 );
560         /* do we need to unref ?? */
561     }
562     else
563 //       msg_Err(p_intf, "Error obtaining pointer to Play List");
564        g_print("Error obtaining pointer to Play List");
565 }
566
567 void
568 onFileListRow                          (GtkTreeView     *treeview,
569                                         GtkTreePath     *path,
570                                         GtkTreeViewColumn *column,
571                                         gpointer         user_data)
572 {
573     GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);    
574     g_print("onFileListRow\n");
575     gtk_tree_selection_selected_foreach(selection, addSelectedToPlaylist, (gpointer) treeview);
576 }
577
578
579 void
580 onFileListColumns                      (GtkTreeView     *treeview,
581                                         gpointer         user_data)
582 {
583     g_print("onFileListColumn\n");
584 }
585
586
587 gboolean
588 onFileListRowSelected                  (GtkTreeView     *treeview,
589                                         gboolean         start_editing,
590                                         gpointer         user_data)
591 {
592     g_print("onFileListRowSelected\n");
593     return FALSE;
594 }
595
596
597 void
598 onAddFileToPlaylist                    (GtkButton       *button,
599                                         gpointer         user_data)
600 {
601
602 }
603
604
605 void
606 onEntryMRLChanged                      (GtkEditable     *editable,
607                                         gpointer         user_data)
608 {
609     g_print("onMRLChanged\n");
610 }
611
612
613 void
614 onEntryMRLEditingDone                  (GtkCellEditable *celleditable,
615                                         gpointer         user_data)
616 {
617     g_print("onMRLEditingDone\n");
618 }
619
620
621 void
622 onNetworkPortChanged                   (GtkEditable     *editable,
623                                         gpointer         user_data)
624 {
625
626 }
627
628
629 void
630 onEntryNetworkPortEditingDone          (GtkCellEditable *celleditable,
631                                         gpointer         user_data)
632 {
633
634 }
635
636
637 void
638 onNetworkAddressChanged                (GtkEditable     *editable,
639                                         gpointer         user_data)
640 {
641
642 }
643
644
645 void
646 onEntryNetworkAddressEditingDone       (GtkCellEditable *celleditable,
647                                         gpointer         user_data)
648 {
649
650 }
651
652
653 void
654 onNetworkTypeChanged                   (GtkEditable     *editable,
655                                         gpointer         user_data)
656 {
657
658 }
659
660
661 void
662 onEntryNetworkTypeEditingDone          (GtkCellEditable *celleditable,
663                                         gpointer         user_data)
664 {
665
666 }
667
668
669 void
670 onProtocolTypeChanged                  (GtkEditable     *editable,
671                                         gpointer         user_data)
672 {
673
674 }
675
676
677 void
678 onEntryProtocolTypeEditingDone         (GtkCellEditable *celleditable,
679                                         gpointer         user_data)
680 {
681
682 }
683
684
685 void
686 onMRLTypeChanged                       (GtkEditable     *editable,
687                                         gpointer         user_data)
688 {
689
690 }
691
692
693 void
694 onEntryMRLTypeEditingDone              (GtkCellEditable *celleditable,
695                                         gpointer         user_data)
696 {
697
698 }
699
700
701 void
702 onStreamTypeChanged                    (GtkEditable     *editable,
703                                         gpointer         user_data)
704 {
705
706 }
707
708
709 void
710 onEntryStreamTypeEditingDone           (GtkCellEditable *celleditable,
711                                         gpointer         user_data)
712 {
713
714 }
715
716
717 void
718 onAddNetworkPlaylist                   (GtkButton       *button,
719                                         gpointer         user_data)
720 {
721 #if 0
722     GtkEntry *p_mrl;
723
724     p_mrl = (GtkEntry*) lookup_widget(GTK_WIDGET(button),"" );
725     if (NULL != p_mrl)
726     {
727         GtkTreeView  *tvplaylist = NULL;
728         GtkTreeModel *play_model;
729         GtkTreeIter   play_iter;
730         gchar *name;
731         
732         tvplaylist = (GtkTreeView *) lookup_widget( GTK_WIDGET(button), "tvPlaylist");
733         if (NULL != tvplaylist)
734         {
735             play_model = gtk_tree_view_get_model(tvplaylist);
736             /* Add a new row to the playlist treeview model */
737             gtk_list_store_append (play_model, &play_iter);
738             gtk_list_store_set (play_model, &play_iter,
739                                     0, name,   /* Add path to it !!! */
740                                     1, "00:00:00",
741                                     -1 );
742             /* do we need to unref ?? */
743         }
744         else
745     //       msg_Err(p_intf, "Error obtaining pointer to Play List");
746            g_print("Error obtaining pointer to Play List");
747     }
748 #endif
749 }
750
751
752 void
753 onV4LAudioChanged                      (GtkEditable     *editable,
754                                         gpointer         user_data)
755 {
756
757 }
758
759
760 void
761 onEntryV4LAudioEditingDone             (GtkCellEditable *celleditable,
762                                         gpointer         user_data)
763 {
764
765 }
766
767
768 void
769 onV4LVideoChanged                      (GtkEditable     *editable,
770                                         gpointer         user_data)
771 {
772
773 }
774
775
776 void
777 onEntryV4LVideoEditingDone             (GtkCellEditable *celleditable,
778                                         gpointer         user_data)
779 {
780
781 }
782
783
784 void
785 onAddCameraToPlaylist                  (GtkButton       *button,
786                                         gpointer         user_data)
787 {
788
789 }
790
791
792 void
793 onVideoDeviceChanged                   (GtkEditable     *editable,
794                                         gpointer         user_data)
795 {
796
797 }
798
799
800 void
801 onEntryVideoDeviceEditingDone          (GtkCellEditable *celleditable,
802                                         gpointer         user_data)
803 {
804
805 }
806
807
808 void
809 onVideoCodecChanged                    (GtkEditable     *editable,
810                                         gpointer         user_data)
811 {
812
813 }
814
815
816 void
817 onEntryVideoCodecEditingDone           (GtkCellEditable *celleditable,
818                                         gpointer         user_data)
819 {
820
821 }
822
823
824 void
825 onVideoBitrateChanged                  (GtkEditable     *editable,
826                                         gpointer         user_data)
827 {
828
829 }
830
831
832 void
833 onVideoBitrateEditingDone              (GtkCellEditable *celleditable,
834                                         gpointer         user_data)
835 {
836
837 }
838
839
840 void
841 onAudioDeviceChanged                   (GtkEditable     *editable,
842                                         gpointer         user_data)
843 {
844
845 }
846
847
848 void
849 onEntryAudioDeviceEditingDone          (GtkCellEditable *celleditable,
850                                         gpointer         user_data)
851 {
852
853 }
854
855
856 void
857 onAudioCodecChanged                    (GtkEditable     *editable,
858                                         gpointer         user_data)
859 {
860
861 }
862
863
864 void
865 onEntryAudioCodecEditingDone           (GtkCellEditable *celleditable,
866                                         gpointer         user_data)
867 {
868
869 }
870
871
872 void
873 onAudioBitrateChanged                  (GtkEditable     *editable,
874                                         gpointer         user_data)
875 {
876
877 }
878
879
880 void
881 onAudioBitrateEditingDone              (GtkCellEditable *celleditable,
882                                         gpointer         user_data)
883 {
884
885 }
886
887
888 void
889 onAddServerToPlaylist                  (GtkButton       *button,
890                                         gpointer         user_data)
891 {
892
893 }
894
895
896 gboolean
897 PlaylistEvent                          (GtkWidget       *widget,
898                                         GdkEvent        *event,
899                                         gpointer         user_data)
900 {
901     g_print("onPlaylistEvent\n");
902     return FALSE;
903 }
904
905
906 void
907 onPlaylistColumnsChanged               (GtkTreeView     *treeview,
908                                         gpointer         user_data)
909 {
910     g_print("onPlaylistColumnsChanged\n");
911 }
912
913
914 gboolean
915 onPlaylistRowSelected                  (GtkTreeView     *treeview,
916                                         gboolean         start_editing,
917                                         gpointer         user_data)
918 {
919   g_print("onPlaylistRowSelected\n");
920   return FALSE;
921 }
922
923
924 void
925 onPlaylistRow                          (GtkTreeView     *treeview,
926                                         GtkTreePath     *path,
927                                         GtkTreeViewColumn *column,
928                                         gpointer         user_data)
929 {
930     g_print("onPlaylistRow\n");
931 }
932
933
934 void
935 onUpdatePlaylist                       (GtkButton       *button,
936                                         gpointer         user_data)
937 {
938
939 }
940
941
942 void
943 onDeletePlaylist                       (GtkButton       *button,
944                                         gpointer         user_data)
945 {
946
947 }
948
949
950 void
951 onClearPlaylist                        (GtkButton       *button,
952                                         gpointer         user_data)
953 {
954
955 }
956
957
958 void
959 onPreferenceSave                       (GtkButton       *button,
960                                         gpointer         user_data)
961 {
962
963 }
964
965
966 void
967 onPreferenceApply                      (GtkButton       *button,
968                                         gpointer         user_data)
969 {
970
971 }
972
973
974 void
975 onPreferenceCancel                     (GtkButton       *button,
976                                         gpointer         user_data)
977 {
978
979 }
980