📄 duplicate.c
字号:
f1 = gtk_frame_new(text(96)); set_font_and_color(f1,BOLDFONT,NULL); gtk_table_attach_defaults(GTK_TABLE(tbl),f1,0,1,0,1); gtk_widget_show(f1); f2 = gtk_frame_new(text(97)); set_font_and_color(f2,BOLDFONT,NULL); gtk_table_attach_defaults(GTK_TABLE(tbl),f2,1,2,0,1); gtk_widget_show(f2); /* button bar at the bottom */ hbox = gtk_hbox_new(TRUE,10); gtk_box_pack_start(GTK_BOX(actionspace),hbox,FALSE,TRUE,10); gtk_widget_show(hbox); b1 = gtk_button_new_with_label(text(98)); gtk_box_pack_start(GTK_BOX(hbox),b1,TRUE,TRUE,10); gtk_widget_show(b1); gtk_signal_connect(GTK_OBJECT(b1), "clicked", GTK_SIGNAL_FUNC(cddb_clicked), NULL); define_tooltip(b1,help(47));/* b1 = gtk_button_new_with_label(text(99)); gtk_box_pack_start(GTK_BOX(hbox),b1,TRUE,TRUE,10); gtk_widget_show(b1); gtk_signal_connect(GTK_OBJECT(b1), "clicked", GTK_SIGNAL_FUNC(eject_clicked), NULL); define_tooltip(b1,help(48));*/ b_update = gtk_button_new_with_label(text(100)); gtk_box_pack_start(GTK_BOX(hbox),b_update,TRUE,TRUE,10); gtk_widget_show(b_update); gtk_signal_connect(GTK_OBJECT(b_update), "clicked", GTK_SIGNAL_FUNC(update_clicked), NULL); define_tooltip(b_update,help(49)); /* left info frame */ vbox = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(f1),vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); gtk_widget_show(vbox); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox),scrolled_win,TRUE,TRUE,0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_widget_show(scrolled_win); titles[0] = g_strdup(""); titles[1] = text(101); cd_list = gtk_clist_new_with_titles(2,titles); gtk_signal_connect(GTK_OBJECT(cd_list), "select_row", GTK_SIGNAL_FUNC(undo_selections), NULL); gtk_container_add (GTK_CONTAINER (scrolled_win), cd_list); cdlist = GTK_CLIST(cd_list); gtk_clist_set_column_width(cdlist, 0, 16); gtk_clist_set_column_auto_resize(cdlist, 1, TRUE); gtk_widget_show(cd_list); tbl = gtk_table_new(3,8,TRUE); gtk_table_set_row_spacings(GTK_TABLE(tbl),10); gtk_table_set_col_spacings(GTK_TABLE(tbl),10); gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,10); gtk_widget_show(tbl); l1 = rightjust_gtk_label_new(text(103)); gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,0,1); gtk_widget_show(l1); e1 = gtk_entry_new(); cdlist_l1 = e1; gtk_entry_set_editable(GTK_ENTRY(e1),FALSE); gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,0,1); gtk_widget_show(e1); l1 = rightjust_gtk_label_new(text(104)); gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,1,2); gtk_widget_show(l1); e1 = gtk_entry_new(); cdlist_l2 = e1; gtk_entry_set_editable(GTK_ENTRY(e1),FALSE); gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,1,2); gtk_widget_show(e1); l1 = rightjust_gtk_label_new(text(105)); gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,2,3); gtk_widget_show(l1); e1 = gtk_entry_new(); cdlist_l3 = e1; gtk_entry_set_editable(GTK_ENTRY(e1),FALSE); gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,2,3); gtk_widget_show(e1); /* right info frame */ vbox = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(f2),vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); gtk_widget_show(vbox); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox),scrolled_win,TRUE,TRUE,0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_widget_show(scrolled_win); titles[0] = g_strdup(""); titles[1] = text(102); img_list = gtk_clist_new_with_titles(2,titles); gtk_signal_connect(GTK_OBJECT(img_list), "select_row", GTK_SIGNAL_FUNC(undo_selections), NULL); gtk_container_add (GTK_CONTAINER (scrolled_win), img_list); imglist = GTK_CLIST(img_list); gtk_clist_set_column_width(imglist, 0, 16); gtk_clist_set_column_auto_resize(imglist, 1, TRUE); gtk_widget_show(img_list); tbl = gtk_table_new(1,8,TRUE); gtk_table_set_row_spacings(GTK_TABLE(tbl),10); gtk_table_set_col_spacings(GTK_TABLE(tbl),10); gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,10); gtk_widget_show(tbl); l1 = rightjust_gtk_label_new(text(106)); gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,3,0,1); gtk_widget_show(l1); e1 = gtk_entry_new(); imglist_l1 = e1; gtk_entry_set_editable(GTK_ENTRY(e1),FALSE); gtk_table_attach_defaults(GTK_TABLE(tbl),e1,3,8,0,1); gtk_widget_show(e1); gtk_widget_show(actionspace); while (gtk_events_pending()) gtk_main_iteration(); /* now update screen */ gtk_button_clicked(GTK_BUTTON(b_update));}/* calculate the space that would be recycled on the harddrive when reading tracks and overwriting the ones with same names. This is used to show the user what space really is free dependant of the name he chooses for his files */gint get_free_space_by_overwriting_trackfiles(gint *biggest) {track_read_param_t *trackparam;gfloat per;gint i;gint overwrite;gint overwritebiggest; /* cd loaded? */ if (cdinfo.nr_tracks < 0) { /* no cd in drive - no files to read */ *biggest = 0; return 0; } /* free structure first */ clear_trackreadset(); /* fill structure */ trackreadset.nrtracks = cdinfo.nr_tracks; for(i=0; i<cdinfo.nr_tracks; i++) { /* allocate memory */ trackparam = g_new0(track_read_param_t,1); trackparam->trackinfo_index = i; trackparam->starttrack = trackinfo[i]->track_nr; trackparam->endtrack = 0; trackparam->tracktype = trackinfo[i]->type; per = (gfloat)trackinfo[i]->size * 100.0 / cdinfo.total_size; trackparam->percent = per; if (trackparam->tracktype == 0) { /* data track */ trackparam->kbyte = trackinfo[i]->size * (DATASECTORSIZE/1024); trackparam->frames = trackinfo[i]->size; trackparam->startoffset = trackinfo[i]->start_sec; if (i == cdinfo.nr_tracks-1) { /* last track - leadout is track-end */ trackparam->endoffset = cdinfo.leadout - 2; } else { /* sub 150 (2 sec leadout), sub 2 (2 run out sectors) */ trackparam->endoffset = trackinfo[i+1]->start_sec -150-2; } } else { /* audio */ trackparam->kbyte = trackinfo[i]->size * CDDAFRAME/1024; trackparam->frames = trackinfo[i]->size; } trackreadset.trackparams = g_list_append( trackreadset.trackparams, trackparam); } /* assign diskspace */ allocate_track_filenames(&overwrite, &overwritebiggest); *biggest = overwritebiggest; return overwrite;}/* callbacks for button in read-screen */void readalltracks_clicked(GtkWidget *widget, gpointer data) {gchar path[MAXLINE];gchar tmp[MAXLINE];track_read_param_t *trackparam;gfloat per;gint i, ret, tocindex;gint overwrite, overwritebiggest; /* no cd-reader defined */ if (curset.reader_devnr == -1) { show_dialog(ICO_ERROR,text(203), T_OK, NULL, NULL, 0); return; } /* now check if our cd-information is still valid */ get_cd_toc_and_volid(curset.reader_devnr); /* cd loaded? */ if (cdinfo.nr_tracks < 0) { /* update screen ... */ fill_read_menu(); show_dialog(ICO_WARN,text(266),T_OK,NULL,NULL,0); return; } /* now check for cd-extra because we dont handle this currently */ if (determine_cd_type(tmp,0) == 3) { show_dialog(ICO_INFO,text(286),T_OK,NULL,NULL,0); return; } /* ok, the user wants to read all tracks */ /* lets check if the file-prefix-entry is up to date */ set_image_prefix_callback(imglist_l1, NULL); /* free structure first */ clear_trackreadset(); /* fill structure */ trackreadset.nrtracks = cdinfo.nr_tracks; for(i=0; i<cdinfo.nr_tracks; i++) { /* allocate memory */ trackparam = g_new0(track_read_param_t,1); trackparam->trackinfo_index = i; trackparam->starttrack = trackinfo[i]->track_nr; trackparam->endtrack = 0; trackparam->tracktype = trackinfo[i]->type; per = (gfloat)trackinfo[i]->size * 100.0 / cdinfo.total_size; trackparam->percent = per; if (trackparam->tracktype == 0) { /* data track */ trackparam->kbyte = trackinfo[i]->size * (DATASECTORSIZE/1024); trackparam->frames = trackinfo[i]->size; trackparam->startoffset = trackinfo[i]->start_sec; if (i == cdinfo.nr_tracks-1) { /* last track - leadout is track-end */ trackparam->endoffset = cdinfo.leadout - 2; } else { /* sub 150 (2 sec leadout), sub 2 (2 run out sectors) */ trackparam->endoffset = trackinfo[i+1]->start_sec -150-2; } } else { /* audio */ trackparam->kbyte = trackinfo[i]->size * CDDAFRAME/1024; trackparam->frames = trackinfo[i]->size; } trackreadset.trackparams = g_list_append( trackreadset.trackparams, trackparam); } /* assign diskspace */ if (allocate_track_filenames(&overwrite, &overwritebiggest) != 0) { /* not enough space */ ret = show_dialog(ICO_WARN,text(299), T_ANYWAY, T_CANCEL, NULL, 1); if (ret == 1) { /* abort */ return; } } /* assign now a toc-file name */ if (curset.image_index == -1) { tocindex = 0; } else { tocindex = curset.image_index; } strncpy(path,(gchar *)g_list_nth_data(setupdata.image_dirs, tocindex), MAXLINE); g_snprintf(tmp,MAXLINE,"%s/%s.toc",path,curset.file_prefix); g_free(trackreadset.tocfile); trackreadset.tocfile = g_strdup(tmp); /* now all parameters for reading are set - lets begin */ show_and_do_read_tracks(curset.reader_devnr, 1);}/* fill the entries in the read_cd_menu */void fill_read_menu() {gchar tmp[MAXLINE];gchar tmp2[MAXLINE];gchar tmp3[MAXLINE];gint overwritefree, normalfree, biggestfree, overwritefreebiggest; /* file prefix */ if (strcmp(curset.file_prefix,"") == 0) { g_free(curset.file_prefix); curset.file_prefix = g_strdup(IMGFILEPREFIX); } gtk_entry_set_text(GTK_ENTRY(imglist_l1), curset.file_prefix); gtk_entry_select_region(GTK_ENTRY(imglist_l1), 0, GTK_ENTRY(imglist_l1)->text_length); /* now check if the current filename has any influence on the available space */ overwritefree = get_free_space_by_overwriting_trackfiles(&overwritefreebiggest); /* free size */ normalfree = determine_free_space(&biggestfree); convert_kbytes2mbminstring(normalfree,tmp3); /* additional free space when overwriting files? */ if (cdinfo.nr_tracks > 0 && overwritefree > 0) { convert_kbytes2mbstring(normalfree+overwritefree, tmp2); g_snprintf(tmp,MAXLINE,"%s (%s)", tmp3, tmp2); } else { strcpy(tmp,tmp3); } gtk_entry_set_text(GTK_ENTRY(imglist_l2), tmp); /* biggest free block */ convert_kbytes2mbminstring(biggestfree,tmp3); if (cdinfo.nr_tracks > 0 && overwritefreebiggest > 0) { convert_kbytes2mbstring(biggestfree+overwritefreebiggest, tmp2); g_snprintf(tmp,MAXLINE,"%s (%s)", tmp3, tmp2); } else { strcpy(tmp,tmp3); } gtk_entry_set_text(GTK_ENTRY(imglist_l3), tmp); /* 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),""); gtk_entry_set_text(GTK_ENTRY(cdlist_l4),""); 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),""); gtk_entry_set_text(GTK_ENTRY(cdlist_l4),""); return; } /* 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); /* nr tracks */ g_snprintf(tmp,MAXLINE,"%d",cdinfo.nr_tracks); gtk_entry_set_text(GTK_ENTRY(cdlist_l4), tmp);}void set_image_prefix_callback(GtkWidget *widget, gpointer data) {gchar tmp[MAXLINE]; g_free(curset.file_prefix); strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(widget))); /* now check for illegal chars */ if (remove_illegal_chars(tmp) == 1) { gtk_entry_set_text(GTK_ENTRY(widget), tmp); show_dialog(ICO_WARN,text(265),T_OK,NULL,NULL, 0); } curset.file_prefix = g_strdup(tmp); /* empty-file? */ if (strcmp(curset.file_prefix,"") == 0) { g_free(curset.file_prefix); curset.file_prefix = g_strdup(IMGFILEPREFIX); gtk_entry_set_text(GTK_ENTRY(widget), curset.file_prefix); } gtk_entry_select_region(GTK_ENTRY(widget), 0, GTK_ENTRY(widget)->text_length); /* update free overwrite size */ if (submenu == 1) { fill_read_menu(); } if (submenu == 2 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets2[1])) == 1) { fill_read_tracks(1); } if (submenu == 2 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets2[4])) == 1) { fill_master_write_menu(); }}void readoptions_selected(GtkWidget *item, gpointer nr) {gint sel; sel = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(item)); switch(GPOINTER_TO_INT(nr)) { case 0: curset.indexscan = sel; break; }}/* draw the read-menu */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -