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

📄 log.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 2 页
字号:
		if (kevent->keyval==GDK_Escape){//			g_signal_emit_by_name(G_OBJECT(window),"delete_event");			log_window_destroy_by_log(log);			return TRUE;		};	};	return FALSE;};void log_window_set_split_info(tDownload *what){	if (what && what->split && what->who && what->CurrentLog && what->CurrentLog->Window){		tLogWindow *temp=(tLogWindow *)what->CurrentLog->Window;		if (temp && temp->current && temp->label){			fsize_t loaded=0,begin=0,size=0;			if (temp->current->who)				loaded=temp->current->who->get_readed();			if (temp->current->split){				size=temp->current->split->LastByte;				begin=temp->current->split->FirstByte;			};			char text[100];			if (temp->current->thread_id)				sprintf(text," %lli-%lli (%lli)",begin,size,loaded);			else				sprintf(text," %lli-%lli (not active)",begin,size);			gtk_label_set_text(GTK_LABEL(temp->label),text);		};	};};gint log_window_button(GtkWidget *button,int a){	tDownload *what=(tDownload *)g_object_get_data(G_OBJECT(button),"d4x_user_data");	tDownload *withlog=what;	while (withlog){		if (withlog->LOG->Window) break;		withlog=withlog->split->next_part;	};	if (what->split==NULL){		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(((tLogWindow *)(withlog->LOG->Window))->button),TRUE);		return FALSE;	};	if (withlog==NULL || withlog->LOG->Window==NULL)		return FALSE;	tDownload *forlog=what;	int b=a;	while (forlog){		a-=1;		if (a==0) break;		forlog=forlog->split->next_part;	};	if (forlog && forlog!=withlog && forlog->LOG!=NULL){		withlog->LOG->lock();		forlog->LOG->lock();		forlog->LOG->Window=withlog->LOG->Window;		withlog->LOG->Window=NULL;		withlog->LOG->unlock();		tLogWindow *temp=(tLogWindow *)(forlog->LOG->Window);		temp->current=forlog;		g_object_set_data(G_OBJECT(temp->window),"d4x_user_data",forlog->LOG);		gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(temp->view)));		forlog->LOG->print();		forlog->LOG->unlock();		what->LOG->last_log=b;		what->CurrentLog=forlog->LOG;		/* FIXME: signal_connect again???? */		g_signal_handlers_disconnect_matched(GTK_OBJECT(temp->window),					    G_SIGNAL_MATCH_DATA,					    0,0,NULL,NULL,					    withlog->LOG);		g_signal_connect(G_OBJECT(temp->window),				   "delete_event",		                   (GtkSignalFunc)log_window_destroy,				   forlog->LOG);		g_signal_connect(G_OBJECT(temp->window), "key_press_event",		                   (GtkSignalFunc)log_window_event_handler, forlog->LOG);		g_signal_emit_by_name(G_OBJECT (temp->adj), "changed");		log_window_set_split_info(temp->papa);	};	if (forlog==NULL || forlog->LOG==NULL){		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(((tLogWindow *)(withlog->LOG->Window))->button),TRUE);		what->LOG->last_log=1;	};	return TRUE;};void log_window_init(tDownload *what) {	if (what) {		if (what->LOG==NULL){			what->LOG=new tLog;			what->LOG->init(CFG.MAX_LOG_LENGTH);			what->LOG->ref_inc();		};		if (what->LOG->Window) {			tLogWindow *temp=(tLogWindow *)what->LOG->Window;			gtk_window_present(GTK_WINDOW(temp->window));			return;		}else{			if (what->split){				tDownload *next_part=what->split->next_part;				while (next_part){					if (next_part->LOG && next_part->LOG->Window){						tLogWindow *temp=(tLogWindow *)(next_part->LOG->Window);						gtk_window_present(GTK_WINDOW(temp->window));						return;					};					next_part=next_part->split->next_part;				};			};		};		what->LOG->lock();		tLogWindow *temp=new tLogWindow;		temp->papa=temp->current=what;		temp->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);		gtk_window_set_wmclass(GTK_WINDOW(temp->window),				       "D4X_Log","D4X");		int a[4];		what->LOG->get_geometry(a);		if (a[3]!=0 && a[2]!=0){			gtk_window_move(GTK_WINDOW(temp->window), a[0], a[1]);			gtk_window_set_default_size( GTK_WINDOW (temp->window), a[2], a[3]);		};		gtk_widget_set_size_request( GTK_WIDGET (temp->window), 400, 200);		char title[MAX_LEN];		title[0]=0;		strcat(title,_("Log: "));		char *rfile=unparse_percents(what->info->file.get());		strcat(title,rfile);		delete[] rfile;		gtk_window_set_title(GTK_WINDOW (temp->window), title);		g_signal_connect(G_OBJECT(temp->window), "key_press_event",		                   (GtkSignalFunc)log_window_event_handler, what->LOG);		g_signal_connect(G_OBJECT(temp->window), "delete_event",				 (GtkSignalFunc)log_window_destroy, what->LOG);				GtkListStore *list_store = gtk_list_store_new(L_COL_LAST+2,							      GDK_TYPE_PIXBUF, //L_COL_TYPE,							      G_TYPE_INT,      //L_COL_NUM,							      G_TYPE_STRING,   //L_COL_TIME,							      G_TYPE_STRING,   //L_COL_STRING,							      GDK_TYPE_COLOR,  //L_COL_LAST;							      GDK_TYPE_COLOR);		temp->view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)));		GtkCellRenderer *renderer;		GtkTreeViewColumn *col;		renderer = gtk_cell_renderer_pixbuf_new();		col=gtk_tree_view_column_new_with_attributes ("Tittle",							      renderer,							      "pixbuf",0,							      NULL);		gtk_tree_view_append_column(temp->view,col);		for (int i=L_COL_NUM;i<L_COL_LAST;i++){			renderer = gtk_cell_renderer_text_new();			col=gtk_tree_view_column_new_with_attributes("Tittle",								     renderer,								     "text",i,								     "foreground-gdk",ML_COL_LAST,								     "background-gdk",ML_COL_LAST+1,								     NULL);			gtk_tree_view_append_column(temp->view,col);		};							      		gtk_tree_view_set_headers_visible(temp->view,FALSE);		gtk_tree_view_set_reorderable(temp->view,FALSE);		g_signal_connect(G_OBJECT(temp->view),"event",G_CALLBACK(log_list_event_handler),temp);		temp->adj = (GtkAdjustment *)gtk_adjustment_new (0.0, 0.0, 0.0, 0.1, 1.0, 1.0);		GtkWidget *swindow=gtk_scrolled_window_new((GtkAdjustment*)NULL,temp->adj);		gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),		                                GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);		gtk_container_add(GTK_CONTAINER(swindow),GTK_WIDGET(temp->view));		if (what->split){			GtkWidget *buttonsbar=temp->toolbar=gtk_toolbar_new();			gtk_toolbar_set_orientation(GTK_TOOLBAR(buttonsbar),GTK_ORIENTATION_HORIZONTAL);			gtk_toolbar_set_style(GTK_TOOLBAR(buttonsbar),GTK_TOOLBAR_TEXT);			GtkWidget *tmpbutton=NULL;			for (int i=1;i<=what->split->NumOfParts;i++){				char data[MAX_LEN];				char tip[MAX_LEN];				g_snprintf(data,MAX_LEN," %i ",i);				g_snprintf(tip,MAX_LEN,"Ctrl+%i",i);				tmpbutton=gtk_toolbar_append_element (GTK_TOOLBAR (buttonsbar),								      GTK_TOOLBAR_CHILD_RADIOBUTTON,								      (GtkWidget *)tmpbutton,								      data,tip,"",NULL,								      G_CALLBACK (log_window_button),								      GINT_TO_POINTER(i));				if (what->LOG->last_log==i){					temp->button=tmpbutton;				};				g_object_set_data(G_OBJECT(tmpbutton),"d4x_user_data",what);			};			temp->label=gtk_label_new("");			gtk_toolbar_append_widget(GTK_TOOLBAR (buttonsbar),temp->label,NULL,NULL);			GtkWidget *tmpvbox=gtk_vbox_new(FALSE,0);			gtk_box_pack_start(GTK_BOX(tmpvbox),buttonsbar,FALSE,FALSE,0);			gtk_box_pack_end(GTK_BOX(tmpvbox),swindow,TRUE,TRUE,0);			gtk_container_add(GTK_CONTAINER(temp->window),tmpvbox);		}else{			temp->toolbar=NULL;			temp->label=NULL;			gtk_container_add(GTK_CONTAINER(temp->window),swindow);		};		what->LOG->Window=temp;		g_object_set_data(G_OBJECT(temp->window),"d4x_user_data",what->LOG);/*		if (CFG.FIXED_LOG_FONT){			GtkStyle *current_style =gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(temp->view)));			GdkFont *font=gdk_fontset_load("-*-fixed-medium-r-*-*-*-120-*-*-*-*-*-*");			if (font==NULL){				font = gdk_fontset_load("-*-*-medium-r-*-*-*-120-*-*-m-*-*-*");;			};			if (font)				gtk_style_set_font(current_style,font);			gtk_widget_set_style(GTK_WIDGET(temp->view), current_style);		};*/		gtk_widget_show_all(temp->window);		what->LOG->print();		what->LOG->unlock(); // unlock by main thread?		what->CurrentLog=what->LOG;		g_signal_connect(G_OBJECT(temp->adj), "changed",G_CALLBACK(my_gtk_auto_scroll), temp);		temp->adj->value=temp->adj->upper-temp->adj->page_size;		temp->value=temp->adj->value;		g_signal_emit_by_name(G_OBJECT (temp->adj), "changed");		if (what->LOG->last_log>1 && what->split &&		    what->LOG->last_log<=what->split->NumOfParts){			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(temp->button),TRUE);			log_window_button(temp->button,					  what->LOG->last_log);			}else{			what->LOG->last_log=1;		};		log_window_set_split_info(what);	};};void log_window_set_title(tDownload *what,char *title) {	if (what && what->CurrentLog && what->CurrentLog->Window) {		tLogWindow *temp=(tLogWindow *)what->CurrentLog->Window;		gtk_window_set_title(GTK_WINDOW (temp->window), title);	};};void del_first_from_log(tLog *what) {	tLogWindow *temp=(tLogWindow *)what->Window;	if (temp) {		GtkTreeIter iter;		GtkListStore *store=(GtkListStore *)gtk_tree_view_get_model(temp->view);		gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store),&iter);		gtk_list_store_remove(store,&iter);	};};GList *log_window_freeze(GList *list,tLog *what){	tLogWindow *temp=(tLogWindow *)what->Window;	if (temp){		what->freezed_flag=1;		GList *tlist=(GList *)g_malloc(sizeof(GList));		tlist->next=list;		tlist->data=what;		tlist->prev=NULL;		return(tlist);	};	return(list);};GList *log_window_unfreeze(GList *list){	tLog *what=(tLog *)list->data;	tLogWindow *temp=(tLogWindow *)what->Window;	GList *next=list->next;	g_free(list);	what->freezed_flag=0;	if (temp){		gtk_widget_queue_draw(GTK_WIDGET(temp->view));	};	return(next);};

⌨️ 快捷键说明

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