]> git.sesse.net Git - vlc/blob - modules/gui/gtk/sout.c
e0a417abab9f83ab08ad0e34b62c0cd20a19fdb0
[vlc] / modules / gui / gtk / sout.c
1 /*****************************************************************************
2  * sout.c :
3  *****************************************************************************
4  * Copyright (C) 2000, 2001 VideoLAN
5  * $Id: sout.c,v 1.2 2003/05/05 16:09:39 gbazin Exp $
6  *
7  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
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
30 #include <vlc/vlc.h>
31 #include <vlc/intf.h>
32
33 #ifdef MODULE_NAME_IS_gnome
34 #   include <gnome.h>
35 #else
36 #   include <gtk/gtk.h>
37 #endif
38
39 #include <string.h>
40
41 #include "gtk_callbacks.h"
42 #include "gtk_interface.h"
43 #include "gtk_support.h"
44
45 #include "playlist.h"
46 #include "common.h"
47
48 void GtkSoutSettings ( GtkButton       *button,
49                        gpointer         user_data );
50
51 void GtkSoutSettingsChanged  ( GtkWidget *button, gpointer user_data);
52
53
54
55
56
57
58 void GtkSoutSettingsAccessFile              (GtkToggleButton *togglebutton,
59                                                 gpointer         user_data)
60 {
61     GtkWidget *     p_sout;
62
63     p_sout = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
64     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
65                     "sout_file_path_label" ),
66                     gtk_toggle_button_get_active( togglebutton ) );
67     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
68                     "sout_file_path" ),
69                     gtk_toggle_button_get_active( togglebutton ) );
70
71     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
72                     "sout_mux_ts" ), TRUE );
73     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
74                     "sout_mux_ps" ), TRUE );
75     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
76                     "sout_mux_avi" ), TRUE );
77
78     GtkSoutSettingsChanged( GTK_WIDGET( togglebutton ), user_data );
79 }
80
81
82 void GtkSoutSettingsAccessUdp               (GtkToggleButton *togglebutton,
83                                                 gpointer         user_data)
84 {
85     GtkWidget *     p_sout;
86
87     p_sout = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
88     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
89                     "sout_udp_address_label" ),
90                     gtk_toggle_button_get_active( togglebutton ) );
91     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
92                     "sout_udp_address_combo" ),
93                     gtk_toggle_button_get_active( togglebutton ) );
94     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
95                     "sout_udp_port_label" ),
96                     gtk_toggle_button_get_active( togglebutton ) );
97     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
98                     "sout_udp_port" ),
99                     gtk_toggle_button_get_active( togglebutton ) );
100
101     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
102                     "sout_mux_ts" ), TRUE );
103     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
104                     "sout_mux_ps" ), FALSE );
105     gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_sout ),
106                     "sout_mux_avi" ), FALSE );
107
108     gtk_toggle_button_set_active(  gtk_object_get_data( GTK_OBJECT( p_sout ),
109                                    "sout_mux_ts" ), TRUE );
110
111     GtkSoutSettingsChanged( GTK_WIDGET( togglebutton ), user_data );
112 }
113
114
115 void GtkSoutSettingsChanged  ( GtkWidget *button,
116                                gpointer         user_data)
117 {
118 #define SELECTED( s ) GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button), \
119                                    (s) ) )->active
120     //intf_thread_t * p_intf = GtkGetIntf( button );
121     GString *       p_target;
122
123     p_target = g_string_new( "" );
124
125     /* first set access */
126     if( SELECTED( "sout_access_file" ) )
127     {
128         g_string_append( p_target, "file/" );
129     }
130     else if( SELECTED( "sout_access_udp" ) )
131     {
132         g_string_append( p_target, "udp/" );
133     }
134     else if( SELECTED( "sout_access_rtp" ) )
135     {
136         g_string_append( p_target, "rtp/" );
137     }
138
139     /* then set muxer */
140     if( SELECTED( "sout_mux_ts" ) )
141     {
142         g_string_append( p_target, "ts://" );
143     }
144     else if( SELECTED( "sout_mux_ps" ) )
145     {
146         g_string_append( p_target, "ps://" );
147     }
148     else if( SELECTED( "sout_mux_avi" ) )
149     {
150         g_string_append( p_target, "avi://" );
151     }
152
153     /* last part of the url */
154     if( SELECTED( "sout_access_file" ) )
155     {
156         g_string_append( p_target,
157                          gtk_entry_get_text( GTK_ENTRY( lookup_widget(
158                                              GTK_WIDGET(button), "sout_file_path" ) ) ) );
159     }
160     else if( SELECTED( "sout_access_udp" ) || SELECTED( "sout_access_rtp" ) )
161     {
162         g_string_append( p_target,
163                          gtk_entry_get_text( GTK_ENTRY( lookup_widget(
164                                              GTK_WIDGET(button), "sout_udp_address" ) ) ) );
165         g_string_append( p_target, ":" );
166         g_string_sprintfa( p_target, "%i",
167                          gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( lookup_widget(
168                                                            GTK_WIDGET(button), "sout_udp_port" ) ) ) );
169     }
170
171     gtk_entry_set_text( GTK_ENTRY( lookup_widget(
172                                    GTK_WIDGET(button), "sout_entry_target" ) ),
173                         p_target->str );
174     g_string_free( p_target, TRUE );
175 }
176
177
178 /****************************************************************************/
179 void GtkSoutSettingsOk     ( GtkButton       *button,
180                              gpointer         user_data)
181 {
182     /* Hide the dialog box */
183     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
184
185     /* set sout */
186 #if 0
187     psz_target = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
188                                        GTK_WIDGET(button), "sout_entry_target" ) ) );
189
190     config_PutPsz( p_intf, "sout", psz_target );
191 #endif
192 }
193
194 void GtkSoutSettingsCancel ( GtkButton      *button,
195                              gpointer        user_data)
196 {
197     /* Hide the dialog box */
198     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
199 }
200
201 void GtkSoutSettings ( GtkButton       *button,
202                        gpointer         user_data )
203 {
204     intf_thread_t * p_intf = GtkGetIntf( button );
205
206     gtk_widget_show( p_intf->p_sys->p_sout );
207     gdk_window_raise( p_intf->p_sys->p_sout->window );
208 }
209
210
211