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

📄 cddb_lookup.c

📁 Aqualung is an advanced music player primarily targeted for the GNU/Linux operating system, but als
💻 C
📖 第 1 页 / 共 3 页
字号:
	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Genre:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	genre_entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), genre_entry, 1, 2, 5, 6,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	button = gtk_button_new_with_label(_("Add to Comments"));	g_signal_connect(G_OBJECT(button), "clicked",			 G_CALLBACK(add_to_comments), (gpointer)gtk_entry_get_text(GTK_ENTRY(genre_entry)));	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 5, 6, GTK_FILL, GTK_FILL, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 6, 7, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Extended data:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	ext_entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), ext_entry, 1, 2, 6, 7,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	button = gtk_button_new_with_label(_("Add to Comments"));	g_signal_connect(G_OBJECT(button), "clicked",			 G_CALLBACK(add_to_comments), (gpointer)gtk_entry_get_text(GTK_ENTRY(ext_entry)));	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 6, 7, GTK_FILL, GTK_FILL, 5, 3);	track_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_BOOLEAN);        track_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(track_store));	renderer = gtk_cell_renderer_text_new();	g_object_set(renderer, "editable", TRUE, NULL);	g_signal_connect(renderer, "edited", (GCallback)cell_edited_callback, NULL);	column = gtk_tree_view_column_new_with_attributes(_("Tracks"),							  renderer,							  "text", 0,							  NULL);        gtk_tree_view_append_column(GTK_TREE_VIEW(track_list), column);        gtk_tree_view_set_reorderable(GTK_TREE_VIEW(track_list), FALSE);        viewport = gtk_viewport_new(NULL, NULL);	scrollwin = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),				       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_widget_set_size_request(scrollwin, -1, 200);        gtk_table_attach(GTK_TABLE(table), viewport, 0, 3, 7, 8,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);        gtk_container_add(GTK_CONTAINER(viewport), scrollwin);        gtk_container_add(GTK_CONTAINER(scrollwin), track_list);	gtk_widget_show_all(dialog);	load_disc(records[0]);	if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		for (i = 0; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(music_store),							  &iter_track, &iter_record, i); i++) {			if (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(track_store),							  &iter_trlist, NULL, i)) {				char * name;				gtk_tree_model_get(GTK_TREE_MODEL(track_store),						   &iter_trlist, 0, &name, -1);				gtk_tree_store_set(music_store, &iter_track,						   0, name, -1);				g_free(name);				music_store_mark_changed(&iter_track);			}		}		tree_selection_changed_cb(music_select, NULL);	}	gtk_widget_destroy(dialog);}gbooleancreate_cddb_write_error_dialog(gpointer data) {	GtkWidget * dialog;	dialog = gtk_message_dialog_new(GTK_WINDOW(browser_window),					GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,					GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,					(char *)data);	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);	gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);		aqualung_dialog_run(GTK_DIALOG(dialog));	gtk_widget_destroy(dialog);	return FALSE;}intcreate_cddb_write_warn_dialog(char * text) {	int ret;	GtkWidget * dialog;	GtkWidget * label;        dialog = gtk_dialog_new_with_buttons(_("Warning"),					     NULL,					     GTK_DIALOG_DESTROY_WITH_PARENT,					     GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,					     GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,					     NULL);	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT);	gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);		label = gtk_label_new(text);	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE, 0);	gtk_widget_show(label);	if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		ret = 0;	} else {		ret = 1;	}	gtk_widget_destroy(dialog);	return ret;}static intcheck_case(char * text, int _case) {	char * str;	char * p;	int has = 0;	int ret = 0;	for (p = text; *p; p = g_utf8_next_char(p)) {		gunichar ch = g_utf8_get_char(p);		if (g_unichar_islower(ch) || g_unichar_isupper(ch)) {			has = 1;			break;		}	}	if (!has) {		return 1;	}	switch (_case) {	case CASE_UP:		str = g_utf8_strup(text, -1);		ret = strcmp(str, text);		g_free(str);		break;	case CASE_DOWN:		str = g_utf8_strdown(text, -1);		ret = strcmp(str, text);		g_free(str);		break;	}	return ret;}static gbooleancreate_cddb_submit_dialog(gpointer data) {	GtkWidget * dialog;	GtkWidget * table;	GtkWidget * hbox;	GtkWidget * label;	GtkWidget * track_list;	GtkWidget * viewport;	GtkWidget * scrollwin;	GtkCellRenderer * renderer;	GtkTreeViewColumn * column;	GtkTreeIter iter_artist;	GtkTreeIter iter_track;	GtkTreeIter iter_trlist;	int i;	char * str;	int year;	cddb_disc_t * disc = (cddb_disc_t *)data;        dialog = gtk_dialog_new_with_buttons(_("CDDB submission"),					     GTK_WINDOW(browser_window),					     GTK_DIALOG_DESTROY_WITH_PARENT,					     GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,					     GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,					     NULL);	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);	gtk_widget_set_size_request(dialog, 400, -1);	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT);	gtk_window_set_modal(GTK_WINDOW(dialog), FALSE);	table = gtk_table_new(7, 2, FALSE);	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 2);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Artist:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	artist_entry = gtk_entry_new();	gtk_tree_model_iter_parent(GTK_TREE_MODEL(music_store), &iter_artist, &iter_record);	gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter_artist, 0, &str, -1);	gtk_entry_set_text(GTK_ENTRY(artist_entry), str);	g_free(str);	gtk_table_attach(GTK_TABLE(table), artist_entry, 1, 2, 0, 1,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Title:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	title_entry = gtk_entry_new();	gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter_record, 0, &str, -1);	gtk_entry_set_text(GTK_ENTRY(title_entry), str);	g_free(str);	gtk_table_attach(GTK_TABLE(table), title_entry, 1, 2, 1, 2,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Year:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	year_spinner = gtk_spin_button_new_with_range(YEAR_MIN, YEAR_MAX, 1);	gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter_record, 1, &str, -1);	year = strtol(str, NULL, 10);	g_free(str);	if (!is_valid_year(year)) {		gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter_record, 3, &str, -1);		year = strtol(str, NULL, 10);		g_free(str);	}	if (is_valid_year(year)) {		gtk_spin_button_set_value(GTK_SPIN_BUTTON(year_spinner), year);	}	gtk_table_attach(GTK_TABLE(table), year_spinner, 1, 2, 2, 3,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Category:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	category_combo = gtk_combo_box_new_text();	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), _("(choose a category)"));	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "data");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "folk");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "jazz");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "misc");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "rock");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "country");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "blues");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "newage");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "reagge");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "classical");	gtk_combo_box_append_text(GTK_COMBO_BOX(category_combo), "soundtrack");	gtk_combo_box_set_active(GTK_COMBO_BOX(category_combo), 0);	gtk_table_attach(GTK_TABLE(table), category_combo, 1, 2, 3, 4,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Genre:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	genre_entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), genre_entry, 1, 2, 4, 5,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	hbox = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 5, 3);	label = gtk_label_new(_("Extended data:"));        gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);	ext_entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), ext_entry, 1, 2, 5, 6,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);	track_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_BOOLEAN);        track_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(track_store));	for (i = 0; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(music_store),						  &iter_track, &iter_record, i); i++) {		char * name;		gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter_track, 0, &name, -1);		gtk_list_store_append(track_store, &iter_trlist);		gtk_list_store_set(track_store, &iter_trlist, 0, name, -1);		g_free(name);	}	renderer = gtk_cell_renderer_text_new();	g_object_set(renderer, "editable", TRUE, NULL);	g_signal_connect(renderer, "edited", (GCallback)cell_edited_callback, NULL);	column = gtk_tree_view_column_new_with_attributes(_("Tracks"),							  renderer,							  "text", 0,							  NULL);        gtk_tree_view_append_column(GTK_TREE_VIEW(track_list), column);        gtk_tree_view_set_reorderable(GTK_TREE_VIEW(track_list), FALSE);        viewport = gtk_viewport_new(NULL, NULL);	scrollwin = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),				       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_widget_set_size_request(scrollwin, -1, 200);        gtk_table_attach(GTK_TABLE(table), viewport, 0, 2, 6, 7,			 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 3);        gtk_container_add(GTK_CONTAINER(viewport), scrollwin);        gtk_container_add(GTK_CONTAINER(scrollwin), track_list);	gtk_widget_show_all(dialog); display:	if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		char * artist;		char * title;		char * genre;		int category;		int year;		artist = (char *)gtk_entry_get_text(GTK_ENTRY(artist_entry));		if (is_all_wspace(artist)) {			gtk_widget_grab_focus(artist_entry);			goto display;		}		if (!check_case(artist, CASE_DOWN)) {			if (create_cddb_write_warn_dialog(_("Artist appears to be in all lowercase.\n"							    "Do you want to proceed?"))) {				goto display;			}		}		if (!check_case(artist, CASE_UP)) {			if (create_cddb_write_warn_dialog(_("Artist appears to be in all uppercase.\n"							    "Do you want to proceed?"))) {				goto display;			}		}		title = (char *)gtk_entry_get_text(GTK_ENTRY(title_entry));		if (is_all_wspace(title)) {			gtk_widget_grab_focus(title_entry);			goto display;		}		if (!check_case(title, CASE_DOWN)) {			if (create_cddb_write_warn_dialog(_("Title appears to be in all lowercase.\n"							    "Do you want to proceed?"))) {				goto display;			}		}		if (!check_case(title, CASE_UP)) {			if (create_cddb_write_warn_dialog(_("Title appears to be in all uppercase.\n"							    "Do you want to proceed?"))) {				goto display;			}		}		year = gtk_spin_button_get_value(GTK_SPIN_BUTTON(year_spinner));		if (year == YEAR_MIN) {			if (create_cddb_write_warn_dialog(_("It is very likely that the year is wrong.\n"							    "Do you want to proceed?"))) {				goto display;			}		}		category = gtk_combo_box_get_active(GTK_COMBO_BOX(category_combo));		if (category == 0) {			gtk_widget_grab_focus(category_combo);			goto display;		}		genre = (char *)gtk_entry_get_text(GTK_ENTRY(genre_entry));		if (genre[0] != '\0' && is_all_wspace(genre)) {			gtk_widget_grab_focus(genre_entry);			goto display;		}		for (i = 0; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(track_store),							  &iter_trlist, NULL, i); i++) {			char * name;			gtk_tree_model_get(GTK_TREE_MODEL(track_store),					   &iter_trlist, 0, &name, -1);			if (is_all_wspace(name)) {				gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(track_list)), &iter_trlist);				goto display;			}			cddb_track_set_title(cddb_disc_get_track(disc, i), name);			g_free(name);		}		cddb_disc_set_artist(disc, artist);		cddb_disc_set_title(disc, title);		cddb_disc_set_year(disc, year);		cddb_disc_set_category(disc, category - 1);		cddb_disc_set_genre(disc, genre);		cddb_disc_set_ext_data(disc, gtk_entry_get_text(GTK_ENTRY(ext_entry)));		cddb_thread_state = CDDB_THREAD_SUCCESS;	} else {		cddb_thread_state = CDDB_THREAD_ERROR;	}	gtk_widget_destroy(dialog);	cddb_data_locked = 0;	return FALSE;}

⌨️ 快捷键说明

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