📄 buttons.cc
字号:
/* 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 + -