#include "input_ext-intf.h"
#include "interface.h"
-#include "intf_plst.h"
+#include "intf_playlist.h"
#include "intf_msg.h"
-#include "gtk_sys.h"
#include "gtk_callbacks.h"
#include "gtk_interface.h"
#include "gtk_support.h"
+#include "intf_gtk.h"
#include "main.h"
-/*****************************************************************************
- * Inline function to retrieve the interface structure
- *****************************************************************************/
-static __inline__ intf_thread_t * GetIntf( GtkWidget *item, char * psz_parent )
-{
- return( gtk_object_get_data( GTK_OBJECT( lookup_widget(item, psz_parent) ),
- "p_intf" ) );
-}
-
/*****************************************************************************
* Callbacks
******************************************************************************/
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+ vlc_mutex_lock( &p_intf->change_lock );
p_intf->b_die = 1;
+ vlc_mutex_unlock( &p_intf->change_lock );
}
void
if( p_intf->p_input != NULL )
{
/* FIXME: temporary hack */
- intf_PlstPrev( p_main->p_playlist );
- intf_PlstPrev( p_main->p_playlist );
+ intf_PlaylistPrev( p_main->p_playlist );
+ intf_PlaylistPrev( p_main->p_playlist );
p_intf->p_input->b_eof = 1;
}
}
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+ vlc_mutex_lock( &p_intf->change_lock );
p_intf->b_die = 1;
+ vlc_mutex_unlock( &p_intf->change_lock );
}
void
gtk_widget_hide (filesel);
filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
- intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, (char*)filename );
+ intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)filename );
}
}
-gboolean
-on_hscale_button_release_event (GtkWidget *widget,
- GdkEventButton *event,
- gpointer user_data)
-{
- intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
-
- GtkAdjustment *p_adj = gtk_range_get_adjustment( GTK_RANGE(widget) );
- off_t i_seek;
-
- vlc_mutex_lock( &p_intf->p_sys->change_lock );
-
- if( p_intf->p_input != NULL )
- {
- i_seek = (p_adj->value *
- p_intf->p_input->stream.p_selected_area->i_size) / 100;
- input_Seek( p_intf->p_input, i_seek );
- }
- p_intf->p_sys->b_scale_isfree = 1;
-
- vlc_mutex_unlock( &p_intf->p_sys->change_lock );
-
- return FALSE;
-}
-
-
-gboolean
-on_hscale_button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- gpointer user_data)
-{
- intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
-
- vlc_mutex_lock( &p_intf->p_sys->change_lock );
- p_intf->p_sys->b_scale_isfree = 0;
- vlc_mutex_unlock( &p_intf->p_sys->change_lock );
-
- return FALSE;
-}
-
-
-
void
on_intf_modules_destroy (GtkObject *object,
gpointer user_data)
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
- on_generic_drop_data_received( p_intf, data, info, 0);
+ int end = p_main->p_playlist->i_size;
+ on_generic_drop_data_received( p_intf, data, info, PLAYLIST_END);
if( p_intf->p_input != NULL )
{
p_intf->p_input->b_eof = 1;
}
- intf_PlstJumpto( p_main->p_playlist, -1 );
+ intf_PlaylistJumpto( p_main->p_playlist, end-1 );
}
/* Build source name and add it to playlist */
sprintf( psz_source, "%s:%s", psz_method, psz_device );
- intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+ intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
gtk_widget_hide( p_intf->p_sys->p_disc );
}
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
- /* is there an output thread ? */
- if(p_main->b_video == 1)
- {
- gtk_widget_hide(widget);
- } else {
- p_intf->b_die = 1;
- }
- return TRUE;
+
+ vlc_mutex_lock( &p_intf->change_lock );
+ p_intf->b_die = 1;
+ vlc_mutex_unlock( &p_intf->change_lock );
+
+ return TRUE;
}
if( GTK_WIDGET_VISIBLE(p_intf->p_sys->p_window) ) {
gtk_widget_hide( p_intf->p_sys->p_window);
- } else {
+ }
+ else
+ {
gtk_widget_show( p_intf->p_sys->p_window );
}
}
+
+gboolean
+on_playlist_clist_drag_motion (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ guint time,
+ gpointer user_data)
+{
+ GtkCList * clist;
+ gint row,col;
+ int dummy;
+ GdkColor color;
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_playlist" );
+
+
+ clist = GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist,"playlist_clist"
+ ));
+
+ if(!GTK_WIDGET_TOPLEVEL(widget))
+ {
+ gdk_window_raise( p_intf->p_sys->p_playlist->window );
+ }
+
+ color.red = 0xffff;
+ color.green = 0xffff;
+ color.blue = 0xffff;
+
+ gtk_clist_freeze( clist );
+
+ for(dummy=0; dummy<clist->rows; dummy++)
+ {
+ gtk_clist_set_background ( clist, dummy , &color);
+ }
+ color.red = 0xffff;
+ color.green = 0;
+ color.blue = 0;
+ gtk_clist_set_background ( clist, p_main->p_playlist->i_index , &color);
+
+ if( gtk_clist_get_selection_info( clist,x,y ,&row,&col )== 1)
+ {
+ color.red = 0;
+ color.green = 0x9000;
+ color.blue = 0xf000;
+ gtk_clist_set_background ( clist, row-1 , &color);
+ gtk_clist_set_background ( clist, row , &color);
+ }
+
+ gtk_clist_thaw( clist );
+
+ return TRUE;
+}
+
+
+void
+on_intf_network_destroy (GtkObject *object,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_network" );
+
+ p_intf->p_sys->p_network = NULL;
+}
+
+
+void
+on_network_ok_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_network" );
+ char *psz_source, *psz_server, *psz_protocol;
+ unsigned int i_port;
+
+ psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+ GTK_WIDGET(button), "network_server" ) ) );
+
+ /* Check which protocol was activated */
+ if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+ "network_ts" ) )->active )
+ {
+ psz_protocol = "ts";
+ }
+ else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+ "network_rtp" ) )->active )
+ {
+ psz_protocol = "rtp";
+ }
+ else
+ {
+ intf_ErrMsg( "intf error: unknown protocol toggle button position" );
+ return;
+ }
+
+ /* Get the port number and make sure it will not overflow 5 characters */
+ i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
+ lookup_widget( GTK_WIDGET(button), "network_port" ) ) );
+ if( i_port > 65535 )
+ {
+ intf_ErrMsg( "intf error: invalid port %i", i_port );
+ }
+
+ /* Allocate room for "protocol://server:port" */
+ psz_source = malloc( strlen( psz_protocol ) + strlen( psz_server ) + 10 );
+ if( psz_source == NULL )
+ {
+ return;
+ }
+
+ /* Build source name and add it to playlist */
+ sprintf( psz_source, "%s://%s:%i", psz_protocol, psz_server, i_port );
+ intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
+ free( psz_source );
+
+ gtk_widget_hide( p_intf->p_sys->p_network );
+}
+
+
+void
+on_network_cancel_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+void
+on_menubar_network_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+ gtk_widget_show( p_intf->p_sys->p_network );
+ gdk_window_raise( p_intf->p_sys->p_network->window );
+}
+
+
+void
+on_popup_network_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+ gtk_widget_show( p_intf->p_sys->p_network );
+ gdk_window_raise( p_intf->p_sys->p_network->window );
+}
+
+void
+on_toolbar_network_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+
+ gtk_widget_show( p_intf->p_sys->p_network );
+ gdk_window_raise( p_intf->p_sys->p_network->window );
+}
+
+
+gboolean
+on_slider_button_release_event (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
+
+ vlc_mutex_lock( &p_intf->change_lock );
+ p_intf->p_sys->b_slider_free = 1;
+ vlc_mutex_unlock( &p_intf->change_lock );
+
+ return FALSE;
+}
+
+
+gboolean
+on_slider_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
+
+ vlc_mutex_lock( &p_intf->change_lock );
+ p_intf->p_sys->b_slider_free = 0;
+ vlc_mutex_unlock( &p_intf->change_lock );
+
+ return FALSE;
+}
+