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

📄 buttons.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 <gtk/gtk.h>#include "list.h"#include "saveload.h"#include "addd.h"#include "prefs.h"#include "buttons.h"#include "about.h"#include "misc.h"#include "colors.h"#include "dndtrash.h"#include "lod.h"#include "../var.h"#include "../savelog.h"#include "../ntlocale.h"#include "../config.h"#include "../xml.h"#include <gdk-pixbuf/gdk-pixbuf.h>enum BUTTONS_BITS{	BBIT_ADD = 1,	BBIT_ADD_CLIPBOARD = 1<<1,	BBIT_DEL = 1<<2,	BBIT_STOP = 1<<3,	BBIT_CONTINUE = 1<<4,	BBIT_DEL_COMPLETED = 1<<5,	BBIT_UP = 1<<6,	BBIT_DOWN = 1<<7,	BBIT_LOG = 1<<8,	BBIT_SPEED1 = 1<<9,	BBIT_SPEED2 = 1<<10,	BBIT_SPEED3 = 1<<11,	BBIT_OPTIONS = 1<<12,	BBIT_DEL_ALL = 1<<13,	BBIT_SAVE = 1<<14,	BBIT_LOAD = 1<<15,	BBIT_DND_TRASH = 1<<16};char *BUTTONS_TEXT[]={	N_(" Add new download "),	N_(" Paste from clipboard "),	N_(" Del downloads "),	N_(" Stop downloads "),	N_(" Continue/restart downloads "),	N_(" Del Completed downloads "),	N_(" Move up "),	N_(" Move down "),	N_(" View log "),	N_(" Speed level one "),	N_(" Speed level two "),	N_(" Unlimited speed "),	N_(" Options "),	N_(" Delete all downloads "),	N_(" Save list "),	N_(" Load list "),	N_(" DnD basket "),	N_(" Switch percentage mode to"),	N_(" Configure buttons ")};GtkWidget *ButtonsBar;GtkWidget *buttons_array[BUTTON_LAST];GtkWidget *pixmaps_array[BUTTON_LAST];GdkPixmap *progress_pixmap[3]={NULL,NULL,NULL};GdkBitmap *progress_bitmap[3]={NULL,NULL,NULL};GtkWidget *BConfigWindow=(GtkWidget *)NULL;GtkWidget *BConfigButtons[BUTTON_LAST];tConfirmedDialog *AskDeleteAll=(tConfirmedDialog *)NULL;void buttons_pixmaps_init(){	};void buttons_configure_close(){	if (BConfigWindow)		gtk_widget_destroy(BConfigWindow);	BConfigWindow=(GtkWidget *)NULL;};void buttons_flags_init(){	int none_visible=1;	for (int i=0;i<BUTTON_CONFIGURE;i++){		if (CFG.BUTTONS_FLAGS & (1<<i)){			none_visible=0;			gtk_widget_show(buttons_array[i]);		}else			gtk_widget_hide(buttons_array[i]);	};	if (none_visible){		gtk_widget_hide(ButtonsBar);	}else{		gtk_widget_show(ButtonsBar);	};};void buttons_configure_apply(){	int old_flags=CFG.BUTTONS_FLAGS;	CFG.BUTTONS_FLAGS=0x0FFFFFF;	for (int i=0;i<BUTTON_CONFIGURE;i++){		if (!(GTK_TOGGLE_BUTTON(BConfigButtons[i])->active)){			CFG.BUTTONS_FLAGS^=(1<<i);		};	};	buttons_flags_init();	if (old_flags!=CFG.BUTTONS_FLAGS)		save_config();};void buttons_configure_ok(){	buttons_configure_apply();	buttons_configure_close();};void buttons_configure(){	/* configure ALL buttons here */	if (BConfigWindow) {		gdk_window_show(BConfigWindow->window);		return;	};	GtkWidget *vbox=gtk_vbox_new(FALSE,0);	for (int i=BUTTON_ADD;i<BUTTON_CONFIGURE;i++){		BConfigButtons[i]=gtk_check_button_new_with_label(_(BUTTONS_TEXT[i]));		gtk_box_pack_start(GTK_BOX(vbox),				   BConfigButtons[i],				   FALSE,FALSE,0);		GTK_TOGGLE_BUTTON(BConfigButtons[i])->active= (CFG.BUTTONS_FLAGS & (1<<i)?TRUE:FALSE);				};	BConfigWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);	gtk_window_set_wmclass(GTK_WINDOW(BConfigWindow),			       "D4X_Buttons","D4X");	gtk_window_set_title(GTK_WINDOW (BConfigWindow),			     _(BUTTONS_TEXT[BUTTON_CONFIGURE]));	gtk_window_set_position(GTK_WINDOW(BConfigWindow),				GTK_WIN_POS_CENTER);	gtk_window_set_resizable(GTK_WINDOW(BConfigWindow), FALSE);	gtk_widget_set_size_request(BConfigWindow,-1,400);	gtk_container_set_border_width(GTK_CONTAINER(BConfigWindow),5);	GtkWidget *scroll_window=gtk_scrolled_window_new((GtkAdjustment *)NULL,							 (GtkAdjustment *)NULL);	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window),	                                GTK_POLICY_AUTOMATIC,					GTK_POLICY_AUTOMATIC);	GtkWidget *viewport=gtk_viewport_new((GtkAdjustment *)NULL,					     (GtkAdjustment *)NULL);	gtk_container_add(GTK_CONTAINER(viewport),vbox);	gtk_container_add(GTK_CONTAINER(scroll_window),viewport);	vbox=gtk_vbox_new(FALSE,0);	gtk_box_pack_start(GTK_BOX(vbox),scroll_window,TRUE,TRUE,0);	GtkWidget *hbox=gtk_hbutton_box_new();	gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);	GtkWidget *ok_button=gtk_button_new_with_label(_("Ok"));	GtkWidget *apply_button=gtk_button_new_with_label(_("Apply"));	GtkWidget *cancel_button=gtk_button_new_with_label(_("Cancel"));	GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT);	GTK_WIDGET_SET_FLAGS(apply_button,GTK_CAN_DEFAULT);	GTK_WIDGET_SET_FLAGS(cancel_button,GTK_CAN_DEFAULT);	gtk_box_pack_end(GTK_BOX(hbox),ok_button,FALSE,FALSE,0);	gtk_box_pack_end(GTK_BOX(hbox),apply_button,FALSE,FALSE,0);	gtk_box_pack_end(GTK_BOX(hbox),cancel_button,FALSE,FALSE,0);	g_signal_connect(G_OBJECT(cancel_button),			   "clicked",			   G_CALLBACK(buttons_configure_close), NULL);	g_signal_connect(G_OBJECT(ok_button),			   "clicked",			   G_CALLBACK(buttons_configure_ok), NULL);	g_signal_connect(G_OBJECT(apply_button),			   "clicked",			   G_CALLBACK(buttons_configure_apply), NULL);	gtk_container_add(GTK_CONTAINER(BConfigWindow),vbox);	gtk_window_set_default(GTK_WINDOW(BConfigWindow),cancel_button);	g_signal_connect(G_OBJECT(BConfigWindow),			   "delete_event",			   G_CALLBACK(buttons_configure_close), NULL);	d4x_eschandler_init(BConfigWindow,NULL);	gtk_widget_show_all(BConfigWindow);};static int bb_new_pixmap_from_theme(char *themename,GdkPixmap **pixmap,GdkBitmap **mask){	d4xXmlObject *xmlobj=d4x_xml_find_obj(D4X_THEME_DATA,"buttonsbar");	if (xmlobj) xmlobj=xmlobj->find_obj(themename);	char *file=NULL;	d4xXmlField *fld=xmlobj?xmlobj->get_attr("file"):NULL;	if (fld)		file=sum_strings(CFG.THEMES_DIR,"/",fld->value.get(),NULL);	GdkPixbuf *pixbuf;	GError *error=NULL;	if (file && (pixbuf=gdk_pixbuf_new_from_file(file,&error))){		gdk_pixbuf_render_pixmap_and_mask(pixbuf,pixmap,mask,1);		gdk_pixbuf_unref(pixbuf);		delete[] file;		return(0);	};	if (error) g_error_free(error);	if (file) delete[] file;	return(-1);};GtkWidget *new_pixmap(char **xpm, char *themename) {	GdkBitmap *mask;	GdkPixmap *pixmap;	if (themename==NULL || bb_new_pixmap_from_theme(themename,&pixmap,&mask))		pixmap=make_pixmap_from_xpm(&mask,xpm);	GtkWidget *rval=gtk_image_new_from_pixmap(pixmap,mask);	gdk_pixmap_unref(pixmap);	gdk_bitmap_unref(mask);	return (rval);};void del_all_downloads(){	aa.del_all();	if (AskDeleteAll)		AskDeleteAll->done();};static void _ask_delete_all_check_(GtkWidget *widget, tConfirmedDialog *parent){	CFG.CONFIRM_DELETE_ALL=!(GTK_TOGGLE_BUTTON(parent->check)->active);	del_all_downloads();};void ask_delete_all(...) {	if (!AskDeleteAll) AskDeleteAll=new tConfirmedDialog;	if (CFG.CONFIRM_DELETE_ALL){		if (AskDeleteAll->init(_("Delete ALL downloads?"),_("Delete all?")))			g_signal_connect(G_OBJECT(AskDeleteAll->ok_button),					   "clicked",					   G_CALLBACK(_ask_delete_all_check_),					   AskDeleteAll);	}else		del_all_downloads();};void buttons_speed_set_text(){	char text[MAX_LEN];	sprintf(text,"%s (%i B/s)",_(" Speed level one "),CFG.SPEED_LIMIT_1);	gtk_tooltips_set_tip(GTK_TOOLBAR(ButtonsBar)->tooltips,			     buttons_array[BUTTON_SPEED1],			     text,(char*) NULL);	sprintf(text,"%s (%i B/s)",_(" Speed level two "),CFG.SPEED_LIMIT_2);	gtk_tooltips_set_tip(GTK_TOOLBAR(ButtonsBar)->tooltips,			     buttons_array[BUTTON_SPEED2],			     text,(char *)NULL);};void set_speed_buttons() {	if (CFG.WITHOUT_FACE) return;	switch (CFG.SPEED_LIMIT) {		case 1:	{				g_signal_emit_by_name(G_OBJECT (buttons_array[BUTTON_SPEED1]), "clicked");				break;			};		case 2:	{				g_signal_emit_by_name(G_OBJECT (buttons_array[BUTTON_SPEED2]), "clicked");				break;			};		case 3:		default:{				g_signal_emit_by_name(G_OBJECT (buttons_array[BUTTON_SPEED3]), "clicked");				break;			};	};	main_menu_speed_prepare();	dnd_trash_menu_prepare();};static void set_speed_limit() {	if (GTK_TOGGLE_BUTTON(buttons_array[BUTTON_SPEED1])->active)		CFG.SPEED_LIMIT=1;	else {		if (GTK_TOGGLE_BUTTON(buttons_array[BUTTON_SPEED2])->active)			CFG.SPEED_LIMIT=2;		else			CFG.SPEED_LIMIT=3;	};	main_menu_speed_prepare();	dnd_trash_menu_prepare();};static void dnd_trash_toggle(){	if (GTK_TOGGLE_BUTTON(buttons_array[BUTTON_DND_TRASH])->active)		dnd_trash_init();	else		dnd_trash_destroy();};void set_dndtrash_button(){	if (CFG.DND_TRASH ) {		if (!(GTK_TOGGLE_BUTTON(buttons_array[BUTTON_DND_TRASH])->active)){			GTK_TOGGLE_BUTTON(buttons_array[BUTTON_DND_TRASH])->active=FALSE;			g_signal_emit_by_name(G_OBJECT (buttons_array[BUTTON_DND_TRASH]), "clicked");		};	}else{		if (GTK_TOGGLE_BUTTON(buttons_array[BUTTON_DND_TRASH])->active){			GTK_TOGGLE_BUTTON(buttons_array[BUTTON_DND_TRASH])->active=TRUE;			g_signal_emit_by_name(G_OBJECT (buttons_array[BUTTON_DND_TRASH]), "clicked");		};	};};gint buttons_save_press(GtkWidget *widget,GdkEventButton *event, gint code){	if (event->button==3){		g_signal_emit_by_name(G_OBJECT(widget),"pressed",NULL);		return TRUE;	};	return FALSE;};

⌨️ 快捷键说明

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