📄 equalizer.c
字号:
xmms_cfg_write_file(cfgfile, filename); xmms_cfg_free(cfgfile); g_free(filename);}static gboolean equalizerwin_load_preset(GList * list, gchar * name){ EqualizerPreset *preset; gint i; if ((preset = equalizerwin_find_preset(list, name)) != NULL) { eqslider_set_position(equalizerwin_preamp, preset->preamp); for (i = 0; i < 10; i++) eqslider_set_position(equalizerwin_bands[i], preset->bands[i]); equalizerwin_eq_changed(); return TRUE; } return FALSE;}static GList *equalizerwin_save_preset(GList * list, gchar * name, gchar * fname){ gint i; EqualizerPreset *preset; if (!(preset = equalizerwin_find_preset(list, name))) { preset = g_malloc(sizeof (EqualizerPreset)); preset->name = g_strdup(name); list = g_list_append(list, preset); } preset->preamp = eqslider_get_position(equalizerwin_preamp); for (i = 0; i < 10; i++) preset->bands[i] = eqslider_get_position(equalizerwin_bands[i]); equalizerwin_write_preset_file(list, fname); return list;}static GList *equalizerwin_delete_preset(GList * list, gchar * name, gchar * fname){ EqualizerPreset *preset; GList *node; if ((preset = equalizerwin_find_preset(list, name)) && (node = g_list_find(list, preset))) { list = g_list_remove_link(list, node); g_free(preset->name); g_free(preset); g_list_free_1(node); equalizerwin_write_preset_file(list, fname); } return list;}static GList *equalizerwin_import_winamp_eqf(FILE *file){ gchar header[31]; gchar tmp[257]; gchar bands[11]; gint i=0; GList *list = NULL; EqualizerPreset *preset; fread(header, 1, 31, file); if (!strncmp(header, "Winamp EQ library file v1.1", 27)) { while (fread(tmp, 1, 257, file)) { preset = g_malloc(sizeof (EqualizerPreset)); fread(bands, 1, 11, file); preset->name = g_strdup(tmp); preset->preamp = 20.0 - ((bands[10] * 40.0) / 64); for (i = 0; i < 10; i++) preset->bands[i] = 20.0 - ((bands[i] * 40.0) / 64); list = g_list_prepend(list, preset); } } list = g_list_reverse(list); return list;}static void equalizerwin_read_winamp_eqf(FILE *file){ gchar header[31]; guchar bands[11]; gint i; fread(header, 1, 31, file); if (!strncmp(header, "Winamp EQ library file v1.1", 27)) { if (fseek(file, 257, SEEK_CUR) == -1) /* Skip name */ return; if (fread(bands, 1, 11, file) != 11) return; eqslider_set_position(equalizerwin_preamp, 20.0 - ((bands[10] * 40.0) / 63.0)); for (i = 0; i < 10; i++) eqslider_set_position(equalizerwin_bands[i], 20.0 - ((bands[i] * 40.0) / 64.0)); } equalizerwin_eq_changed();}static void equalizerwin_read_xmms_preset(ConfigFile *cfgfile){ gfloat val; gint i; if (xmms_cfg_read_float(cfgfile, "Equalizer preset", "Preamp", &val)) eqslider_set_position(equalizerwin_preamp, val); for (i = 0; i < 10; i++) { gchar tmp[7]; sprintf(tmp, "Band%d", i); if (xmms_cfg_read_float(cfgfile, "Equalizer preset", tmp, &val)) eqslider_set_position(equalizerwin_bands[i], val); } equalizerwin_eq_changed();}static void equalizerwin_save_ok(GtkWidget * widget, gpointer data){ gchar *text; text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_entry)); if (strlen(text) != 0) equalizer_presets = equalizerwin_save_preset(equalizer_presets, text, "eq.preset"); gtk_widget_destroy(equalizerwin_save_window);}static void equalizerwin_save_select(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer data){ gchar *text; gtk_clist_get_text(clist, row, 0, &text); gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_entry), text); if (event->type == GDK_2BUTTON_PRESS) equalizerwin_save_ok(NULL, NULL);}static void equalizerwin_load_ok(GtkWidget * widget, gpointer data){ gchar *text; GtkCList *clist = GTK_CLIST(data); if (clist && clist->selection) { gtk_clist_get_text(clist, GPOINTER_TO_INT(clist->selection->data), 0, &text); equalizerwin_load_preset(equalizer_presets, text); } gtk_widget_destroy(equalizerwin_load_window);}static void equalizerwin_load_select(GtkCList * widget, gint row, gint column, GdkEventButton * event, gpointer data){ if (event->type == GDK_2BUTTON_PRESS) equalizerwin_load_ok(NULL, widget);}static void equalizerwin_delete_delete(GtkWidget * widget, gpointer data){ gchar *text; GList *list, *next; GtkCList *clist = GTK_CLIST(data); g_return_if_fail(clist != NULL); list = clist->selection; gtk_clist_freeze(clist); while (list) { next = g_list_next(list); gtk_clist_get_text(clist, GPOINTER_TO_INT(list->data), 0, &text); equalizer_presets = equalizerwin_delete_preset(equalizer_presets, text, "eq.preset"); gtk_clist_remove(clist, GPOINTER_TO_INT(list->data)); list = next; } gtk_clist_thaw(clist);}static void equalizerwin_save_auto_ok(GtkWidget * widget, gpointer data){ gchar *text; text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_auto_entry)); if (strlen(text) != 0) equalizer_auto_presets = equalizerwin_save_preset(equalizer_auto_presets, text, "eq.auto_preset"); gtk_widget_destroy(equalizerwin_save_auto_window);}static void equalizerwin_save_auto_select(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer data){ gchar *text; gtk_clist_get_text(clist, row, 0, &text); gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry), text); if (event->type == GDK_2BUTTON_PRESS) equalizerwin_save_auto_ok(NULL, NULL);}static void equalizerwin_load_auto_ok(GtkWidget * widget, gpointer data){ gchar *text; GtkCList *clist = GTK_CLIST(data); if (clist && clist->selection) { gtk_clist_get_text(clist, GPOINTER_TO_INT(clist->selection->data), 0, &text); equalizerwin_load_preset(equalizer_auto_presets, text); } gtk_widget_destroy(equalizerwin_load_auto_window);}static void equalizerwin_load_auto_select(GtkWidget * widget, gint row, gint column, GdkEventButton * event, gpointer data){ if (event->type == GDK_2BUTTON_PRESS) equalizerwin_load_auto_ok(NULL, widget);}static void equalizerwin_delete_auto_delete(GtkWidget * widget, gpointer data){ gchar *text; GList *list, *next; GtkCList *clist = GTK_CLIST(data); g_return_if_fail(clist != NULL); list = clist->selection; gtk_clist_freeze(clist); while (list) { next = g_list_next(list); gtk_clist_get_text(clist, GPOINTER_TO_INT(list->data), 0, &text); equalizer_auto_presets = equalizerwin_delete_preset(equalizer_auto_presets, text, "eq.auto_preset"); gtk_clist_remove(clist, GPOINTER_TO_INT(list->data)); list = next; } gtk_clist_thaw(clist);}static void equalizerwin_load_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ gchar *filename; ConfigFile *cfgfile; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); if ((cfgfile = xmms_cfg_open_file(filename)) != NULL) { equalizerwin_read_xmms_preset(cfgfile); xmms_cfg_free(cfgfile); } gtk_widget_destroy(GTK_WIDGET(filesel));}static void equalizerwin_import_winamp_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ gchar *filename; FILE *file; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); if ((file = fopen(filename, "rb")) != NULL) { equalizer_presets = g_list_concat(equalizer_presets, equalizerwin_import_winamp_eqf(file)); equalizerwin_write_preset_file(equalizer_presets, "eq.preset"); } gtk_widget_destroy(GTK_WIDGET(filesel));}static void equalizerwin_load_winamp_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ gchar *filename; FILE *file; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); if ((file = fopen(filename, "rb")) != NULL) equalizerwin_read_winamp_eqf(file); gtk_widget_destroy(GTK_WIDGET(filesel));}static void equalizerwin_save_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ gchar *filename; ConfigFile *cfgfile; gint i; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); cfgfile = xmms_cfg_new(); xmms_cfg_write_float(cfgfile, "Equalizer preset", "Preamp", eqslider_get_position(equalizerwin_preamp)); for (i = 0; i < 10; i++) { gchar tmp[7]; sprintf(tmp, "Band%d", i); xmms_cfg_write_float(cfgfile, "Equalizer preset", tmp, eqslider_get_position(equalizerwin_bands[i])); } xmms_cfg_write_file(cfgfile, filename); xmms_cfg_free(cfgfile); gtk_widget_destroy(GTK_WIDGET(filesel));}static void equalizerwin_save_winamp_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ gchar *filename, name[257]; FILE *file; gint i; guchar bands[11]; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); if ((file = fopen(filename, "wb")) != NULL) { fwrite("Winamp EQ library file v1.1\x1a!--", 1, 31, file); memset(name, 0, 257); strcpy(name, "Entry1"); fwrite(name, 1, 257, file); for (i = 0; i < 10; i++) bands[i] = 63 - (((eqslider_get_position(equalizerwin_bands[i]) + 20) * 63) / 40); bands[10] = 63 - (((eqslider_get_position(equalizerwin_preamp) + 20) * 63) / 40); fwrite(bands, 1, 11, file); fclose(file); } gtk_widget_destroy(GTK_WIDGET(filesel));}static gint equalizerwin_list_sort_func(GtkCList * clist, gconstpointer ptr1, gconstpointer ptr2){ GtkCListRow *row1 = (GtkCListRow *) ptr1; GtkCListRow *row2 = (GtkCListRow *) ptr2; return strcasecmp(GTK_CELL_TEXT(row1->cell[clist->sort_column])->text, GTK_CELL_TEXT(row2->cell[clist->sort_column])->text);}static GtkWidget *equalizerwin_create_list_window(GList * preset_list, gchar * title, GtkWidget ** window, GtkSelectionMode sel_mode, GtkWidget ** entry, gchar * btn1_caption, gchar * btn2_caption, GtkSignalFunc btn1_func, GtkSignalFunc select_row_func){ GtkWidget *vbox, *scrolled_window, *bbox, *btn1, *btn2, *clist; char *preset_text[1]; GList *node; *window = gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect(GTK_OBJECT(*window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), window); gtk_window_set_transient_for(GTK_WINDOW(*window), GTK_WINDOW(equalizerwin)); gtk_window_set_position(GTK_WINDOW(*window), GTK_WIN_POS_MOUSE); gtk_window_set_title(GTK_WINDOW(*window), title); gtk_widget_set_usize(*window, 350, 300); gtk_container_set_border_width(GTK_CONTAINER(*window), 10); vbox = gtk_vbox_new(FALSE, 10); gtk_container_add(GTK_CONTAINER(*window), vbox); scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); preset_text[0] = _("Presets"); clist = gtk_clist_new_with_titles(1, preset_text); if (select_row_func) gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(select_row_func), NULL); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_set_selection_mode(GTK_CLIST(clist), sel_mode); node = preset_list; while (node) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -