📄 duplicate.c
字号:
/* duplicate.c Duplicate CD functions 15.5.99 tn*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <gtk/gtk.h>#include <gdk/gdk.h>#include "xcdroast.h"#include "main.h"#include "xpms/minidata.xpm"#include "xpms/miniaudio.xpm"#include "xpms/mininodata.xpm"#include "xpms/mininoaudio.xpm"#include "xpms/minitoc.xpm"#include "xpms/disc_eject.xpm"#include "xpms/disc_load.xpm"GList *imagelist;extern GtkWidget *toplevel;extern GtkWidget *sidespace;extern GtkWidget *workspace;track_read_set_t trackreadset;extern setup_data_t setupdata;extern current_set_t curset;extern cd_info_t cdinfo;extern track_info_t **trackinfo;extern gint wav_in;extern GtkWidget *wav_quit_button;extern gint wavplay_quit;extern gint submenu;GtkWidget *actionspace;GtkCList *cdlist, *imglist, *play_clist;GtkWidget *cdlist_l1, *cdlist_l2, *cdlist_l3, *cdlist_l4;GtkWidget *vrylist_l1, *vrylist_l2, *vrylist_l3, *vrylist_l4;GtkWidget *imglist_l1, *imglist_l2, *imglist_l3;GtkWidget *write_toc_menu;GList *tocfiles;void fill_read_menu();void fill_verify_menu();void fill_write_menu();void fill_delete_menu();void set_image_prefix_callback(GtkWidget *widget, gpointer data);void tocwrite_selected(GtkWidget *item, gpointer val);/* some stuff for the select-functions of the sidebar buttons */guint side_handlers[7];GtkWidget *side_widgets[7];GtkWidget *locked_button;extern guint side_handlers2[8];extern GtkWidget *side_widgets2[8];extern void fill_read_tracks(gint dontupdatecd);extern void fill_verify_tracks(gint dontupdateimglist);extern void fill_write_tracks();extern void fill_master_write_menu();void reset_duplicate_buttons(GtkWidget *exclude);extern void reset_duplicate_buttons2(GtkWidget *exclude);/* lock complete sidebar when doing stuff that takes a while (e.g. reload) */void do_lock() {int i; if (submenu == 1) { /* lock all and save currently selected button */ for (i = 0; i < 7; i++) { gtk_signal_handler_block(GTK_OBJECT(side_widgets[i]), side_handlers[i]); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( side_widgets[i])) == 1) { locked_button = side_widgets[i]; } } } if (submenu == 2) { /* lock all and save currently selected button */ for (i = 0; i < 8; i++) { gtk_signal_handler_block(GTK_OBJECT(side_widgets2[i]), side_handlers2[i]); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( side_widgets2[i])) == 1) { locked_button = side_widgets2[i]; } } }}/* free the lock after we are done */void do_unlock() {int i; if (submenu == 1) { for (i = 0; i < 7; i++) { gtk_signal_handler_unblock(GTK_OBJECT(side_widgets[i]), side_handlers[i]); } reset_duplicate_buttons(locked_button); } if (submenu == 2) { for (i = 0; i < 8; i++) { gtk_signal_handler_unblock(GTK_OBJECT(side_widgets2[i]), side_handlers2[i]); } reset_duplicate_buttons2(locked_button); }}/* fill the cd-info-list with data */void fill_cdlist() {GtkStyle *style;gchar *data[2];GdkPixmap *pixmap1, *pixmap2;GdkBitmap *mask1, *mask2;gint i, lcount;gchar tmp[MAXLINE];gchar tmp2[MAXLINE]; /* clean up first */ gtk_clist_clear(cdlist); /* cd loaded? */ if (cdinfo.nr_tracks == -1) { gtk_entry_set_text(GTK_ENTRY(cdlist_l1), text(156)); gtk_entry_set_text(GTK_ENTRY(cdlist_l2),""); gtk_entry_set_text(GTK_ENTRY(cdlist_l3),""); return; } if (cdinfo.nr_tracks == -2) { gtk_entry_set_text(GTK_ENTRY(cdlist_l1), text(196)); gtk_entry_set_text(GTK_ENTRY(cdlist_l2),""); gtk_entry_set_text(GTK_ENTRY(cdlist_l3),""); return; } style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(cdlist))); pixmap1 = gdk_pixmap_create_from_xpm_d(cdlist->clist_window, &mask1, &style->bg[GTK_STATE_NORMAL],(gchar **)minidata_xpm); pixmap2 = gdk_pixmap_create_from_xpm_d(cdlist->clist_window, &mask2, &style->bg[GTK_STATE_NORMAL],(gchar **)miniaudio_xpm); data[0] = NULL; lcount = 0; for (i = 0; i < cdinfo.nr_tracks; i++) { if (trackinfo[i]->type == 0) { convert_frames2mbstring(trackinfo[i]->size,tmp2); g_snprintf(tmp,MAXLINE,"%2d. %s [%s]", trackinfo[i]->track_nr, text(109), tmp2); data[1] = tmp; gtk_clist_append(cdlist,data); gtk_clist_set_pixmap(cdlist,lcount,0,pixmap1,mask1); lcount++; } else { convert_frames2minstring(trackinfo[i]->size,tmp2); g_snprintf(tmp,MAXLINE,"%2d. %s [%s]", trackinfo[i]->track_nr, text(110), tmp2); data[1] = tmp; gtk_clist_append(cdlist,data); gtk_clist_set_pixmap(cdlist,lcount,0,pixmap2,mask2); lcount++; } /* we have cd-text for this track? */ if (setupdata.option_displaycdtext) { if (trackinfo[i]->title != NULL && trackinfo[i]->title[0] != '\0' ) { g_snprintf(tmp,MAXLINE," CD-Text: %s", trackinfo[i]->title); data[1] = tmp; gtk_clist_append(cdlist,data); set_clist_row_font(cdlist,lcount, SLANTFONT); lcount++; } } /* have we a cddb-title for this track? */ if (trackinfo[i]->cddb_ttitle != NULL) { g_snprintf(tmp,MAXLINE," CDDB: %s", trackinfo[i]->cddb_ttitle); data[1] = tmp; gtk_clist_append(cdlist,data); set_clist_row_font(cdlist,lcount, SLANTFONT); lcount++; } else if (trackinfo[i]->volname != NULL) { g_snprintf(tmp,MAXLINE," ISO9660: %s", trackinfo[i]->volname); data[1] = tmp; gtk_clist_append(cdlist,data); set_clist_row_font(cdlist,lcount, SLANTFONT); lcount++; } } /* get cd-type */ determine_cd_type(tmp,0); gtk_entry_set_text(GTK_ENTRY(cdlist_l1), tmp); /* cd-label */ if (cdinfo.title && cdinfo.artist && cdinfo.title[0] != '\0' && setupdata.option_displaycdtext) { g_snprintf(tmp,MAXLINE,"%s / %s", cdinfo.title, cdinfo.artist); gtk_entry_set_text(GTK_ENTRY(cdlist_l2), tmp); gtk_entry_set_position(GTK_ENTRY(cdlist_l2),0); } else if (cdinfo.cddb_dtitle != NULL) { gtk_entry_set_text(GTK_ENTRY(cdlist_l2), cdinfo.cddb_dtitle); gtk_entry_set_position(GTK_ENTRY(cdlist_l2),0); } else { gtk_entry_set_text(GTK_ENTRY(cdlist_l2),""); } /* cd-size */ convert_frames2mbminstring(cdinfo.total_size, tmp); gtk_entry_set_text(GTK_ENTRY(cdlist_l3), tmp); }/* fill the image-info-list with data */void fill_imglist() {GtkStyle *style;gchar *data[2];GdkPixmap *pixmap1, *pixmap2, *pixmap3, *pixmap4, *pixmap5;GdkBitmap *mask1, *mask2, *mask3, *mask4, *mask5;gchar tmp[MAXLINE];gchar tmp2[MAXLINE];gchar basename[MAXLINE], oldbase[MAXLINE], fname[MAXLINE], *p;GList *loop;image_files_t *entry;gint lcount, count;gint sizecount; /* clean up first */ gtk_clist_clear(imglist); style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(imglist))); pixmap1 = gdk_pixmap_create_from_xpm_d(imglist->clist_window, &mask1, &style->bg[GTK_STATE_NORMAL],(gchar **)minidata_xpm); pixmap2 = gdk_pixmap_create_from_xpm_d(imglist->clist_window, &mask2, &style->bg[GTK_STATE_NORMAL],(gchar **)miniaudio_xpm); pixmap3 = gdk_pixmap_create_from_xpm_d(imglist->clist_window, &mask3, &style->bg[GTK_STATE_NORMAL],(gchar **)mininodata_xpm); pixmap4 = gdk_pixmap_create_from_xpm_d(imglist->clist_window, &mask4, &style->bg[GTK_STATE_NORMAL],(gchar **)mininoaudio_xpm); pixmap5 = gdk_pixmap_create_from_xpm_d(imglist->clist_window, &mask5, &style->bg[GTK_STATE_NORMAL],(gchar **)minitoc_xpm); data[0] = NULL; strcpy(oldbase,""); lcount = 0; count = 1; sizecount = 0; loop = g_list_first(imagelist); while (loop) { entry = loop->data; /* get the base-dirname */ strncpy(basename,entry->path,MAXLINE); p = rindex(basename,'/'); *p = '\0'; if (strcmp(basename,"") == 0) { strcpy(basename,"/"); } strcpy(fname,p+1); /* new path found? */ if (strcmp(basename,oldbase) != 0) { g_snprintf(tmp,MAXLINE,"%s: %s",text(41), basename); data[1] = tmp; gtk_clist_append(imglist,data); set_clist_row_font(imglist,lcount, BOLDFONT); lcount++; strcpy(oldbase,basename); } /* iso9600-track/ unknown */ if (entry->type == 0 || entry->type == 3) { convert_frames2mbstring((entry->size)/DATASECTORSIZE, tmp2); g_snprintf(tmp,MAXLINE,"%2d. %s [%s]", count, fname, tmp2); data[1] = tmp; gtk_clist_append(imglist,data); if (entry->readable == 1 && entry->type == 0) { gtk_clist_set_pixmap(imglist,lcount,0,pixmap1,mask1); } else { gtk_clist_set_pixmap(imglist,lcount,0,pixmap3,mask3); } lcount++; sizecount+=(gint)((entry->size)/1024); count++; } /* valid/invalid wav-file */ if (entry->type == 1 || entry->type == 2) { convert_frames2minstring((entry->size)/CDDAFRAME, tmp2); g_snprintf(tmp,MAXLINE,"%2d. %s [%s]", count, fname, tmp2); data[1] = tmp; gtk_clist_append(imglist,data); if (entry->readable == 1 && entry->type == 1) { gtk_clist_set_pixmap(imglist,lcount,0,pixmap2,mask2); } else { gtk_clist_set_pixmap(imglist,lcount,0,pixmap4,mask4); } lcount++; sizecount+=(gint)((entry->size)/1024); count++; } /* toc-file */ if (entry->type == 4) { g_snprintf(tmp,MAXLINE,"--. %s",fname); data[1] = tmp; gtk_clist_append(imglist,data); gtk_clist_set_pixmap(imglist,lcount,0,pixmap5, mask5); lcount++; } /* cd-text */ if (entry->title && entry->artist && strcmp(entry->title,"") && strcmp(entry->artist,"")) { g_snprintf(tmp,MAXLINE," (%s / %s)", entry->title, entry->artist); data[1] = tmp; gtk_clist_append(imglist,data); set_clist_row_font(imglist,lcount, SLANTFONT); lcount++; } else if (entry->title && strcmp(entry->title,"")) { g_snprintf(tmp,MAXLINE," (%s)", entry->title); data[1] = tmp; gtk_clist_append(imglist,data); set_clist_row_font(imglist,lcount, SLANTFONT); lcount++; } else if (entry->cddb_ttitle && strcmp(entry->cddb_ttitle,"")) { g_snprintf(tmp,MAXLINE," (%s)", entry->cddb_ttitle); data[1] = tmp; gtk_clist_append(imglist,data); set_clist_row_font(imglist,lcount, SLANTFONT); lcount++; } else if (entry->volname && strcmp(entry->volname,"")) { g_snprintf(tmp,MAXLINE," (%s / ISO9660)", entry->volname); data[1] = tmp; gtk_clist_append(imglist,data); set_clist_row_font(imglist,lcount, SLANTFONT); lcount++; } loop = loop->next; } /* total size of files */ convert_kbytes2mbminstring(sizecount, tmp); gtk_entry_set_text(GTK_ENTRY(imglist_l1), tmp); }/* callbacks for button in info-screen */void cddb_clicked(GtkWidget *widget, gpointer data) { /* no cd loaded */ if (cdinfo.nr_tracks < 0) { show_dialog(ICO_WARN,text(266),T_OK,NULL,NULL,0); return; } if (show_cddb_query() == 0) { /* new data received - update display */ fill_cdlist(); }}void update_clicked(GtkWidget *widget, gpointer data) {GdkWindowAttr *win_attr;GdkCursor *cursor,*normal_cursor; do_lock(); /* change cursor to watch */ gdk_window_get_user_data(GTK_WIDGET(toplevel)->window, (gpointer) &win_attr); normal_cursor = win_attr->cursor; cursor = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,cursor); while (gtk_events_pending()) gtk_main_iteration(); if (curset.reader_devnr != -1) { get_cd_toc_and_volid(curset.reader_devnr); fill_cdlist(); } scan_imagedirs(); fill_imglist(); /* reset cursor */ normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,normal_cursor); do_unlock();}void eject_clicked(GtkWidget *widget, gpointer load) {GdkWindowAttr *win_attr;GdkCursor *cursor,*normal_cursor; do_lock(); /* change cursor to watch */ gdk_window_get_user_data(GTK_WIDGET(toplevel)->window, (gpointer) &win_attr); normal_cursor = win_attr->cursor; cursor = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,cursor); while (gtk_events_pending()) gtk_main_iteration(); if (curset.reader_devnr != -1) { if (GPOINTER_TO_INT(load)) load_cd(curset.reader_devnr); else eject_cd(curset.reader_devnr); } /* reset cursor */ normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,normal_cursor); /* after we ejected or loaded automatically update screen */ /* in which menu are we right now? */ /* info menu? */ if (submenu == 1 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets[0])) == 1) { update_clicked(widget,0); } if (submenu == 2 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets2[0])) == 1) { update_clicked(widget,0); } do_unlock();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -