duplicate.c
来自「-一个LINUX下的使用方便 的CD-ROM刻录软件,开放源码」· C语言 代码 · 共 2,322 行 · 第 1/5 页
C
2,322 行
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 + =
减小字号Ctrl + -
显示快捷键?