📄 callbacks.c
字号:
/* callbacks.c (for interface) * * Copyright (C) 2004-2004 Wang Xiaoguang (Chice) <chice_wxg@hotmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * * Authors: Wang Xiaoguang (Chice) <chice_wxg@hotmail.com> */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gtk/gtk.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "pkginstaller.h"#include "../dld_task.h"#include "../dld_taskdir.h"#include "../dld_taskmgr.h"#include "../dld_proxy.h"#include "../dld_proxymgr.h"#include "../dld_config.h"#include "../dld_ui_callback.h"#include "../dld_language.h"#include "dld_ui.h"#include "tray.h"typedef INT (* DLD_GTKUI_SELECTED_TASK_CALLBACK)(DldTask *task);static VOID exit_dld(){ tray_destroy(); dld_set_ui_callback(NULL); gtk_main_quit();}VOID on_selected_task_foreach(DLD_GTKUI_SELECTED_TASK_CALLBACK callback){ GtkTreeIter iter; GtkTreeModel *model; gint count; GtkTreeSelection *sel; LIST *seltasklist = NULL; gpointer p; sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_tasks)); count = gtk_tree_selection_count_selected_rows(sel); dprintf("[on_selected_task_foreach] count = %d\n", count); if (count > 0) { GList *list, *l; list = gtk_tree_selection_get_selected_rows (sel, &model); for(l = list; l != NULL; l = g_list_next(l)) { gtk_tree_model_get_iter (model, &iter, l->data); gtk_tree_model_get (model, &iter, TREEVIEW_TASKS_COL_TASK, &p, -1); dprintf("[on_selected_task_foreach] taskstr = %d\n", p); if (p) seltasklist = list_append(seltasklist, p); } g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL); g_list_free (list); } while(seltasklist) { callback((DldTask *)seltasklist->data); seltasklist = list_remove_nth(seltasklist, 0); }} /*===========================DLD Main Window Callbacks===========================*/ gbooleanon_canvas_graph_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data){ dld_gtkui_draw_blocks(g_ui_curtask); return FALSE;}gbooleanon_window_main_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data){ gtk_widget_hide(window_main); return TRUE;}void on_window_main_state_event (GtkWidget *widget,gpointer event,gpointer user_data){ //dprintf("[on_window_main_resize_event]\n"); if(gdk_window_get_state (window_main->window) & (GDK_WINDOW_STATE_WITHDRAWN | GDK_WINDOW_STATE_ICONIFIED)) { gtk_widget_hide(window_main); }}voidon_menu_download_new_task_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; dlg = create_dialog_taskprop(NULL); gtk_widget_show(dlg);}voidon_menu_download_modify_task_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; if( !g_ui_curtask ) return; if( (g_ui_curtask->status != DLD_TASK_STOPPED && g_ui_curtask->status != DLD_TASK_ERROR) || (g_ui_curtask->finishedsize >= g_ui_curtask->filesize && g_ui_curtask->filesize!=0)) { quick_message(window_main, _("You can only modify a stopped task.")); return; } dlg = create_dialog_taskprop(g_ui_curtask); gtk_widget_show(dlg); //gtk_dialog_run(GTK_DIALOG(dlg)); gtk_window_set_modal(GTK_WINDOW(dlg), TRUE); }voidon_menu_download_start_task_activate (GtkMenuItem *menuitem, gpointer user_data){ on_selected_task_foreach(dld_task_start);}voidon_menu_download_stop_task_activate (GtkMenuItem *menuitem, gpointer user_data){ on_selected_task_foreach(dld_task_stop);}voidon_menu_download_remove_task_activate (GtkMenuItem *menuitem, gpointer user_data){ on_selected_task_foreach(dld_taskmgr_remove_task);}voidon_menu_download_delete_file_activate (GtkMenuItem *menuitem, gpointer user_data){ if(quick_question(window_main, _("Are you sure to delete the file(s) of the selected task(s)?")) == GTK_RESPONSE_YES) { on_selected_task_foreach(dld_taskmgr_delete_file); }}voidon_menu_download_start_all_activate (GtkMenuItem *menuitem, gpointer user_data){ dld_taskmgr_start_all_tasks();}voidon_menu_download_stop_all_activate (GtkMenuItem *menuitem, gpointer user_data){ dld_taskmgr_stop_all_tasks();}voidon_menu_download_copy_url_activate (GtkMenuItem *menuitem, gpointer user_data){ gchar *url = NULL; if(g_ui_curtask != NULL) { //Copy URL GtkClipboard *cb; cb = gtk_clipboard_get(GDK_NONE); if(!g_utf8_validate(g_ui_curtask->url->str, strlen(g_ui_curtask->url->str), NULL)) { url = g_locale_to_utf8(g_ui_curtask->url->str,-1,NULL,NULL,NULL); gtk_clipboard_set_text(cb, url, strlen(url)); g_free(url); } else { gtk_clipboard_set_text(cb, g_ui_curtask->url->str, strlen(g_ui_curtask->url->str)); } }}voidon_menu_download_restart_task_activate (GtkMenuItem *menuitem, gpointer user_data){ if(GTK_RESPONSE_YES == quick_question(window_main, _("This action will re-download the file(s) of the selected task(s).\nAnd only non-running tasks can be restarted.\nDo you want to continue?"))) { on_selected_task_foreach(dld_task_restart); }}voidon_menu_category_new_dir_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; dlg = create_dialog_newdir(); gtk_widget_show(dlg);}voidon_menu_category_remove_dir_activate (GtkMenuItem *menuitem, gpointer user_data){ dld_taskdir_remove_dir(g_ui_curtaskdir); }voidon_menu_language_item_activate (GtkMenuItem *menuitem, gpointer user_data){ dld_language_set((char *)user_data); quick_message(window_main, _("You should restart DLD in order to apply the language."));}voidon_menu_options_system_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; dlg = create_dialog_options(); gtk_widget_show(dlg); gtk_window_set_modal(GTK_WINDOW(dlg), TRUE); }voidon_menu_options_proxy_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; dlg = create_dialog_proxy_settings(); gtk_widget_show(dlg); gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);}voidon_menu_options_shell_programs_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkWidget *dlg; dlg = create_dialog_shell_programs(); gtk_widget_show(dlg); gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);}voidon_menu_help_content_activate (GtkMenuItem *menuitem, gpointer user_data){ gchar cmd[1000]; snprintf(cmd, sizeof(cmd), g_shellprograms.browser->str, "http://vbf.yeah.net/"); quick_message(window_main, _("DLD will use web browser to open http://vbf.yeah.net/ for help.\nIf your web browser does not work correctly, \nplease open the URL manually.")); async_system(cmd, FALSE);}voidon_menu_help_report_bugs_activate (GtkMenuItem *menuitem, gpointer user_data){ quick_message(window_main, _("Please report bugs to chice_wxg@hotmail.com. Thank you!"));}voidon_menu_help_url_activate (GtkMenuItem *menuitem, gpointer user_data){// dprintf("[OPEN URL] %s\n", user_data); gchar cmd[1000]; snprintf(cmd, sizeof(cmd), g_shellprograms.browser->str, user_data); async_system(cmd, FALSE); }voidon_menu_help_about_activate (GtkMenuItem *menuitem, gpointer user_data){ quick_message(window_main, _("DLD Loves Downloading 0.2\nCopyright(c) Wang Xiaoguang(Chice) <chice_wxg@hotmail.com>"));}voidon_menu_popup_window_drop_show_activate (GtkMenuItem *menuitem, gpointer user_data){ if(!GTK_WIDGET_VISIBLE(window_main)) { gtk_widget_show(window_main); gtk_window_present (GTK_WINDOW (window_main)); } else { gtk_widget_hide(window_main); } }voidon_menu_task_popup_open_file_activate (GtkMenuItem *menuitem, gpointer user_data){ if(!g_ui_curtask) return; if(!g_ui_curtask->status == DLD_TASK_FINISHED) return; gchar cmd[1000]; snprintf(cmd, sizeof(cmd), g_shellprograms.filemanager->str, g_ui_curtask->localfile->str); async_system(cmd, FALSE);}voidon_menu_task_popup_open_dir_activate (GtkMenuItem *menuitem, gpointer user_data){ if(!g_ui_curtask) return; gchar cmd[1000]; STRING *localpath = os_extract_path(g_ui_curtask->localfile->str); snprintf(cmd, sizeof(cmd), g_shellprograms.filemanager->str, localpath->str); async_system(cmd, FALSE); localpath = string_free(localpath);}voidon_menu_task_popup_install_activate (GtkMenuItem *menuitem, gpointer user_data){ //TODO //Install the package !!!!!!!! if(!g_ui_curtask) return; gchar cmd[1000]; gchar consolecmd[1000]; /* strcpy(cmd, ""); if(os_file_has_ext(g_ui_curtask->localfile->str, ".rpm")) { snprintf(consolecmd, sizeof(consolecmd), "rpm -i %s", g_ui_curtask->localfile->str); snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd); async_system(cmd, FALSE); } if(os_file_has_ext(g_ui_curtask->localfile->str, ".deb")) { snprintf(consolecmd, sizeof(consolecmd), "dpkg -i %s", g_ui_curtask->localfile->str); snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd); async_system(cmd, FALSE); } */ if(os_file_has_ext(g_ui_curtask->localfile->str, ".gz") || os_file_has_ext(g_ui_curtask->localfile->str, ".bz2")) { strcpy(consolecmd, ""); if(generate_dldinst_script("/tmp/dldinst/dldinst") != DLD_ERR_OK) { quick_message(window_main, _("Can't generate DLD installer shell.")); } else { if(os_file_has_ext(g_ui_curtask->localfile->str, ".bz2")) { snprintf(consolecmd, sizeof(consolecmd), "/tmp/dldinst/dldinst \"%s\" bzip2", g_ui_curtask->localfile->str); } if(os_file_has_ext(g_ui_curtask->localfile->str, ".gz")) { snprintf(consolecmd, sizeof(consolecmd), "/tmp/dldinst/dldinst \"%s\" gzip", g_ui_curtask->localfile->str); } snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd); async_system(cmd, FALSE); } }}voidon_menu_popup_window_drop_exit_activate (GtkMenuItem *menuitem, gpointer user_data)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -