📄 configure.c
字号:
#include "mpg123.h"#include "libxmms/configfile.h"#include "libxmms/dirbrowser.h"#include "libxmms/titlestring.h"static GtkWidget *mpg123_configurewin = NULL;static GtkWidget *vbox, *notebook;static GtkWidget *decode_vbox, *decode_hbox1;static GtkWidget *decode_res_frame, *decode_res_vbox, *decode_res_16, *decode_res_8;static GtkWidget *decode_ch_frame, *decode_ch_vbox, *decode_ch_stereo, *decode_ch_mono;static GtkWidget *decode_freq_frame, *decode_freq_vbox, *decode_freq_1to1, *decode_freq_1to2, *decode_freq_1to4;static GtkWidget *option_frame, *option_vbox, *detect_by_content, *detect_by_extension, *detect_by_both;#ifdef USE_SIMDstatic GtkWidget *auto_select, *decoder_3dnow, *decoder_mmx, *decoder_fpu;static void auto_select_cb(GtkWidget * w, gpointer data);#endifstatic GtkObject *streaming_size_adj, *streaming_pre_adj;static GtkWidget *streaming_proxy_use, *streaming_proxy_host_entry;static GtkWidget *streaming_proxy_port_entry, *streaming_save_use, *streaming_save_entry;static GtkWidget *streaming_proxy_auth_use;static GtkWidget *streaming_proxy_auth_pass_entry, *streaming_proxy_auth_user_entry;static GtkWidget *streaming_proxy_auth_user_label, *streaming_proxy_auth_pass_label;static GtkWidget *streaming_cast_title, *streaming_udp_title;static GtkWidget *streaming_proxy_hbox, *streaming_proxy_auth_hbox, *streaming_save_dirbrowser;static GtkWidget *streaming_save_hbox, *title_id3_box, *title_tag_desc;static GtkWidget *title_override, *title_id3_entry, *title_id3v2_disable;MPG123Config mpg123_cfg;static void mpg123_configurewin_ok(GtkWidget * widget, gpointer data){ ConfigFile *cfg; gchar *filename; if (GTK_TOGGLE_BUTTON(decode_res_16)->active) mpg123_cfg.resolution = 16; else if (GTK_TOGGLE_BUTTON(decode_res_8)->active) mpg123_cfg.resolution = 8; if (GTK_TOGGLE_BUTTON(decode_ch_stereo)->active) mpg123_cfg.channels = 2; else if (GTK_TOGGLE_BUTTON(decode_ch_mono)->active) mpg123_cfg.channels = 1; if (GTK_TOGGLE_BUTTON(decode_freq_1to1)->active) mpg123_cfg.downsample = 0; else if (GTK_TOGGLE_BUTTON(decode_freq_1to2)->active) mpg123_cfg.downsample = 1; if (GTK_TOGGLE_BUTTON(decode_freq_1to4)->active) mpg123_cfg.downsample = 2; if (GTK_TOGGLE_BUTTON(detect_by_content)->active) mpg123_cfg.detect_by = DETECT_CONTENT; else if (GTK_TOGGLE_BUTTON(detect_by_extension)->active) mpg123_cfg.detect_by = DETECT_EXTENSION; else if (GTK_TOGGLE_BUTTON(detect_by_both)->active) mpg123_cfg.detect_by = DETECT_BOTH; else mpg123_cfg.detect_by = DETECT_EXTENSION;#ifdef USE_SIMD if (GTK_TOGGLE_BUTTON(auto_select)->active) mpg123_cfg.default_synth = SYNTH_AUTO; else if (GTK_TOGGLE_BUTTON(decoder_fpu)->active) mpg123_cfg.default_synth = SYNTH_FPU; else if (GTK_TOGGLE_BUTTON(decoder_mmx)->active) mpg123_cfg.default_synth = SYNTH_MMX; else mpg123_cfg.default_synth = SYNTH_3DNOW;#endif mpg123_cfg.http_buffer_size = (gint) GTK_ADJUSTMENT(streaming_size_adj)->value; mpg123_cfg.http_prebuffer = (gint) GTK_ADJUSTMENT(streaming_pre_adj)->value; mpg123_cfg.use_proxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use)); g_free(mpg123_cfg.proxy_host); mpg123_cfg.proxy_host = g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_host_entry))); mpg123_cfg.proxy_port = atoi(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_port_entry))); mpg123_cfg.proxy_use_auth = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_auth_use)); if(mpg123_cfg.proxy_user) g_free(mpg123_cfg.proxy_user); mpg123_cfg.proxy_user = NULL; if(strlen(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_user_entry))) > 0) mpg123_cfg.proxy_user = g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_user_entry))); if(mpg123_cfg.proxy_pass) g_free(mpg123_cfg.proxy_pass); mpg123_cfg.proxy_pass = NULL; if(strlen(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_pass_entry))) > 0) mpg123_cfg.proxy_pass = g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_pass_entry))); mpg123_cfg.save_http_stream = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use)); if (mpg123_cfg.save_http_path) g_free(mpg123_cfg.save_http_path); mpg123_cfg.save_http_path = g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_save_entry))); mpg123_cfg.cast_title_streaming = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_cast_title)); mpg123_cfg.use_udp_channel = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_udp_title)); mpg123_cfg.title_override = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_override)); mpg123_cfg.disable_id3v2 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_id3v2_disable)); g_free(mpg123_cfg.id3_format); mpg123_cfg.id3_format = g_strdup(gtk_entry_get_text(GTK_ENTRY(title_id3_entry))); filename = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); cfg = xmms_cfg_open_file(filename); if (!cfg) cfg = xmms_cfg_new(); xmms_cfg_write_int(cfg, "MPG123", "resolution", mpg123_cfg.resolution); xmms_cfg_write_int(cfg, "MPG123", "channels", mpg123_cfg.channels); xmms_cfg_write_int(cfg, "MPG123", "downsample", mpg123_cfg.downsample); xmms_cfg_write_int(cfg, "MPG123", "http_buffer_size", mpg123_cfg.http_buffer_size); xmms_cfg_write_int(cfg, "MPG123", "http_prebuffer", mpg123_cfg.http_prebuffer); xmms_cfg_write_boolean(cfg, "MPG123", "use_proxy", mpg123_cfg.use_proxy); xmms_cfg_write_string(cfg, "MPG123", "proxy_host", mpg123_cfg.proxy_host); xmms_cfg_write_int(cfg, "MPG123", "proxy_port", mpg123_cfg.proxy_port); xmms_cfg_write_boolean(cfg, "MPG123", "proxy_use_auth", mpg123_cfg.proxy_use_auth); if(mpg123_cfg.proxy_user) xmms_cfg_write_string(cfg, "MPG123", "proxy_user", mpg123_cfg.proxy_user); else xmms_cfg_remove_key(cfg, "MPG123", "proxy_user"); if(mpg123_cfg.proxy_pass) xmms_cfg_write_string(cfg, "MPG123", "proxy_pass", mpg123_cfg.proxy_pass); else xmms_cfg_remove_key(cfg, "MPG123", "proxy_pass"); xmms_cfg_write_boolean(cfg, "MPG123", "save_http_stream", mpg123_cfg.save_http_stream); xmms_cfg_write_string(cfg, "MPG123", "save_http_path", mpg123_cfg.save_http_path); xmms_cfg_write_boolean(cfg, "MPG123", "cast_title_streaming", mpg123_cfg.cast_title_streaming); xmms_cfg_write_boolean(cfg, "MPG123", "use_udp_channel", mpg123_cfg.use_udp_channel); xmms_cfg_write_boolean(cfg, "MPG123", "title_override", mpg123_cfg.title_override); xmms_cfg_write_boolean(cfg, "MPG123", "disable_id3v2", mpg123_cfg.disable_id3v2); xmms_cfg_write_string(cfg, "MPG123", "id3_format", mpg123_cfg.id3_format); xmms_cfg_write_int(cfg, "MPG123", "detect_by", mpg123_cfg.detect_by);#ifdef USE_SIMD xmms_cfg_write_int(cfg, "MPG123", "default_synth", mpg123_cfg.default_synth);#endif xmms_cfg_write_file(cfg, filename); xmms_cfg_free(cfg); g_free(filename); gtk_widget_destroy(mpg123_configurewin);}#ifdef USE_SIMDstatic void auto_select_cb(GtkWidget * w, gpointer data){ gboolean autom = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); gtk_widget_set_sensitive(decoder_fpu, !autom); gtk_widget_set_sensitive(decoder_mmx, !autom); gtk_widget_set_sensitive(decoder_3dnow, !autom);}#endifstatic void proxy_use_cb(GtkWidget * w, gpointer data){ gboolean use_proxy, use_proxy_auth; use_proxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use)); use_proxy_auth = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_auth_use)); gtk_widget_set_sensitive(streaming_proxy_hbox, use_proxy); gtk_widget_set_sensitive(streaming_proxy_auth_use, use_proxy); gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy && use_proxy_auth);}static void proxy_auth_use_cb(GtkWidget *w, gpointer data){ gboolean use_proxy, use_proxy_auth; use_proxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use)); use_proxy_auth = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_auth_use)); gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy && use_proxy_auth);}static void streaming_save_dirbrowser_cb(gchar * dir){ gtk_entry_set_text(GTK_ENTRY(streaming_save_entry), dir);}static void streaming_save_browse_cb(GtkWidget * w, gpointer data){ if (!streaming_save_dirbrowser) { streaming_save_dirbrowser = xmms_create_dir_browser(_("Select the directory where you want to store the MPEG streams:"), mpg123_cfg.save_http_path, GTK_SELECTION_SINGLE, streaming_save_dirbrowser_cb); gtk_signal_connect(GTK_OBJECT(streaming_save_dirbrowser), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &streaming_save_dirbrowser); gtk_window_set_transient_for(GTK_WINDOW(streaming_save_dirbrowser), GTK_WINDOW(mpg123_configurewin)); gtk_widget_show(streaming_save_dirbrowser); }}static void streaming_save_use_cb(GtkWidget * w, gpointer data){ gboolean save_stream; save_stream = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use)); gtk_widget_set_sensitive(streaming_save_hbox, save_stream);}static void title_override_cb(GtkWidget * w, gpointer data){ gboolean override; override = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_override)); gtk_widget_set_sensitive(title_id3_box, override); gtk_widget_set_sensitive(title_tag_desc, override);}static void configure_destroy(GtkWidget * w, gpointer data){ if (streaming_save_dirbrowser) gtk_widget_destroy(streaming_save_dirbrowser);}void mpg123_configure(void){ GtkWidget *streaming_vbox; GtkWidget *streaming_buf_frame, *streaming_buf_hbox; GtkWidget *streaming_size_box, *streaming_size_label, *streaming_size_spin; GtkWidget *streaming_pre_box, *streaming_pre_label, *streaming_pre_spin; GtkWidget *streaming_proxy_frame, *streaming_proxy_vbox; GtkWidget *streaming_proxy_port_label, *streaming_proxy_host_label; GtkWidget *streaming_save_frame, *streaming_save_vbox; GtkWidget *streaming_save_label, *streaming_save_browse; GtkWidget *streaming_cast_frame, *streaming_cast_vbox; GtkWidget *title_frame, *title_id3_vbox, *title_id3_label; GtkWidget *bbox, *ok, *cancel; char *temp; if (mpg123_configurewin != NULL) { gdk_window_raise(mpg123_configurewin->window); return; } mpg123_configurewin = gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect(GTK_OBJECT(mpg123_configurewin), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &mpg123_configurewin); gtk_signal_connect(GTK_OBJECT(mpg123_configurewin), "destroy", GTK_SIGNAL_FUNC(configure_destroy), &mpg123_configurewin); gtk_window_set_title(GTK_WINDOW(mpg123_configurewin), _("MPG123 Configuration")); gtk_window_set_policy(GTK_WINDOW(mpg123_configurewin), FALSE, FALSE, FALSE); /* gtk_window_set_position(GTK_WINDOW(mpg123_configurewin), GTK_WIN_POS_MOUSE); */ gtk_container_border_width(GTK_CONTAINER(mpg123_configurewin), 10); vbox = gtk_vbox_new(FALSE, 10); gtk_container_add(GTK_CONTAINER(mpg123_configurewin), vbox); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); decode_vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(decode_vbox), 5); decode_hbox1 = gtk_hbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(decode_vbox), decode_hbox1, FALSE, FALSE, 0); decode_res_frame = gtk_frame_new(_("Resolution:")); gtk_box_pack_start(GTK_BOX(decode_hbox1), decode_res_frame, TRUE, TRUE, 0); decode_res_vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(decode_res_vbox), 5); gtk_container_add(GTK_CONTAINER(decode_res_frame), decode_res_vbox); decode_res_16 = gtk_radio_button_new_with_label(NULL, _("16 bit")); if (mpg123_cfg.resolution == 16) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_res_16), TRUE); gtk_box_pack_start(GTK_BOX(decode_res_vbox), decode_res_16, FALSE, FALSE, 0); decode_res_8 = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(decode_res_16)), _("8 bit")); if (mpg123_cfg.resolution == 8) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_res_8), TRUE); gtk_box_pack_start(GTK_BOX(decode_res_vbox), decode_res_8, FALSE, FALSE, 0); decode_ch_frame = gtk_frame_new(_("Channels:")); gtk_box_pack_start(GTK_BOX(decode_hbox1), decode_ch_frame, TRUE, TRUE, 0); decode_ch_vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(decode_ch_vbox), 5); gtk_container_add(GTK_CONTAINER(decode_ch_frame), decode_ch_vbox); decode_ch_stereo = gtk_radio_button_new_with_label(NULL, _("Stereo (if available)")); if (mpg123_cfg.channels == 2) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_ch_stereo), TRUE); gtk_box_pack_start(GTK_BOX(decode_ch_vbox), decode_ch_stereo, FALSE, FALSE, 0); decode_ch_mono = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(decode_ch_stereo)), _("Mono")); if (mpg123_cfg.channels == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_ch_mono), TRUE); gtk_box_pack_start(GTK_BOX(decode_ch_vbox), decode_ch_mono, FALSE, FALSE, 0); decode_freq_frame = gtk_frame_new(_("Down sample:")); gtk_box_pack_start(GTK_BOX(decode_vbox), decode_freq_frame, FALSE, FALSE, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -