📄 cddb_lookup.c
字号:
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 + -