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

📄 mywidget.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 3 页
字号:
/*	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 "mywidget.h"#include "edit.h"#include "misc.h"#include "../ntlocale.h"#include "../filter.h"static GtkWidgetClass *parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *color_parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *rule_parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *filter_parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *filtersel_parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *linkssel_parent_class = (GtkWidgetClass *)NULL;static GtkWidgetClass *stringedit_parent_class = (GtkWidgetClass *)NULL;static void my_gtk_filesel_destroy_browser(MyGtkFilesel *filesel){	if (filesel->browser){		gtk_widget_destroy(filesel->browser);		filesel->browser=(GtkWidget *)NULL;	};};static gint my_gtk_filesel_ok(GtkButton *button,MyGtkFilesel *filesel){	g_return_val_if_fail(filesel!=NULL,FALSE);	if (filesel->browser){		text_to_combo(filesel->combo,			      gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel->browser)));		my_gtk_filesel_destroy_browser(filesel);	};	return TRUE;};static gint my_gtk_filesel_cancel(GtkButton *button,MyGtkFilesel *filesel){	g_return_val_if_fail(filesel!=NULL,FALSE);	my_gtk_filesel_destroy_browser(filesel);	return TRUE;};static gint my_gtk_filesel_delete(GtkWidget *window,GdkEvent *event, MyGtkFilesel *filesel) {	my_gtk_filesel_cancel((GtkButton *)NULL,filesel);	return TRUE;};static gint my_gtk_filesel_init_browser(GtkButton *button, MyGtkFilesel *filesel){	g_return_val_if_fail(filesel!=NULL,FALSE);	if (filesel->browser){		gdk_window_show(filesel->browser->window);	}else{		if (filesel->only_dirs){			filesel->browser=gtk_file_selection_new((gchar*)_("Select directory"));			gtk_widget_set_sensitive(GTK_FILE_SELECTION(filesel->browser)->file_list,FALSE);		}else			filesel->browser=gtk_file_selection_new((gchar*)_("Select file"));		gtk_window_set_wmclass(GTK_WINDOW(filesel->browser),				       "D4X_FileSel","D4X");		char *tmp=text_from_combo(filesel->combo);		if (tmp && *tmp)			gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel->browser),tmp);		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel->browser)->ok_button),				   "clicked",G_CALLBACK(my_gtk_filesel_ok),filesel);		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel->browser)->cancel_button),				   "clicked",G_CALLBACK(my_gtk_filesel_cancel),filesel);		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel->browser)),				   "delete_event",G_CALLBACK(my_gtk_filesel_delete),filesel);		gtk_widget_show(filesel->browser);		d4x_eschandler_init(filesel->browser,filesel);		if (filesel->modal){			gtk_window_set_modal (GTK_WINDOW(filesel->browser),TRUE);			gtk_window_set_transient_for (GTK_WINDOW (filesel->browser), filesel->modal);		};			};	return TRUE;};static void my_gtk_filsel_destroy(GtkObject *widget){	g_return_if_fail(widget!=NULL);	MyGtkFilesel *filesel=(MyGtkFilesel *)widget;	my_gtk_filesel_destroy_browser(filesel);		if (GTK_OBJECT_CLASS (parent_class)->destroy)		(* GTK_OBJECT_CLASS (parent_class)->destroy) (widget);};static void my_gtk_filesel_class_init(MyGtkFileselClass *klass){	GtkObjectClass *object_class=(GtkObjectClass *)klass;		object_class->destroy=my_gtk_filsel_destroy;	parent_class=(GtkWidgetClass *)gtk_type_class(gtk_box_get_type());};static void my_gtk_filesel_init(MyGtkFilesel *filesel){	filesel->browser=(GtkWidget *)NULL;	filesel->combo=gtk_combo_new();	filesel->only_dirs=0;	filesel->modal=(GtkWindow *)NULL;	GtkWidget *button=gtk_button_new_with_label(_("Browse"));	g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(my_gtk_filesel_init_browser),filesel);	gtk_combo_set_case_sensitive(GTK_COMBO(filesel->combo),TRUE);	gtk_box_set_spacing(GTK_BOX(filesel),5);	gtk_box_pack_start(GTK_BOX(filesel),filesel->combo,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(filesel),button,FALSE,FALSE,0);};guint my_gtk_filesel_get_type(){	static guint my_filesel_type=0;	if (!my_filesel_type){		GTypeInfo my_filesel_info={			sizeof(MyGtkFileselClass),			NULL,NULL,			(GClassInitFunc)my_gtk_filesel_class_init,			NULL,NULL,			sizeof(MyGtkFilesel),			0,			(GInstanceInitFunc)my_gtk_filesel_init		};		my_filesel_type = g_type_register_static (GTK_TYPE_HBOX,"MyGtkFilesel",&my_filesel_info,(GTypeFlags)0);	};	return my_filesel_type;};GtkWidget *my_gtk_filesel_new(tHistory *history){	MyGtkFilesel *filesel=(MyGtkFilesel *)g_object_new(my_gtk_filesel_get_type(),NULL);	GList *list=make_glist_from_mylist(history);	if (list){		gtk_combo_set_popdown_strings (GTK_COMBO (filesel->combo), list);		g_list_free(list);	};	return GTK_WIDGET(filesel);};/* ------------------ Color selection widget --------------------*/static void my_gtk_colorsel_destroy_browser(MyGtkColorsel *colsel){	if (colsel->browser){		gtk_widget_destroy(colsel->browser);		colsel->browser=(GtkWidget *)NULL;	};};static void my_gtk_colorsel_expose(GtkWidget *widget,GdkEventExpose *event,MyGtkColorsel *colsel){	gint w=widget->allocation.width,h=widget->allocation.height;	guchar *buf=g_new(guchar,3*w*h);	gint i=0;	for (int y=0;y<h;y++){		for (int x=0;x<w;x++){			buf[i]=0;			buf[i++]=colsel->color.red/0xff;			buf[i++]=colsel->color.green/0xff;			buf[i++]=colsel->color.blue/0xff;		};	};	gdk_draw_rgb_image(widget->window,widget->style->black_gc,			   0,0,w,h,			   GDK_RGB_DITHER_NORMAL,			   buf,3*w);	g_free(buf);};static gint my_gtk_colorsel_ok(GtkButton *button,MyGtkColorsel *colsel){	g_return_val_if_fail(colsel!=NULL,FALSE);	if (colsel->browser){		gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colsel->browser)->colorsel),						      &(colsel->color));		gtk_widget_queue_draw (colsel->preview); 		my_gtk_colorsel_destroy_browser(colsel);	};	return TRUE;};static gint my_gtk_colorsel_cancel(GtkButton *button,MyGtkColorsel *colsel){	g_return_val_if_fail(colsel!=NULL,FALSE);	my_gtk_colorsel_destroy_browser(colsel);	return TRUE;};static gint my_gtk_colorsel_delete(GtkWidget *window,GdkEvent *event,  MyGtkColorsel *colsel) {	my_gtk_colorsel_cancel((GtkButton *)NULL,colsel);	return TRUE;};static gint my_gtk_colorsel_init_browser(GtkButton *button, MyGtkColorsel *colsel){	g_return_val_if_fail(colsel!=NULL,FALSE);	if (colsel->browser){		gdk_window_show(colsel->browser->window);	}else{		colsel->browser=gtk_color_selection_dialog_new(_("Select color"));		gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colsel->browser)->colorsel),						      &(colsel->color));		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(colsel->browser)->ok_button),				   "clicked",G_CALLBACK(my_gtk_colorsel_ok),colsel);		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(colsel->browser)->cancel_button),				   "clicked",G_CALLBACK(my_gtk_colorsel_cancel),colsel);		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(colsel->browser)),				   "delete_event",G_CALLBACK(my_gtk_colorsel_delete),colsel);		d4x_eschandler_init(GTK_WIDGET(GTK_COLOR_SELECTION_DIALOG(colsel->browser)),colsel);		gtk_widget_destroy(GTK_COLOR_SELECTION_DIALOG(colsel->browser)->help_button);		gtk_widget_show(colsel->browser);		if (colsel->modal){			gtk_window_set_modal (GTK_WINDOW(colsel->browser),TRUE);			gtk_window_set_transient_for (GTK_WINDOW (colsel->browser), colsel->modal);		};			};	return TRUE;};static void my_gtk_colorsel_destroy(GtkObject *widget){	g_return_if_fail(widget!=NULL);	MyGtkColorsel *colsel=(MyGtkColorsel *)widget;	my_gtk_colorsel_destroy_browser(colsel);		if (GTK_OBJECT_CLASS (color_parent_class)->destroy)		(* GTK_OBJECT_CLASS (color_parent_class)->destroy) (widget);};static void my_gtk_colorsel_class_init(MyGtkColorselClass *klass){	GtkObjectClass *object_class=(GtkObjectClass *)klass;		object_class->destroy=my_gtk_colorsel_destroy;	color_parent_class=(GtkWidgetClass *)gtk_type_class(gtk_box_get_type());};static void my_gtk_colorsel_init(MyGtkColorsel *colsel){	colsel->browser=(GtkWidget *)NULL;	colsel->modal=(GtkWindow *)NULL;	colsel->preview=gtk_drawing_area_new();	g_signal_connect(G_OBJECT(colsel->preview),"expose_event",G_CALLBACK(my_gtk_colorsel_expose),colsel);	GtkWidget *button=gtk_button_new_with_label(_("Select"));	g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(my_gtk_colorsel_init_browser),colsel);	gtk_box_set_spacing(GTK_BOX(colsel),5);	gtk_widget_set_size_request(colsel->preview,50,50);	gtk_box_pack_start(GTK_BOX(colsel),colsel->preview,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(colsel),button,FALSE,FALSE,0);};guint my_gtk_colorsel_get_type(){	static guint my_filesel_type=0;	if (!my_filesel_type){		GTypeInfo my_filesel_info={			sizeof(MyGtkColorselClass),			NULL,NULL,			(GClassInitFunc) my_gtk_colorsel_class_init,			NULL,NULL,			sizeof(MyGtkColorsel),			0,			(GInstanceInitFunc)my_gtk_colorsel_init		};		my_filesel_type = g_type_register_static (GTK_TYPE_HBOX,"MyGtkColorsel",&my_filesel_info,(GTypeFlags)0);	};	return my_filesel_type;};gint my_gtk_colorsel_get_color(MyGtkColorsel *colsel){	gint color=0;	color=((gint(colsel->color.blue/0xff))&0xff)+	      (((gint(colsel->color.green/0xff))&0xff)<<8)+	      (((gint(colsel->color.red/0xff))&0xff)<<16);	return color;};void my_gtk_colorsel_set_color(MyGtkColorsel *colsel, gint color){	g_return_if_fail(colsel!=NULL);	colsel->color.blue=(color&0xff)*0xff;	colsel->color.green=((color>>8)&0xff)*0xff;	colsel->color.red=((color>>16)&0xff)*0xff;	if (GTK_WIDGET_VISIBLE(colsel))		gtk_widget_queue_draw (colsel->preview); };GtkWidget *my_gtk_colorsel_new(gint color,gchar *title){	MyGtkColorsel *colsel=(MyGtkColorsel *)g_object_new(my_gtk_colorsel_get_type(),NULL);	if (title){		GtkWidget *label=gtk_label_new(title);		gtk_box_pack_start(GTK_BOX(colsel),label,FALSE,FALSE,0);	};	my_gtk_colorsel_set_color(colsel,color);	return GTK_WIDGET(colsel);};/***********************************************************************/static void d4x_rule_edit_destroy(GtkObject *widget){	g_return_if_fail(widget!=NULL);	if (GTK_OBJECT_CLASS (rule_parent_class)->destroy)		(* GTK_OBJECT_CLASS (rule_parent_class)->destroy) (widget);};static void d4x_rule_edit_class_init(d4xRuleEditClass *klass){	GtkObjectClass *object_class=(GtkObjectClass *)klass;		object_class->destroy=d4x_rule_edit_destroy;	rule_parent_class=(GtkWidgetClass *)gtk_type_class(gtk_window_get_type());};void d4x_rule_edit_apply(d4xRuleEdit *edit){	if (edit && edit->rule){		if (*(text_from_combo(edit->host))){			edit->rule->host.set(text_from_combo(edit->host));		}else			edit->rule->host.set((char*)NULL);		if (*(text_from_combo(edit->path))){			edit->rule->path.set(text_from_combo(edit->path));		}else			edit->rule->path.set((char*)NULL);		if (*(text_from_combo(edit->file))){			edit->rule->file.set(text_from_combo(edit->file));		}else			edit->rule->file.set((char*)NULL);		if (*(text_from_combo(edit->params))){			edit->rule->params.set(text_from_combo(edit->params));		}else			edit->rule->params.set((char*)NULL);		if (*(text_from_combo(edit->tag))){			edit->rule->tag.set(text_from_combo(edit->tag));		}else			edit->rule->tag.set((char*)NULL);		edit->rule->proto=get_proto_by_name(text_from_combo(edit->proto));		edit->rule->include=GTK_TOGGLE_BUTTON(edit->include)->active;	};};static void d4x_rule_edit_ok(GtkWidget *widget,d4xRuleEdit *edit) {	g_return_if_fail(edit!=NULL);	d4x_rule_edit_apply(edit);	gtk_widget_destroy(GTK_WIDGET(edit));};static void d4x_rule_edit_cancel(GtkWidget *widget,d4xRuleEdit *edit) {	gtk_widget_destroy(GTK_WIDGET(edit));};static void d4x_rule_edit_init(d4xRuleEdit *edit){	gtk_window_set_title(GTK_WINDOW (edit),_("Edit properties of Rule"));	gtk_window_set_resizable(GTK_WINDOW(edit), FALSE);	GtkWidget *label=gtk_label_new(_("protocol"));	GtkWidget *hbox=gtk_hbox_new(FALSE,0);	edit->vbox=gtk_vbox_new(FALSE,0);		edit->proto=gtk_combo_new();	GList *list=(GList*)NULL;	list = g_list_append (list, get_name_by_proto(D_PROTO_FTP));	list = g_list_append (list, get_name_by_proto(D_PROTO_HTTP));	list = g_list_append (list, (void*)"");	gtk_combo_set_popdown_strings (GTK_COMBO (edit->proto), list);	g_list_free(list);	gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(edit->proto)->entry),FALSE);	text_to_combo(edit->proto,"");	gtk_box_pack_start(GTK_BOX(hbox),edit->proto,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(edit->vbox),hbox,FALSE,FALSE,0);	hbox=gtk_hbox_new(FALSE,0);	label=gtk_label_new(_("host"));	edit->host=gtk_entry_new();	gtk_box_pack_start(GTK_BOX(hbox),edit->host,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(edit->vbox),hbox,FALSE,FALSE,0);	hbox=gtk_hbox_new(FALSE,0);	label=gtk_label_new(_("path"));	edit->path=gtk_entry_new();	gtk_box_pack_start(GTK_BOX(hbox),edit->path,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(edit->vbox),hbox,FALSE,FALSE,0);	hbox=gtk_hbox_new(FALSE,0);	label=gtk_label_new(_("file"));	edit->file=gtk_entry_new();	gtk_box_pack_start(GTK_BOX(hbox),edit->file,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(edit->vbox),hbox,FALSE,FALSE,0);	hbox=gtk_hbox_new(FALSE,0);	label=gtk_label_new(_("?"));	edit->params=gtk_entry_new();	gtk_box_pack_start(GTK_BOX(hbox),edit->params,TRUE,TRUE,0);	gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(edit->vbox),hbox,FALSE,FALSE,0);	hbox=gtk_hbox_new(FALSE,0);	label=gtk_label_new(_("tag"));	edit->tag=gtk_combo_new();	list=(GList*)NULL;	char *tags[]={"",		      "a",		      "applet",		      "area",		      "bgsound",		      "blockqute",		      "body",		      "col",		      "del",		      "div",		      "embed",		      "fig",		      "frame",

⌨️ 快捷键说明

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