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

📄 log.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 2 页
字号:
/*	WebDownloader for X-Window *	Copyright (C) 1999-2002 Koshelev Maxim *	This Program is free but not GPL!!! You can't modify it *	without agreement with author. You can't distribute modified *	program but you can distribute unmodified program. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */#include <stdio.h>#include <gtk/gtk.h>#include <gdk/gdkkeysyms.h>#include <pthread.h>#include <string.h>#include "../dlist.h"#include "../locstr.h"#include "../var.h"#include "../ntlocale.h"#include "list.h"#include "colors.h"#include "about.h"#include "misc.h"enum LOG_COLUMNS{	L_COL_TYPE,	L_COL_NUM,	L_COL_TIME,	L_COL_STRING,	L_COL_LAST};GdkPixbuf *log_pixbufs[5];struct tLogWindow {	GtkWidget *window;	GtkTreeView *view;	GtkAdjustment *adj;	GtkWidget *button;	GtkWidget *toolbar;	GtkWidget *label;	tDownload *papa; // :))	tDownload *current;	float value;	tStringDialog *string;	tLogWindow();	~tLogWindow();};tLogWindow::tLogWindow() {	string=(tStringDialog *)NULL;};tLogWindow::~tLogWindow() {	if (string) delete string;};gint log_window_button(GtkWidget *button,int a);void init_pixmaps_for_log() {#include "pixmaps2/ok.xpm"#include "pixmaps2/from_server.xpm"#include "pixmaps2/to_server.xpm"#include "pixmaps2/error.xpm"#include "pixmaps2/warning.xpm"	log_pixbufs[0]=gdk_pixbuf_new_from_xpm_data((const char **)ok_xpm);	log_pixbufs[1]=gdk_pixbuf_new_from_xpm_data((const char **)to_server_xpm);	log_pixbufs[2]=gdk_pixbuf_new_from_xpm_data((const char **)from_server_xpm);	log_pixbufs[3]=gdk_pixbuf_new_from_xpm_data((const char **)error_xpm);	log_pixbufs[4]=gdk_pixbuf_new_from_xpm_data((const char **)warning_xpm);};void log_window_remember_geometry(GtkWidget *window, tLogWindow *temp){	if (window->window) {		int a[4];		gdk_window_get_root_origin(window->window,&a[0],&a[1]);		gdk_window_get_size(window->window,&a[2],&a[3]);		if (temp->papa && temp->papa->LOG)			temp->papa->LOG->store_geometry(a);	};};void log_window_destroy_by_log(void *a) {	tLog *log=(tLog *) a;	if (log==NULL) return;	tLogWindow *temp=(tLogWindow *)log->Window;	if (temp) {		log->Window=NULL;		log_window_remember_geometry(temp->window,temp);		temp->papa->CurrentLog=temp->papa->LOG;		gtk_widget_destroy(GTK_WIDGET(temp->window));		delete (temp);	};};int log_window_destroy(GtkWidget *window,GdkEvent *event, tLog *log) {	if (log) {		tLogWindow *temp=(tLogWindow *)log->Window;		if (temp) {			temp->papa->CurrentLog=NULL;			log->Window=NULL;			log_window_remember_geometry(window,temp);			gtk_widget_destroy(GTK_WIDGET(window));			delete (temp);		};	};	return TRUE;};void log_window_add_string(tLog *log,tLogString *str) {	tLogWindow *temp=(tLogWindow *)log->Window;	if (!temp) return;	char useful[MAX_LEN+1];	struct tm msgtime;	localtime_r(&(str->time),&msgtime);	strftime(useful,MAX_LEN,"%T",&msgtime);	/* replace all nonprint symbols by space */	char *str_temp=copy_string(str->body);	str_non_print_replace(str_temp,' ');	GtkTreeIter iter;	GtkListStore *list_store=GTK_LIST_STORE(gtk_tree_view_get_model(temp->view));	gtk_list_store_append(list_store, &iter);	gtk_list_store_set(list_store, &iter,			   L_COL_NUM,str->temp,			   L_COL_TIME,useful,			   L_COL_STRING,str_temp,			   -1);	delete[] str_temp;	const GdkColor *color,*back_color;	switch (str->type) {	case LOG_OK:{		gtk_list_store_set(list_store,&iter,L_COL_TYPE,log_pixbufs[0],-1);		color=&BLACK;		back_color=&WHITE;		break;	};	case LOG_TO_SERVER: {		gtk_list_store_set(list_store,&iter,L_COL_TYPE,log_pixbufs[1],-1);		color=&CYAN;		back_color=&LCYAN;		break;	};	case LOG_FROM_SERVER: {		gtk_list_store_set(list_store,&iter,L_COL_TYPE,log_pixbufs[2],-1);		color=&BLUE;		back_color=&LBLUE;		break;	};	case LOG_WARNING:{		gtk_list_store_set(list_store,&iter,L_COL_TYPE,log_pixbufs[4],-1);		color=&GREEN;		back_color=&LGREEN;		break;	};	case LOG_ERROR: {		gtk_list_store_set(list_store,&iter,L_COL_TYPE,log_pixbufs[3],-1);		color=&RED;		back_color=&LRED;		break;	};	default:		color=&BLACK;		back_color=&WHITE;	};	gtk_list_store_set(list_store,&iter,			   L_COL_LAST,color,			   L_COL_LAST+1,back_color,			   -1);};static gint log_list_event_handler(GtkWidget *widget,GdkEventButton *event,tLogWindow *temp) {	if (temp && event && event->type==GDK_2BUTTON_PRESS &&	    event->button==1 && temp->papa) {		GtkTreeSelection *sel=gtk_tree_view_get_selection(temp->view);		GtkTreeIter iter;		if (!gtk_tree_selection_get_selected(sel,NULL,&iter)) return FALSE;		if (temp->string==NULL) temp->string=new tStringDialog;		GValue val={0,};		GtkTreeModel *model=gtk_tree_view_get_model(temp->view);		gtk_tree_model_get_value(model,&iter,L_COL_NUM,&val);		int num=g_value_get_int(&val);		char data[MAX_LEN];		char *rfile=unparse_percents(temp->papa->info->file.get());		sprintf(data,_("Row number %i [log of %s]"),num,rfile);		delete[] rfile;		g_value_unset(&val);		gtk_tree_model_get_value(model,&iter,L_COL_STRING,&val);		char *text=(char*)g_value_get_string(&val);/*		int err_code=0;//GPOINTER_TO_INT(gtk_clist_get_row_data(GTK_CLIST(temp->clist),row));		char *error_name=NULL;		switch(err_code){		case LOG_ERROR:			error_name=_("Erorr!");			break;		case LOG_WARNING:			error_name=_("Warning!");			break;		case LOG_TO_SERVER:			error_name=_("Message to server");			break;		case LOG_FROM_SERVER:			error_name=_("Message from server");			break;		default:		case LOG_OK:			error_name=_("All ok");			break;		};*/		temp->string->init(text,data,"");		g_value_unset(&val);		return TRUE;	};	return FALSE;};static void my_gtk_auto_scroll( GtkAdjustment *get,tLogWindow *temp){	if (get==NULL || temp==NULL) return;	if (temp->value==get->value && get->value<get->upper-get->page_size) {		get->value=get->upper-get->page_size;		temp->value=get->value;		g_signal_emit_by_name(G_OBJECT (get), "value_changed");	} else		temp->value=get->value;}gint log_window_button(GtkWidget *button,int a);static gint log_window_event_handler(GtkWidget *window,GdkEvent *event,tLog *log){	if (event && event->type == GDK_KEY_PRESS) {		GdkEventKey *kevent=(GdkEventKey *)event;		tLogWindow *wnd=(tLogWindow *)log->Window;		int num=0;		if (kevent->state & GDK_CONTROL_MASK){			switch(kevent->keyval) {			case GDK_1:				num=1;				break;			case GDK_2:				num=2;				break;			case GDK_3:				num=3;				break;			case GDK_4:				num=4;				break;			case GDK_5:				num=5;				break;			case GDK_6:				num=6;				break;			case GDK_7:				num=7;				break;			case GDK_8:				num=8;				break;			case GDK_9:				num=9;				break;			case GDK_0:				num=10;				break;			};		};		if (num && wnd->toolbar){			GList *list=GTK_TOOLBAR(wnd->toolbar)->children;			int a=1;			while (list && num>a){				list=list->next;				a++;			};			if (list){				GtkToolbarChild *chld=(GtkToolbarChild*)list->data;				if (GTK_IS_BUTTON(chld->widget))					g_signal_emit_by_name(G_OBJECT(chld->widget),"clicked",num);			};		};

⌨️ 快捷键说明

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