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

📄 preferences.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 4 页
字号:
        case CONFIG_ITEM_BOOL:            /* add check button */            bool_checkbutton = gtk_check_button_new();            gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(bool_checkbutton),                                          p_item->i_value );            /* connect signal to track changes in the button state */            gtk_object_set_data( GTK_OBJECT(bool_checkbutton), "config_option",                                 p_item->psz_name );            gtk_signal_connect( GTK_OBJECT(bool_checkbutton), "toggled",                                GTK_SIGNAL_FUNC(GtkBoolChanged),                                (gpointer)config_dialog );            LABEL_AND_WIDGET( p_item->psz_text,                              bool_checkbutton, p_item->psz_longtext );            break;        }    }    while( p_item->i_type != CONFIG_HINT_END && p_item++ );    vlc_list_release( p_list );#ifndef MODULE_NAME_IS_gnome    /* Now let's add the action buttons at the bottom of the page */    dialog_action_area = GTK_DIALOG(config_dialog)->action_area;    gtk_container_set_border_width( GTK_CONTAINER(dialog_action_area), 4 );    /* add a new table for the config option */    item_hbox = gtk_hbox_new( FALSE, 0 );    gtk_box_pack_end( GTK_BOX(dialog_action_area), item_hbox,                      TRUE, FALSE, 0 );    item_hbox = gtk_hbox_new( FALSE, 0 );    gtk_box_pack_end( GTK_BOX(dialog_action_area), item_hbox,                      TRUE, FALSE, 0 );#endif    /* Create the OK button */#ifdef MODULE_NAME_IS_gnome    gnome_dialog_append_button( GNOME_DIALOG(config_dialog),                                GNOME_STOCK_BUTTON_OK );    ok_button =        GTK_WIDGET(g_list_last(GNOME_DIALOG(config_dialog)->buttons)->data);    gnome_dialog_append_button( GNOME_DIALOG(config_dialog),                                GNOME_STOCK_BUTTON_APPLY );    apply_button =        GTK_WIDGET(g_list_last(GNOME_DIALOG(config_dialog)->buttons)->data);    gnome_dialog_append_button_with_pixmap(        GNOME_DIALOG(config_dialog), _("Save"), GNOME_STOCK_PIXMAP_SAVE );    save_button =        GTK_WIDGET(g_list_last(GNOME_DIALOG(config_dialog)->buttons)->data);    gnome_dialog_append_button( GNOME_DIALOG(config_dialog),                                GNOME_STOCK_BUTTON_CANCEL );    cancel_button =        GTK_WIDGET(g_list_last(GNOME_DIALOG(config_dialog)->buttons)->data);#else    ok_button = gtk_button_new_with_label( _("OK") );    gtk_box_pack_start( GTK_BOX(dialog_action_area), ok_button,                        TRUE, TRUE, 0 );    apply_button = gtk_button_new_with_label( _("Apply") );    gtk_box_pack_start( GTK_BOX(dialog_action_area), apply_button,                        TRUE, TRUE, 0 );    save_button = gtk_button_new_with_label( _("Save") );    gtk_box_pack_start( GTK_BOX(dialog_action_area), save_button,                        TRUE, TRUE, 0 );    cancel_button = gtk_button_new_with_label( _("Cancel") );    gtk_box_pack_start( GTK_BOX(dialog_action_area), cancel_button,                        TRUE, TRUE, 0 );#endif    gtk_signal_connect( GTK_OBJECT(ok_button), "clicked",                        GTK_SIGNAL_FUNC(GtkConfigOk),                        config_dialog );    gtk_widget_set_sensitive( apply_button, FALSE );    gtk_object_set_data( GTK_OBJECT(config_dialog), "apply_button",                         apply_button );    gtk_signal_connect( GTK_OBJECT(apply_button), "clicked",                        GTK_SIGNAL_FUNC(GtkConfigApply),                        config_dialog );    gtk_signal_connect( GTK_OBJECT(save_button), "clicked",                        GTK_SIGNAL_FUNC(GtkConfigSave),                        config_dialog );    gtk_signal_connect( GTK_OBJECT(cancel_button), "clicked",                        GTK_SIGNAL_FUNC(GtkConfigCancel),                        config_dialog );    /* Ok, job done successfully. Let's keep a reference to the dialog box */    gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),                         psz_module_name, config_dialog );    gtk_object_set_data( GTK_OBJECT(config_dialog), "psz_module_name",                         psz_module_name );    /* we want this ref to be destroyed if the object is destroyed */    gtk_signal_connect( GTK_OBJECT(config_dialog), "destroy",                       GTK_SIGNAL_FUNC(GtkConfigDialogDestroyed),                       (gpointer)p_intf );    gtk_widget_show_all( config_dialog );}#undef LABEL_AND_WIDGET#undef TOOLTIP/**************************************************************************** * GtkConfigApply: store the changes to the config inside the modules * configuration structure and clear the hash table. ****************************************************************************/static void GtkConfigApply( GtkButton * button, gpointer user_data ){    intf_thread_t *p_intf;    GHashTable *hash_table;    GtkWidget *apply_button;    hash_table = (GHashTable *)gtk_object_get_data( GTK_OBJECT(user_data),                                                    "config_hash_table" );    p_intf = (intf_thread_t *)gtk_object_get_data( GTK_OBJECT(user_data),                                                   "p_intf" );    g_hash_table_foreach_remove( hash_table, GtkSaveHashValue, (void*)p_intf );    /* change the highlight status of the Apply button */    apply_button = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(user_data),                                                    "apply_button" );    gtk_widget_set_sensitive( apply_button, FALSE );}static void GtkConfigOk( GtkButton * button, gpointer user_data ){    GtkConfigApply( button, user_data );    gtk_widget_destroy( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );}static void GtkConfigCancel( GtkButton * button, gpointer user_data ){    gtk_widget_destroy( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );}static void GtkConfigSave( GtkButton * button, gpointer user_data ){    intf_thread_t *p_intf;    p_intf = (intf_thread_t *)gtk_object_get_data( GTK_OBJECT(user_data),                                                   "p_intf" );    GtkConfigApply( button, user_data );    config_SaveConfigFile( p_intf, NULL );}/**************************************************************************** * GtkModuleHighlighted: display module description when an entry is selected *   in the clist, and activate the configure button if necessary. ****************************************************************************/static void GtkModuleHighlighted( GtkCList *module_clist, int row, int column,                                  GdkEventButton *event, gpointer user_data ){    intf_thread_t *p_intf;    GtkWidget *config_button;    module_t *p_parser;    vlc_list_t *p_list;    char *psz_name;    int i_index;    p_intf = (intf_thread_t *)gtk_object_get_data( GTK_OBJECT(module_clist),                                                   "p_intf" );    if( !gtk_clist_get_text( GTK_CLIST(module_clist), row, 0, &psz_name ) )    {        return;    }    /* look for module 'psz_name' */    p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );    for( i_index = 0; i_index < p_list->i_count; i_index++ )    {        p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !strcmp( p_parser->psz_object_name, psz_name ) )        {            gtk_object_set_data( GTK_OBJECT(module_clist),                                 "module_highlighted", p_parser );            config_button = gtk_object_get_data( GTK_OBJECT(module_clist),                                                 "config_button" );            if( p_parser->i_config_items )                gtk_widget_set_sensitive( config_button, TRUE );            else                gtk_widget_set_sensitive( config_button, FALSE );            break;        }    }    vlc_list_release( p_list );}/**************************************************************************** * GtkModuleConfigure: display module configuration dialog box. ****************************************************************************/static void GtkModuleConfigure( GtkButton *button, gpointer user_data ){    module_t *p_module;    intf_thread_t *p_intf;    p_module = (module_t *)gtk_object_get_data( GTK_OBJECT(user_data),                                                "module_highlighted" );    if( !p_module ) return;    p_intf = (intf_thread_t *)gtk_object_get_data( GTK_OBJECT(button),                                                   "p_intf" );    GtkCreateConfigDialog( p_module->psz_object_name, (gpointer)p_intf );}/**************************************************************************** * GtkModuleSelected: select module. ****************************************************************************/static void GtkModuleSelected( GtkButton *button, gpointer user_data ){    module_t *p_module;    GtkWidget *widget;    p_module = (module_t *)gtk_object_get_data( GTK_OBJECT(user_data),                                                "module_highlighted" );    widget = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(user_data),                                               "module_entry" );    if( !p_module ) return;    gtk_entry_set_text( GTK_ENTRY(widget), p_module->psz_object_name );}/**************************************************************************** * GtkStringChanged: signal called when the user changes a string value. ****************************************************************************/static void GtkStringChanged( GtkEditable *editable, gpointer user_data ){    intf_thread_t *p_intf;    module_config_t *p_config;    GHashTable *hash_table;    GtkWidget *apply_button;    p_intf = (intf_thread_t *)gtk_object_get_data( GTK_OBJECT(editable),                                                   "p_intf" );    hash_table = (GHashTable *)gtk_object_get_data( GTK_OBJECT(user_data),                                                    "config_hash_table" );    /* free old p_config */    p_config = (module_config_t *)g_hash_table_lookup( hash_table,                                                       (gpointer)editable );    if( p_config ) GtkFreeHashValue( NULL, (gpointer)p_config, (void *)p_intf );    p_config = malloc( sizeof(module_config_t) );    p_config->i_type = CONFIG_ITEM_STRING;    p_config->psz_value = gtk_editable_get_chars( editable, 0, -1 );    p_config->psz_name = (char *)gtk_object_get_data( GTK_OBJECT(editable),                                                      "config_option" );    g_hash_table_insert( hash_table, (gpointer)editable,                         (gpointer)p_config );    /* change the highlight status of the Apply button */    apply_button = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(user_data),

⌨️ 快捷键说明

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