⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menus.c

📁 -一个LINUX下的使用方&#63845 的CD-ROM刻录软件,开放源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*	menus.c	27.3.99 tn*/#include <stdio.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <dirent.h>#include <fcntl.h>#include <sys/types.h>#include <errno.h>#include <ctype.h>#include <gtk/gtk.h>#include <gdk/gdk.h>#include <gdk_imlib.h>#include "xcdroast.h"#include "main.h"#include "xpms/treefolderopen.xpm"#include "xpms/treefolderclosed.xpm"#include "xpms/filesmall.xpm"extern gint debug;extern GtkWidget *toplevel;extern GtkWidget *splitspace;extern GtkWidget *sidespace;extern GtkWidget *workspace;extern GtkWidget *actionspace;extern scsi_devices_t **scsidevices;extern writer_driver_t **blankmodes;extern setup_data_t setupdata;extern cd_info_t cdinfo;extern track_info_t **trackinfo;extern GList *imagelist;extern current_set_t curset;extern track_read_set_t trackreadset;extern gint read_done;extern GList *tocfiles;extern gint read_abort_mark;extern gchar sharedir[MAXLINE];GtkWidget *ctree_window;GtkWidget *ctree_entry;GtkWidget *ctree_okbutton;gint ctree_showfiles;GtkCTreeNode *parent_node;GtkCTree *ctree_base;gchar *ctree_basedir;GtkWidget *cddb_info_label;GtkWidget *cddb_info_okbutton;GtkWidget *cddb_window;GtkCList *cddb_clist;GtkWidget *readtrack_info_label, *readtrack_textview, *readtrack_button;GtkWidget *readtrack_pbar1, *readtrack_pbar2, *readtrack_savebutton;GtkWidget *readtrack_pbar3;GtkWidget *readtrack_small_info, *readtrack_small_info2, *readtrack_info_tbl;GtkWidget *readtrack_info_frame;GdkPixmap *pixmap1, *pixmap2, *pixmap3;GdkBitmap *mask1, *mask2, *mask3;GtkWidget *viewmode_scrolled;GtkWidget *viewmode_dialog;GtkWidget *blank_infolabel;GtkWidget *blank_text_window;gint dialog_done, dialog_done2, dialog_done3;gint misc_timer;gint dialog_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) {	dialog_done = -1;        return(TRUE);}gint dialog_delete_event2(GtkWidget *widget, GdkEvent *event, gpointer data) {	dialog_done2 = -1;        return(TRUE);}gint dialog_delete_event3(GtkWidget *widget, GdkEvent *event, gpointer data) {	dialog_done3 = -1;        return(TRUE);}void dialog_btn_press(GtkWidget *widget, gpointer data) {	dialog_done = GPOINTER_TO_INT(data);}/* popup a modal window, set cursor to watch, return button pressed   or -1 when delete_event found.   Up to three buttons. Set unused buttons to NULL    Centers automatically above the toplevel-widow    if no toplevel window available center on display*//* gint show_dialog(gchar **icon_xpm, gchar *ttext, gchar *btn1, gchar *btn2, gchar *btn3, gint defbutton) { */gint show_dialog(gchar *icon_file, gchar *ttext, gchar *btn1, gchar *btn2, gchar *btn3, gint defbutton) {GtkWidget *dialog;GtkWidget *button1;GtkWidget *button2;GtkWidget *button3;GtkWidget *box1,*box2;GtkWidget *b1_t,*b1_sep,*pix,*lab;gint xpos, ypos;gint xsize, ysize;GdkCursor *cursor,*normal_cursor;GdkPixmap *pixmap;GdkBitmap *mask;/* GtkStyle *style; */GtkRequisition rq;GdkWindowAttr *win_attr;gint w,h;GdkImlibImage *im;gchar tmp[MAXLINE];	/* if another dialog is running, ignore */	if (dialog_done == 999) {		return -1;	}	dodebug(8, "displaying show_dialog: %s\n", ttext);	/* mark our dialog as running */	dialog_done = 999;	/* create new window and position it relative to the main window */        dialog = gtk_window_new(GTK_WINDOW_DIALOG);	gtk_window_set_title(GTK_WINDOW(dialog),text(2));dodebug(9, "created new window\n");	/* make sure our window is always on top */	gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(toplevel));dodebug(9, "set transient\n");        gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",                GTK_SIGNAL_FUNC (dialog_delete_event), (gpointer) dialog);dodebug(9, "connect delete event\n");	/* create layout for dialog */        box1 = gtk_vbox_new(FALSE,0);        gtk_container_add(GTK_CONTAINER(dialog),box1);        b1_t = gtk_table_new(1,10, TRUE);	gtk_container_border_width(GTK_CONTAINER(b1_t),10);        gtk_box_pack_start(GTK_BOX(box1),b1_t,FALSE,TRUE,10);dodebug(9, "creating vbox in table \n");	/* realize table to be able to put a pixmap in it */        gtk_widget_realize(b1_t);dodebug(9, "realize table \n");/*        style = gtk_widget_get_style(b1_t);        pixmap = gdk_pixmap_create_from_xpm_d(b1_t->window, &mask,                 &style->bg[GTK_STATE_NORMAL],(gchar **)icon_xpm);*/	g_snprintf(tmp,MAXLINE,"%s/%s", sharedir,icon_file);dodebug(9, "trying to load %s\n", tmp);	im=gdk_imlib_load_image(tmp);	if (im) {dodebug(9, "load successful\n");		w=im->rgb_width;		h=im->rgb_height;		gdk_imlib_render(im,w,h);dodebug(9, "render successful\n");		pixmap = gdk_imlib_move_image(im);		mask = gdk_imlib_move_mask(im);        	pix = gtk_pixmap_new(pixmap,mask);        	gtk_table_attach_defaults(GTK_TABLE(b1_t), pix, 0,2,0,1);dodebug(9, "attach pixmap\n");	}        lab = gtk_label_new(ttext);        gtk_table_attach_defaults(GTK_TABLE(b1_t), lab, 2,10,0,1);dodebug(9, "attach label\n");        b1_sep = gtk_hseparator_new();        gtk_box_pack_start(GTK_BOX(box1),b1_sep,FALSE,TRUE,0);        box2 = gtk_hbox_new(FALSE,0);        gtk_box_pack_start(GTK_BOX(box1),box2,FALSE,TRUE,10);	if (btn1 != NULL) {        	button1 = gtk_button_new_with_label (btn1);		gtk_box_pack_start(GTK_BOX(box2),button1,TRUE,TRUE,10);		gtk_widget_show(button1);		gtk_signal_connect(GTK_OBJECT(button1),"clicked",			GTK_SIGNAL_FUNC(dialog_btn_press), GINT_TO_POINTER(0));		GTK_WIDGET_SET_FLAGS (button1, GTK_CAN_DEFAULT);		if (defbutton == 0) gtk_widget_grab_default (button1);	}	if (btn2 != NULL) {        	button2 = gtk_button_new_with_label (btn2);		gtk_box_pack_start(GTK_BOX(box2),button2,TRUE,TRUE,10);		gtk_widget_show(button2);		gtk_signal_connect(GTK_OBJECT(button2),"clicked",			GTK_SIGNAL_FUNC(dialog_btn_press), GINT_TO_POINTER(1));		GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT);		if (defbutton == 1) gtk_widget_grab_default (button2);	}	if (btn3 != NULL) {        	button3 = gtk_button_new_with_label (btn3);		gtk_box_pack_start(GTK_BOX(box2),button3,TRUE,TRUE,10);		gtk_widget_show(button3);		gtk_signal_connect(GTK_OBJECT(button3),"clicked",			GTK_SIGNAL_FUNC(dialog_btn_press), GINT_TO_POINTER(2));		GTK_WIDGET_SET_FLAGS (button3, GTK_CAN_DEFAULT);		if (defbutton == 2) gtk_widget_grab_default (button3);	}dodebug(9, "created buttonbox\n");        gtk_widget_show(box2);        gtk_widget_show(b1_sep);        gtk_widget_show(pix);        gtk_widget_show(lab);        gtk_widget_show(b1_t);        gtk_widget_show(box1);dodebug(9, "showing elements\n");	/* grab cursor and change to watch */	if (GTK_WIDGET_MAPPED(toplevel)) {        	gtk_grab_add(dialog);		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);dodebug(9, "setting cursor to watch\n");	}	/* only center window when toplevel visible */	if ( GTK_WIDGET_VISIBLE(toplevel)) {        	gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_NONE);        	gdk_window_get_origin(GTK_WIDGET(toplevel)->window,&xpos,&ypos);        	gdk_window_get_size(GTK_WIDGET(toplevel)->window,&xsize,&ysize);		gtk_widget_size_request(dialog,&rq);        	gtk_widget_set_uposition(GTK_WIDGET(dialog),xpos+xsize/2-rq.width/2,ypos+ysize/2-rq.height/2);dodebug(9, "center window in toplevel\n");	} else {		/* otherwise center in screen */        	gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_NONE);		xsize = gdk_screen_width();		ysize = gdk_screen_height();		gtk_widget_size_request(dialog,&rq);        	gtk_widget_set_uposition(GTK_WIDGET(dialog),xsize/2-rq.width/2,ysize/2-rq.height/2);dodebug(9, "center window onscreen\n");			}	gtk_widget_show(dialog);dodebug(9, "showing dialog\n");	/* if this is a warning sound bell (if requested in setup) */	if (strcmp(icon_file, ICO_WARN) == 0) {		dobeep(2);	}dodebug(9, "start wait for input\n");	/* now wait until button is pressed */	while (dialog_done == 999) {		wait_and_process_events();	}dodebug(9, "done waiting\n");	if (GTK_WIDGET_MAPPED(toplevel)) {        	gtk_grab_remove(GTK_WIDGET(dialog));		normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);        	gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,normal_cursor);dodebug(9, "restored cursor\n");	}	/* remove dialog window */        gtk_widget_destroy(dialog);dodebug(9, "destroying dialog\n");	return dialog_done; }/* clears the left sidebar */void clear_sidespace() {	gtk_widget_destroy(sidespace);	sidespace = gtk_vbox_new(FALSE,0);	gtk_paned_add1(GTK_PANED(splitspace), sidespace);	set_sidebar_width();}/* clears the right workspace */void clear_workspace() {	gtk_widget_destroy(workspace);	workspace = gtk_vbox_new(FALSE,0);	gtk_paned_add2(GTK_PANED(splitspace), workspace);}/* clears the actionspace subwindow */void clear_actionspace() {	gtk_widget_destroy(actionspace);	actionspace = gtk_vbox_new(FALSE,0);	gtk_box_pack_start(GTK_BOX(workspace), actionspace,TRUE,TRUE,10);	/* strange, why we need that...*/	while (gtk_events_pending())		gtk_main_iteration();}/* add subdirectory nodes to an existing ctree */void ctree_add_dir_nodes(gchar *path, GtkCTree *ctree, GtkCTreeNode *parent, gint showfiles) {struct dirent *ent;DIR *dir;         gchar *text[1];gchar tmp[MAXLINE];GtkCTreeNode *sibling;gchar *textdata;GList *dir_list;GList *file_list;	dir_list = NULL;	file_list = NULL;	dir = opendir(path);	/* invalid directory */	if (dir == NULL) 		return;	/* read entries */	while ( (ent = readdir(dir)) ) {		if (strcmp(ent->d_name,".") == 0 || 		    strcmp(ent->d_name,"..") == 0) 			continue;		strcpy(tmp,path);		/* add slash when not there */		if (tmp[strlen(tmp)-1] != '/')  			strcat(tmp,"/");		strcat(tmp,ent->d_name);		/* add only directories */		if (is_directory(tmp) == 1) {			dir_list = g_list_append(dir_list, g_strdup(ent->d_name));		} else {			if (showfiles) 				file_list = g_list_append(file_list, g_strdup(ent->d_name));		}	}	closedir(dir);	/* sort the directory-list */	if (dir_list == NULL && showfiles == 0)		return;	sort_glist(dir_list);	/* sort the file-list */	if (file_list != NULL && showfiles) {		sort_glist(file_list);	}	/* draw entries */	while (dir_list) {		/* allocate directory names */		text[0] = dir_list->data;		strcpy(tmp,path);		/* add slash when not there */		if (tmp[strlen(tmp)-1] != '/')  			strcat(tmp,"/");		if ((strlen(tmp) + strlen(dir_list->data)) > MAXLINE-1) {			/* getting to long..writing dummy*/			strcat(tmp,"+");		} else {				strcat(tmp,dir_list->data);		}		textdata = g_strdup(tmp);		/* now check if there are subdirs in that dir */		if (is_subdirs(tmp)) {			sibling = gtk_ctree_insert_node (ctree,parent,				NULL,text,3,pixmap1,mask1,				pixmap2,mask2,FALSE,FALSE);			/* create dummy node */			gtk_ctree_insert_node (ctree,sibling,				NULL,text,3,NULL,NULL,NULL,NULL,TRUE,FALSE);		} else {			/* no subdirs */			if (!showfiles || !is_subfiles(tmp)) {				/* if do not show files, dont allow				   changing into empty directory */				sibling = gtk_ctree_insert_node (ctree,parent,					NULL,text,3,pixmap1,mask1,					pixmap2,mask2,TRUE,FALSE);			} else {				/* let user browse directory */				sibling = gtk_ctree_insert_node (ctree,parent,					NULL,text,3,pixmap1,mask1,					pixmap2,mask2,FALSE,FALSE);				gtk_ctree_insert_node (ctree,sibling,				NULL,text,3,NULL,NULL,NULL,NULL,TRUE,FALSE);			}			}		/* save the full path name in the node-data */		gtk_ctree_node_set_row_data(ctree,sibling,textdata); 		dir_list = dir_list->next;	}	/* add files */	while (file_list) {		text[0] = file_list->data;		strcpy(tmp,path);		/* add slash when not there */		if (tmp[strlen(tmp)-1] != '/')  			strcat(tmp,"/");		if ((strlen(tmp) + strlen(file_list->data)) > MAXLINE-1) {			/* getting to long..writing dummy*/			strcat(tmp,"+");		} else {				strcat(tmp,file_list->data);		}		textdata = g_strdup(tmp);		sibling = gtk_ctree_insert_node (ctree,parent,				NULL,text,3,pixmap3,mask3,				pixmap3,mask3,TRUE,FALSE);		/* save the full path name in the node-data */		gtk_ctree_node_set_row_data(ctree,sibling,textdata); 		file_list = file_list->next;	}	/* free list */	free_glist(&dir_list);	free_glist(&file_list);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -