⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 open.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * gtk_open.c : functions to handle file/disc/network open widgets. ***************************************************************************** * Copyright (C) 2000, 2001, 2003 VideoLAN * $Id: open.c 10101 2005-03-02 16:47:31Z robux4 $ * * Authors: Sam Hocevar <sam@zoy.org> *          St閜hane Borel <stef@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <sys/types.h>                                              /* off_t */#include <stdlib.h>#include <vlc/vlc.h>#include <vlc/intf.h>#ifdef MODULE_NAME_IS_gnome#   include <gnome.h>#else#   include <gtk/gtk.h>#endif#include <string.h>#include "gtk_callbacks.h"#include "gtk_interface.h"#include "gtk_support.h"#include "playlist.h"#include "common.h"#ifdef HAVE_CDDAX#define CDDA_MRL "cddax://"#else#define CDDA_MRL "cdda://"#endif#ifdef HAVE_VCDX#define VCD_MRL "vcdx://"#else#define VCD_MRL "vcdx://"#endifstatic void GtkOpenShow( intf_thread_t *, int );static void GtkFileOpenChanged    ( GtkWidget *, gpointer );static void GtkDiscOpenChanged    ( GtkWidget *, gpointer );static void GtkNetworkOpenChanged ( GtkWidget *, gpointer );static void GtkSatOpenChanged     ( GtkWidget *, gpointer );/***************************************************************************** * File requester callbacks ***************************************************************************** * The following callbacks are related to the file requester. *****************************************************************************/void GtkFileShow( GtkButton * button, gpointer user_data ){    GtkWidget * p_file = create_intf_file();    gtk_object_set_data( GTK_OBJECT(p_file), "p_intf",                         GtkGetIntf( button ) );    /* entry <- entry_file or entry_subtitle */    gtk_object_set_data( GTK_OBJECT(p_file), "entry",                         user_data );    gtk_widget_show( p_file );    gdk_window_raise( p_file->window );}void GtkFileOk( GtkButton * button, gpointer user_data ){    GtkWidget * p_file = gtk_widget_get_toplevel( GTK_WIDGET (button) );    char *psz_entry;    char *psz_filename;    intf_thread_t * p_intf = GtkGetIntf( button );    /* add the new file to the dialog box */    psz_entry = gtk_object_get_data( GTK_OBJECT( p_file ), "entry" );    psz_filename =            gtk_file_selection_get_filename( GTK_FILE_SELECTION( p_file ) );    gtk_entry_set_text( GTK_ENTRY( lookup_widget( p_intf->p_sys->p_open,                                                  psz_entry ) ),                        psz_filename );    gtk_widget_destroy( p_file );}void GtkFileCancel( GtkButton * button, gpointer user_data ){    gtk_widget_destroy( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );}/***************************************************************************** * Open file callbacks ***************************************************************************** * The following callbacks are related to the file tab. *****************************************************************************/gboolean GtkFileOpenShow( GtkWidget       *widget,                          gpointer         user_data ){    GtkOpenShow( GtkGetIntf( widget ), 0 );    return TRUE;}static void GtkFileOpenChanged( GtkWidget * button, gpointer user_data ){    GString *       p_target;    p_target = g_string_new( "file://" );    g_string_append( p_target,                     gtk_entry_get_text( GTK_ENTRY( lookup_widget(                                     GTK_WIDGET(button), "entry_file" ) ) ) );    gtk_entry_set_text( GTK_ENTRY( lookup_widget(                                   GTK_WIDGET(button), "entry_open" ) ),                        p_target->str );    g_string_free( p_target, TRUE );}/***************************************************************************** * Open disc callbacks ***************************************************************************** * The following callbacks are related to the disc manager. *****************************************************************************/gboolean GtkDiscOpenShow( GtkWidget       *widget,                          gpointer         user_data){    GtkOpenShow( GtkGetIntf( widget ), 1 );    return TRUE;}void GtkDiscOpenDvd( GtkToggleButton * togglebutton, gpointer user_data ){    intf_thread_t * p_intf = GtkGetIntf( togglebutton );    char *psz_device;    if( togglebutton->active )    {        if ( (psz_device = config_GetPsz( p_intf, "dvd" )) )        {           gtk_widget_set_sensitive( GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_open ), "disc_dvd_use_menu" ) ) , TRUE);           gtk_entry_set_text(            GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),                                      "disc_name" ) ), psz_device );           free( psz_device );        }        else        {          gtk_widget_set_sensitive( GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_open ), "disc_dvd_use_menu" ) ), FALSE );        }        GtkDiscOpenChanged( (GtkWidget *) togglebutton, user_data );    }    else    {        gtk_widget_set_sensitive( GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_open ), "disc_dvd_use_menu" ) ), FALSE );    }}void GtkDiscOpenVcd( GtkToggleButton * togglebutton, gpointer user_data ){    intf_thread_t * p_intf = GtkGetIntf( togglebutton );    char *psz_device;    if( togglebutton->active )      {        if ( (psz_device = config_GetPsz( p_intf, "vcd" )) )         {           gtk_entry_set_text(            GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),                                      "disc_name" ) ), psz_device );           free( psz_device );         } else {            gtk_entry_set_text(            GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),                                      "disc_name" ) ), "" );         }        GtkDiscOpenChanged( (GtkWidget *) togglebutton, user_data );      }}void GtkDiscOpenCDDA( GtkToggleButton * togglebutton, gpointer user_data ){    intf_thread_t * p_intf = GtkGetIntf( togglebutton );    char *psz_device;    if( togglebutton->active )      {        if ( (psz_device = config_GetPsz( p_intf, "cd-audio" )) )        {          gtk_entry_set_text(            GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),                                      "disc_name" ) ), psz_device );          free( psz_device );        } else {          gtk_entry_set_text(            GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton),                                      "disc_name" ) ), "" );        }        GtkDiscOpenChanged( (GtkWidget *) togglebutton, user_data );      }}static void GtkDiscOpenChanged( GtkWidget * button, gpointer user_data ){    intf_thread_t * p_intf = GtkGetIntf( button );    GString * p_target = g_string_new( "" );    GtkWidget * p_open = gtk_widget_get_toplevel( GTK_WIDGET (button) );    vlc_bool_t b_menus = VLC_FALSE;    vlc_bool_t b_chapter_menu = VLC_TRUE;    GtkWidget *p_label = gtk_object_get_data( GTK_OBJECT( p_open ),                                              "disc_title_label" );    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),                                          "disc_dvd" ) )->active )    {        gtk_label_set_text( GTK_LABEL( p_label ), _("Title") );        b_menus = GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),                                               "disc_dvd_use_menu" ) )->active;        if( b_menus )        {            g_string_append( p_target, "dvd://" );        }        else        {            g_string_append( p_target, "dvdsimple://" );        }        g_string_append( p_target,                         gtk_entry_get_text( GTK_ENTRY( lookup_widget(                                     GTK_WIDGET(button), "disc_name" ) ) ) );        if( !b_menus )          {            g_string_sprintfa( p_target, "@%i:%i",                               gtk_spin_button_get_value_as_int(                                GTK_SPIN_BUTTON( lookup_widget(                                    GTK_WIDGET(button), "disc_title" ) ) ),                               gtk_spin_button_get_value_as_int(                                GTK_SPIN_BUTTON( lookup_widget(                                    GTK_WIDGET(button), "disc_chapter" ) ) ) );          }    }    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),                                               "disc_vcd" ) )->active )    {        int i = gtk_spin_button_get_value_as_int(                           GTK_SPIN_BUTTON( lookup_widget(                           GTK_WIDGET(button), "disc_title" ) ) );#ifdef HAVE_VCDX        int i_pbc = config_GetInt( p_intf, "vcdx-PBC"  );        gtk_label_set_text( GTK_LABEL( p_label ),                            i_pbc ? _("PBC LID") : _("Entry") );        g_string_append( p_target, VCD_MRL );        g_string_append( p_target,                         gtk_entry_get_text( GTK_ENTRY( lookup_widget(                         GTK_WIDGET(button), "disc_name" ) ) ) );        if ( i )          g_string_sprintfa( p_target, "@%c%d", i_pbc ? 'P' : 'E', i );#else        gtk_label_set_text( GTK_LABEL( p_label ), _("Track") );        g_string_append( p_target, VCD_MRL );        g_string_sprintfa( p_target, "@%d", i );#endif /* HAVE_VCDX */        b_chapter_menu = VLC_FALSE;    }    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),                                               "disc_cdda" ) )->active )    {        int i = gtk_spin_button_get_value_as_int(                           GTK_SPIN_BUTTON( lookup_widget(                           GTK_WIDGET(button), "disc_title" ) ) );        gtk_label_set_text( GTK_LABEL( p_label ), _("Track") );        b_chapter_menu = VLC_FALSE;        g_string_append( p_target, CDDA_MRL );        g_string_append( p_target,                     gtk_entry_get_text( GTK_ENTRY( lookup_widget(                                     GTK_WIDGET(button), "disc_name" ) ) ) );#ifdef HAVE_CDDAX        if ( i )          g_string_sprintfa( p_target, "@T%i", i );#else        g_string_sprintfa( p_target, "@%i", i );#endif    }    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_open ),                    "disc_title_label" ), !b_menus );    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_open ),                    "disc_title" ), !b_menus );    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_open ),                    "disc_chapter_label" ), b_chapter_menu && !b_menus );    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_open ),                    "disc_chapter" ), b_chapter_menu && !b_menus );    gtk_entry_set_text( GTK_ENTRY( lookup_widget(                                   GTK_WIDGET(button), "entry_open" ) ),                        p_target->str );    g_string_free( p_target, TRUE );}/***************************************************************************** * Network stream callbacks ***************************************************************************** * The following callbacks are related to the network stream manager. *****************************************************************************/gboolean GtkNetworkOpenShow( GtkWidget       *widget,                             gpointer         user_data ){    GtkOpenShow( GtkGetIntf( widget ), 2 );    return TRUE;}static void GtkNetworkOpenChanged( GtkWidget *button, gpointer user_data ){    GString *       p_target = g_string_new( "" );    unsigned int    i_port;#define SELECTED( s ) GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button), \                       (s) ) )->active    /* Check which option was chosen */    if( SELECTED( "network_udp" ) )    {        g_string_append( p_target, "udp://" );        i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(                               lookup_widget( GTK_WIDGET(button),                                              "network_udp_port" ) ) );        if( i_port != 1234 )        {            g_string_sprintfa( p_target, "@:%i", i_port );        }    }    else if( SELECTED( "network_multicast" ) )    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -