📄 misc-gtk.c
字号:
default: if (ddata->nofunc != NULL) ddata->nofunc (ddata->nopointer, ddata); break; } if (ddata->edit != NULL && ddata->dialog != NULL) gtk_widget_destroy (ddata->dialog); g_free (ddata);}#endifstatic gintdialog_keypress (GtkWidget * widget, GdkEventKey * event, gpointer data){ if (event->type != GDK_KEY_PRESS) return (FALSE); if (event->keyval == GDK_KP_Enter || event->keyval == GDK_Return) {#if GTK_MAJOR_VERSION == 1 ok_dialog_response (widget, data);#else dialog_response (widget, GTK_RESPONSE_YES, data);#endif return (TRUE); } else if (event->keyval == GDK_Escape) {#if GTK_MAJOR_VERSION == 1 cancel_dialog_response (widget, data);#else dialog_response (widget, GTK_RESPONSE_NO, data);#endif return (TRUE); } return (FALSE);}voidMakeEditDialog (char *diagtxt, char *infotxt, char *deftext, int passwd_item, char *checktext, gftp_dialog_button okbutton, void (*okfunc) (), void *okptr, void (*cancelfunc) (), void *cancelptr){ GtkWidget * tempwid, * dialog; gftp_dialog_data * ddata; const gchar * yes_text; ddata = g_malloc (sizeof (*ddata)); ddata->yesfunc = okfunc; ddata->yespointer = okptr; ddata->nofunc = cancelfunc; ddata->nopointer = cancelptr;#if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), diagtxt); gtk_grab_add (dialog); gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->action_area), 15); gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dialog)->action_area), TRUE);#else switch (okbutton) { case gftp_dialog_button_ok: yes_text = GTK_STOCK_OK; break; case gftp_dialog_button_create: yes_text = GTK_STOCK_ADD; break; case gftp_dialog_button_change: yes_text = _("Change"); break; case gftp_dialog_button_connect: yes_text = _("Connect"); break; case gftp_dialog_button_rename: yes_text = _("Rename"); break; default: yes_text = GTK_STOCK_MISSING_IMAGE; break; } dialog = gtk_dialog_new_with_buttons (_(diagtxt), NULL, 0, yes_text, GTK_RESPONSE_YES, GTK_STOCK_CANCEL, GTK_RESPONSE_NO, NULL);#endif gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 10); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 5); gtk_window_set_wmclass (GTK_WINDOW(dialog), "edit", "gFTP"); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); gtk_widget_realize (dialog); if (gftp_icon != NULL) { gdk_window_set_icon (dialog->window, NULL, gftp_icon->pixmap, gftp_icon->bitmap); gdk_window_set_icon_name (dialog->window, gftp_version); } ddata->dialog = dialog; tempwid = gtk_label_new (infotxt); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), tempwid, TRUE, TRUE, 0); gtk_widget_show (tempwid); ddata->edit = gtk_entry_new (); gtk_signal_connect (GTK_OBJECT (ddata->edit), "key_press_event", GTK_SIGNAL_FUNC (dialog_keypress), (gpointer) ddata); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), ddata->edit, TRUE, TRUE, 0); gtk_widget_grab_focus (ddata->edit); gtk_entry_set_visibility (GTK_ENTRY (ddata->edit), passwd_item); if (deftext != NULL) { gtk_entry_set_text (GTK_ENTRY (ddata->edit), deftext); gtk_entry_select_region (GTK_ENTRY (ddata->edit), 0, strlen (deftext)); } gtk_widget_show (ddata->edit); if (checktext != NULL) { ddata->checkbox = gtk_check_button_new_with_label (checktext); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), ddata->checkbox, TRUE, TRUE, 0); gtk_widget_show (ddata->checkbox); } #if GTK_MAJOR_VERSION == 1 switch (okbutton) { case gftp_dialog_button_ok: yes_text = _("OK"); break; case gftp_dialog_button_create: yes_text = _("Add"); break; case gftp_dialog_button_change: yes_text = _("Change"); break; case gftp_dialog_button_connect: yes_text = _("Connect"); break; case gftp_dialog_button_rename: yes_text = _("Rename"); break; default: yes_text = ""; break; } tempwid = gtk_button_new_with_label (yes_text); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (ok_dialog_response), ddata); gtk_widget_grab_default (tempwid); gtk_widget_show (tempwid); tempwid = gtk_button_new_with_label (_("Cancel")); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (cancel_dialog_response), ddata); gtk_widget_show (tempwid);#else g_signal_connect (GTK_OBJECT (dialog), "response", G_CALLBACK (dialog_response), ddata);#endif gtk_widget_show (dialog);}voidMakeYesNoDialog (char *diagtxt, char *infotxt, void (*yesfunc) (), gpointer yespointer, void (*nofunc) (), gpointer nopointer){ GtkWidget * text, * dialog; gftp_dialog_data * ddata;#if GTK_MAJOR_VERSION == 1 GtkWidget * tempwid;#endif ddata = g_malloc (sizeof (*ddata)); ddata->yesfunc = yesfunc; ddata->yespointer = yespointer; ddata->nofunc = nofunc; ddata->nopointer = nopointer;#if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new (); gtk_grab_add (dialog); gtk_window_set_title (GTK_WINDOW (dialog), diagtxt); gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->action_area), 15); gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dialog)->action_area), TRUE);#else dialog = gtk_dialog_new_with_buttons (_(diagtxt), NULL, 0, GTK_STOCK_YES, GTK_RESPONSE_YES, GTK_STOCK_NO, GTK_RESPONSE_NO, NULL);#endif gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 10); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 5); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); gtk_window_set_wmclass (GTK_WINDOW(dialog), "yndiag", "gFTP"); gtk_widget_realize (dialog); if (gftp_icon != NULL) { gdk_window_set_icon (dialog->window, NULL, gftp_icon->pixmap, gftp_icon->bitmap); gdk_window_set_icon_name (dialog->window, gftp_version); } ddata->dialog = dialog; text = gtk_label_new (infotxt); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), text, TRUE, TRUE, 0); gtk_widget_show (text);#if GTK_MAJOR_VERSION == 1 tempwid = gtk_button_new_with_label (_(" Yes ")); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (ok_dialog_response), ddata); gtk_widget_grab_default (tempwid); gtk_widget_show (tempwid); tempwid = gtk_button_new_with_label (_(" No ")); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (cancel_dialog_response), ddata); gtk_widget_show (tempwid);#else g_signal_connect (GTK_OBJECT (dialog), "response", G_CALLBACK (dialog_response), ddata);#endif gtk_widget_show (dialog);}static gintdelete_event (GtkWidget * widget, GdkEvent * event, gpointer data){ return (TRUE);}static voidtrans_stop_button (GtkWidget * widget, gpointer data){ gftp_transfer * transfer; transfer = data; pthread_kill (((gftp_window_data *) transfer->fromwdata)->tid, SIGINT);}voidupdate_directory_download_progress (gftp_transfer * transfer){ static GtkWidget * dialog = NULL, * textwid, * stopwid; char tempstr[255]; GtkWidget * vbox; if (transfer->numfiles < 0 || transfer->numdirs < 0) { if (dialog != NULL) gtk_widget_destroy (dialog); dialog = NULL; return; } if (dialog == NULL) { dialog = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);#if GTK_MAJOR_VERSION > 1 gtk_window_set_decorated (GTK_WINDOW (dialog), 0);#endif gtk_grab_add (dialog); gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Getting directory listings")); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); gtk_window_set_wmclass (GTK_WINDOW(dialog), "dirlist", "gFTP"); vbox = gtk_vbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (vbox), 10); gtk_container_add (GTK_CONTAINER (dialog), vbox); gtk_widget_show (vbox); textwid = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (vbox), textwid, TRUE, TRUE, 0); gtk_widget_show (textwid); statuswid = gtk_progress_bar_new (); gtk_progress_set_activity_mode (GTK_PROGRESS (statuswid), 1); gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (statuswid), 3); gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (statuswid), 5); gtk_box_pack_start (GTK_BOX (vbox), statuswid, TRUE, TRUE, 0); gtk_widget_show (statuswid); stopwid = gtk_button_new_with_label (_(" Stop ")); gtk_signal_connect (GTK_OBJECT (stopwid), "clicked", GTK_SIGNAL_FUNC (trans_stop_button), transfer); gtk_box_pack_start (GTK_BOX (vbox), stopwid, TRUE, TRUE, 0); gtk_widget_show (stopwid); gtk_widget_show (dialog); } g_snprintf (tempstr, sizeof (tempstr), _("Received %ld directories\nand %ld files"), transfer->numdirs, transfer->numfiles); gtk_label_set_text (GTK_LABEL (textwid), tempstr);}intprogress_timeout (gpointer data){ gftp_transfer * tdata; double val; tdata = data; update_directory_download_progress (tdata); val = gtk_progress_get_value (GTK_PROGRESS (statuswid)); if (val >= 1.0) val = 0.0; else val += 0.10; gtk_progress_bar_update (GTK_PROGRESS_BAR (statuswid), val); return (1);}voiddisplay_cached_logs (void){ gftp_log * templog; GList * templist; pthread_mutex_lock (&log_mutex); templist = gftp_file_transfer_logs; while (templist != NULL) { templog = (gftp_log *) templist->data; ftp_log (templog->type, NULL, "%s", templog->msg); g_free (templog->msg); g_free (templog); templist->data = NULL; templist = templist->next; } g_list_free (gftp_file_transfer_logs); gftp_file_transfer_logs = NULL; pthread_mutex_unlock (&log_mutex);}char *get_xpm_path (char *filename, int quit_on_err){ char *tempstr, *exfile, *share_dir; tempstr = g_strconcat (BASE_CONF_DIR, "/", filename, NULL); exfile = gftp_expand_path (NULL, tempstr); g_free (tempstr); if (access (exfile, F_OK) != 0) { g_free (exfile); share_dir = gftp_get_share_dir (); tempstr = g_strconcat (share_dir, "/", filename, NULL); exfile = gftp_expand_path (NULL, tempstr); g_free (tempstr); if (access (exfile, F_OK) != 0) { g_free (exfile); exfile = g_strconcat ("/usr/share/icons/", filename, NULL); if (access (exfile, F_OK) != 0) { g_free (exfile); if (!quit_on_err) return (NULL); printf (_("gFTP Error: Cannot find file %s in %s or %s\n"), filename, share_dir, BASE_CONF_DIR); exit (1); } } } return (exfile);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -