📄 interface.c
字号:
GtkWidget *menu_popup_task_remove_task = NULL;GtkWidget *menu_popup_task_open_file = NULL;GtkWidget *menu_popup_task_open_dir = NULL;GtkWidget *menu_popup_task_install = NULL;GtkWidget *menu_popup_task_delete_file = NULL;GtkWidget *menu_popup_window_drop_menu = NULL;GtkWidget *menu_popup_window_drop_show = NULL;GtkWidget *menu_popup_window_drop_new_task = NULL;GtkWidget *menu_popup_window_drop_exit = NULL;GtkWidget *toolbar_main = NULL;GtkWidget *canvas_graph = NULL;GtkWidget *textview_info = NULL;GtkWidget *statusbar_main = NULL;GtkWidget *treeview_tasks = NULL;GtkListStore *treeview_tasks_store = NULL;GtkWidget *treeview_infos = NULL;GtkListStore *treeview_infos_store = NULL;GtkWidget *treeview_dirs = NULL;GtkListStore *treeview_dirs_store = NULL;GtkWidget *treeview_proxys = NULL;GtkListStore *treeview_proxys_store = NULL;GtkWidget *window_drop = NULL;enum { TARGET_URL, TARGET_DND_TEXT};GtkTargetEntry download_drop_types[] = { { "x-url/http", 0, TARGET_URL}, { "x-url/ftp", 0, TARGET_URL}, { "_NETSCAPE_URL", 0, TARGET_URL}, { "x-url/*", 0, TARGET_URL}, { "text/uri-list", 0, TARGET_URL}, { "text/plain", 0, TARGET_DND_TEXT }, { "text/html", 0, TARGET_DND_TEXT }};gint n_download_drop_types = sizeof(download_drop_types) / sizeof(download_drop_types[0]);VOID set_widget_dropable(GtkWidget *widget){ gtk_drag_dest_set(GTK_WIDGET(widget), (GtkDestDefaults)(GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP), download_drop_types, n_download_drop_types, (GdkDragAction)(GDK_ACTION_COPY|GDK_ACTION_MOVE)); gtk_signal_connect (GTK_OBJECT (widget) ,"drag_data_received", GTK_SIGNAL_FUNC (on_url_drag_data_received), NULL);}GtkWidget *create_treeview_dirs(){ GtkWidget *treeview_dirs; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *sel; treeview_dirs = gtk_tree_view_new(); // Add directory tree model treeview_dirs_store = gtk_list_store_new (TREEVIEW_DIRS_COL_N, G_TYPE_POINTER, //TREEVIEW_INFOS_COL_TASKDIR G_TYPE_STRING, //TREEVIEW_INFOS_COL_TITLE G_TYPE_STRING //TREEVIEW_INFOS_COL_PATH ); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_dirs), GTK_TREE_MODEL(treeview_dirs_store)); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Index", renderer, "text", TREEVIEW_DIRS_COL_TASKDIR, NULL); gtk_tree_view_column_set_visible(column, FALSE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column); column = gtk_tree_view_column_new_with_attributes (_("Category"), renderer, "text", TREEVIEW_DIRS_COL_TITLE, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column); column = gtk_tree_view_column_new_with_attributes (_("Save to ..."), renderer, "text", TREEVIEW_DIRS_COL_PATH, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column); sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_dirs)); gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_dirs_selection_changed), treeview_dirs_store); GtkTreeIter iter; gtk_list_store_append (GTK_LIST_STORE (treeview_dirs_store), &iter); gtk_list_store_set (GTK_LIST_STORE (treeview_dirs_store), &iter, TREEVIEW_DIRS_COL_TASKDIR, NULL, TREEVIEW_DIRS_COL_TITLE, _("All Tasks"), TREEVIEW_DIRS_COL_PATH, "", -1); set_widget_dropable(treeview_dirs); return treeview_dirs;}GtkWidget *create_treeview_infos(){ GtkWidget *treeview_infos; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *sel; //treeview_infos = NULL; treeview_infos = gtk_tree_view_new(); // Add directory tree model treeview_infos_store = gtk_list_store_new (TREEVIEW_INFOS_COL_N, G_TYPE_POINTER, //TREEVIEW_INFOS_COL_TASKTHREAD G_TYPE_STRING //TREEVIEW_INFOS_COL_TITLE ); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_infos), GTK_TREE_MODEL(treeview_infos_store)); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Thread", renderer, "text", TREEVIEW_INFOS_COL_TASKTHREAD, NULL); gtk_tree_view_column_set_visible(column, FALSE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_infos), column); column = gtk_tree_view_column_new_with_attributes (_("Logs"), renderer, "text", TREEVIEW_INFOS_COL_TITLE, NULL); //gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_infos), column); sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_infos)); gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_infos_selection_changed), treeview_infos_store); return treeview_infos;}GtkWidget *create_treeview_tasks(){ GtkWidget *treeview_tasks; GtkCellRenderer *renderer; GtkCellRenderer *imagerenderer; GtkTreeViewColumn *column; GtkTreeSelection *sel; // GtkWidget *image; //if(!window_main) return; treeview_tasks = gtk_tree_view_new(); /* Load Images ... */ pixbuf_start = gdk_pixbuf_new_from_xpm_data((const char **)xpm_start); pixbuf_stop = gdk_pixbuf_new_from_xpm_data((const char **)xpm_stop); pixbuf_error = gdk_pixbuf_new_from_xpm_data((const char **)xpm_error); pixbuf_finished = gdk_pixbuf_new_from_xpm_data((const char **)xpm_finished); pixbuf_queue = gdk_pixbuf_new_from_xpm_data((const char **)xpm_queue); /* Add directory tree model */ treeview_tasks_store = gtk_list_store_new (TREEVIEW_TASKS_COL_N, G_TYPE_POINTER, //TREEVIEW_TASKS_COL_TASK GDK_TYPE_PIXBUF, //TREEVIEW_TASKS_COL_STATUS, G_TYPE_STRING, //TREEVIEW_TASKS_COL_FILENAME, G_TYPE_STRING, //TREEVIEW_TASKS_COL_SIZE, G_TYPE_STRING, //TREEVIEW_TASKS_COL_RATE, G_TYPE_STRING, //TREEVIEW_TASKS_COL_SPEED, G_TYPE_STRING, //TREEVIEW_TASKS_COL_TIME, G_TYPE_STRING, //TREEVIEW_TASKS_COL_REMING, G_TYPE_STRING, //TREEVIEW_TASKS_COL_THREADNUMBER, G_TYPE_STRING, //TREEVIEW_TASKS_COL_URL, G_TYPE_STRING //TREEVIEW_TASKS_COL_COMMENT ); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_tasks), GTK_TREE_MODEL(treeview_tasks_store)); /* Add directory tree view columns */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Task", renderer, "text", TREEVIEW_TASKS_COL_TASK, NULL); gtk_tree_view_column_set_visible(column, FALSE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); imagerenderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new_with_attributes (_(" S "), imagerenderer, "pixbuf", TREEVIEW_TASKS_COL_STATUS, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("File"), renderer, "text", TREEVIEW_TASKS_COL_FILENAME, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Rate"), renderer, "text", TREEVIEW_TASKS_COL_RATE, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Speed"), renderer, "text", TREEVIEW_TASKS_COL_SPEED, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Size"), renderer, "text", TREEVIEW_TASKS_COL_SIZE, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Time"), renderer, "text", TREEVIEW_TASKS_COL_TIME, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_visible(column, FALSE); // we don't use Time now ... gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Remaining"), renderer, "text", TREEVIEW_TASKS_COL_REMAINING, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Threads"), renderer, "text", TREEVIEW_TASKS_COL_THREADNUMBER, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("URL"), renderer, "text", TREEVIEW_TASKS_COL_URL, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); column = gtk_tree_view_column_new_with_attributes (_("Comment"), renderer, "text", TREEVIEW_TASKS_COL_COMMENT, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column); sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_tasks)); //gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_tasks_selection_changed), treeview_tasks_store); gtk_widget_set_events(treeview_tasks, gtk_widget_get_events(treeview_tasks) | GDK_BUTTON_PRESS_MASK ); g_signal_connect(G_OBJECT (treeview_tasks), "button_press_event", G_CALLBACK (on_treeview_tasks_button_press), NULL); set_widget_dropable(treeview_tasks); return treeview_tasks; }GtkWidget*create_textview_info(){ GtkWidget *textview ; GtkTextBuffer *buffer; textview = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(textview)); gtk_text_buffer_create_tag(buffer, "info", "foreground", "black", "scale", PANGO_SCALE_LARGE, NULL); gtk_text_buffer_create_tag(buffer, "error", "foreground", "red", "scale", PANGO_SCALE_LARGE, NULL); gtk_text_buffer_create_tag(buffer, "send", "scale", PANGO_SCALE_LARGE, "foreground", "blue", NULL); gtk_text_buffer_create_tag(buffer, "recv", "scale", PANGO_SCALE_LARGE, "foreground", "green", NULL); gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE); return textview;}static GtkWidget *add_submenu_with_data(GtkWidget *parentmenu, gchar *name, gchar *title, gchar *stockicon, GtkSignalFunc cbfunc, gpointer data){ GtkWidget *menu, *image; if(name) { image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_MENU); gtk_widget_show(image); menu = gtk_image_menu_item_new_with_mnemonic (title); gtk_widget_set_name (menu, name); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu), image); gtk_widget_show (menu); gtk_container_add (GTK_CONTAINER (parentmenu), menu); g_signal_connect ((gpointer) menu, "activate", G_CALLBACK (cbfunc), data); } else { menu = gtk_separator_menu_item_new(); gtk_widget_show (menu); gtk_container_add (GTK_CONTAINER (parentmenu), menu); } return menu; }static GtkWidget *add_submenu(GtkWidget *parentmenu, gchar *name, gchar *title, gchar *stockicon, GtkSignalFunc cbfunc){ /* GtkWidget *menu, *image; if(name) { image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_MENU); gtk_widget_show(image); menu = gtk_image_menu_item_new_with_mnemonic (title); gtk_widget_set_name (menu, name); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu), image); gtk_widget_show (menu); gtk_container_add (GTK_CONTAINER (parentmenu), menu); g_signal_connect ((gpointer) menu, "activate", G_CALLBACK (cbfunc), NULL); } else { menu = gtk_separator_menu_item_new(); gtk_widget_show (menu); gtk_container_add (GTK_CONTAINER (parentmenu), menu); } return menu;*/ return add_submenu_with_data(parentmenu, name, title, stockicon, cbfunc, NULL);}static GtkWidget *add_toolbar_button(GtkToolbar *toolbar, gchar *name, gchar *title, gchar *tooltip, gchar *stockicon, GtkSignalFunc cbfunc){ GtkWidget *button, *image; if(name) { image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(image); button = gtk_toolbar_append_item(toolbar, title, tooltip, tooltip, image, cbfunc, NULL); gtk_widget_set_name (button, name); } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -