static void print_cdtext_track_info(cdtext_t *p_cdtext, track_t i_track, const char *psz_msg) { if (NULL != p_cdtext) { cdtext_field_t i; printf("%s\n", psz_msg); for (i=0; i < MAX_CDTEXT_FIELDS; i++) { if (cdtext_get_const(p_cdtext, i, i_track)) { printf("\t%s: %s\n", cdtext_field2str(i), cdtext_get_const(p_cdtext, i, i_track)); } } } }
static void print_cdtext_track_info(CdIo_t *p_cdio, track_t i_track, const char *psz_msg) { const cdtext_t *cdtext = cdio_get_cdtext(p_cdio, 0); if (NULL != cdtext) { cdtext_field_t i; printf("%s\n", psz_msg); for (i=0; i < MAX_CDTEXT_FIELDS; i++) { if (cdtext->field[i]) { printf("\t%s: %s\n", cdtext_field2str(i), cdtext->field[i]); } } } }
void cdda_disc_info(cdda_drive_t * drive) { CdIo_t * cdio; track_t itrack; track_t ntracks; track_t track_last; cdtext_field_t i; gchar * text; GtkWidget * dialog; GtkWidget * table; GtkWidget * label; GtkWidget * vbox; GtkWidget * hbox; GtkListStore * list; GtkWidget * view; GtkWidget * viewport; GtkWidget * scrolled_win; GtkCellRenderer * cell; GType types[MAX_CDTEXT_FIELDS + 1]; GtkTreeViewColumn * columns[MAX_CDTEXT_FIELDS + 1]; int visible[MAX_CDTEXT_FIELDS + 1]; int has_some_cdtext = 0; dialog = gtk_dialog_new_with_buttons(_("Disc info"), GTK_WINDOW(browser_window), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_widget_set_size_request(GTK_WIDGET(dialog), 500, 400); vbox = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox, TRUE, TRUE, 4); cdio = cdio_open(drive->device_path, DRIVER_UNKNOWN); table = gtk_table_new(MAX_CDTEXT_FIELDS, 2, FALSE); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 2); for (i = 0; i < MAX_CDTEXT_FIELDS; i++) { text = cdda_get_cdtext(cdio, i, 0); if (text && *text != '\0') { has_some_cdtext = 1; hbox = gtk_hbox_new(FALSE, 0); label = gtk_label_new(cdtext_field2str(i)); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, i, i + 1, GTK_FILL, GTK_FILL, 4, 1); hbox = gtk_hbox_new(FALSE, 0); label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, i, i + 1, GTK_FILL, GTK_FILL, 4, 1); } g_free(text); } types[0] = G_TYPE_INT; for (i = 1; i <= MAX_CDTEXT_FIELDS; i++) { types[i] = G_TYPE_STRING; visible[i] = 0; } list = gtk_list_store_newv(MAX_CDTEXT_FIELDS + 1, types); view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list)); viewport = gtk_viewport_new(NULL, NULL); scrolled_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox), viewport, TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(viewport), scrolled_win); gtk_container_add(GTK_CONTAINER(scrolled_win), view); cell = gtk_cell_renderer_text_new(); g_object_set((gpointer)cell, "xalign", 1.0, NULL); columns[0] = gtk_tree_view_column_new_with_attributes(_("No."), cell, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), GTK_TREE_VIEW_COLUMN(columns[0])); for (i = 0; i < MAX_CDTEXT_FIELDS; i++) { cell = gtk_cell_renderer_text_new(); columns[i + 1] = gtk_tree_view_column_new_with_attributes(cdtext_field2str(i), cell, "text", i + 1, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), GTK_TREE_VIEW_COLUMN(columns[i + 1])); } itrack = cdio_get_first_track_num(cdio); ntracks = cdio_get_num_tracks(cdio); track_last = itrack + ntracks; for (; itrack < track_last; itrack++) { GtkTreeIter iter; gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, 0, itrack, -1); for (i = 0; i < MAX_CDTEXT_FIELDS; i++) { text = cdda_get_cdtext(cdio, i, itrack); if (text && *text != '\0') { gtk_list_store_set(list, &iter, i + 1, text, -1); visible[i + 1] = 1; has_some_cdtext = 1; } g_free(text); } } for (i = 1; i <= MAX_CDTEXT_FIELDS; i++) { gtk_tree_view_column_set_visible(columns[i], visible[i]); } cdio_destroy(cdio); gtk_widget_show_all(dialog); if (has_some_cdtext) { aqualung_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } else { gtk_widget_destroy(dialog); message_dialog(_("Disc info"), browser_window, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, NULL, _("This CD does not contain CD-Text information.")); } }