📄 print.c
字号:
/* TradeClient <http://tradeclient.sourceforge.net> * $Id: print.c,v 1.5 2001/03/20 22:19:33 ttabner Exp $ * * Copyright (C) 1999-2000 Bynari Inc. * Copyright (C) 2001 Project TradeClient * * LGPL * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Library 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 Library * General Public License for more details. * * You should have received a copy of the GNU Library 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. */#include "print.h"voidon_extra_toggled (GtkToggleButton * togglebutton, gpointer user_data){ GtkWidget *parameters = lookup_widget (GTK_WIDGET (togglebutton), "parameters"); if (togglebutton->active) gtk_widget_set_sensitive (parameters, TRUE); else gtk_widget_set_sensitive (parameters, FALSE); update_printer_text (GTK_WIDGET (togglebutton));}voidon_done_clicked (GtkButton * button, gpointer user_data){ GtkWidget *psetup_window = lookup_widget (GTK_WIDGET (button), "psetup_window"); GtkWidget *text = lookup_widget (GTK_WIDGET (button), "entry1"); char *printer = gtk_entry_get_text (GTK_ENTRY (text)); set_printer (strdup (printer)); gtk_widget_destroy (psetup_window);}voidpsetup_window (void){ GtkWidget *psetup_window; GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *frame1; GtkWidget *pcombo; GtkWidget *printer; GtkWidget *frame2; GtkWidget *hbox1; GtkWidget *extra; GtkWidget *parameters; GtkWidget *hseparator1; GtkWidget *entry1; GtkWidget *hbuttonbox1; GtkWidget *done; GList *printers = get_printers (); char *pr_text = NULL; char *op_text = NULL; if (tm_globs->printer) { pr_text = get_printer (tm_globs->printer); op_text = get_printer_opts (tm_globs->printer); } psetup_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (psetup_window, "psetup_window"); gtk_object_set_data (GTK_OBJECT (psetup_window), "psetup_window", psetup_window); gtk_window_set_title (GTK_WINDOW (psetup_window), "Printer Setup"); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox1, "vbox1"); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (psetup_window), vbox1); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox2, "vbox2"); gtk_widget_ref (vbox2); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "vbox2", vbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (vbox1), vbox2, TRUE, TRUE, 0); frame1 = gtk_frame_new ("Select Printer"); gtk_widget_set_name (frame1, "frame1"); gtk_widget_ref (frame1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "frame1", frame1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox2), frame1, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame1), 3); pcombo = gtk_combo_new (); gtk_widget_set_name (pcombo, "pcombo"); gtk_widget_ref (pcombo); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "pcombo", pcombo, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (pcombo); gtk_container_add (GTK_CONTAINER (frame1), pcombo); gtk_combo_set_popdown_strings (GTK_COMBO (pcombo), printers); printer = GTK_COMBO (pcombo)->entry; gtk_widget_set_name (printer, "printer"); gtk_widget_ref (printer); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "printer", printer, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (printer); gtk_entry_set_editable (GTK_ENTRY (printer), FALSE); if (pr_text) gtk_entry_set_text (GTK_ENTRY (printer), pr_text); frame2 = gtk_frame_new ("Extra Parameters"); gtk_widget_set_name (frame2, "frame2"); gtk_widget_ref (frame2); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "frame2", frame2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame2); gtk_box_pack_start (GTK_BOX (vbox2), frame2, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame2), 3); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox1, "hbox1"); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (frame2), hbox1); extra = gtk_check_button_new_with_label (""); gtk_widget_set_name (extra, "extra"); gtk_widget_ref (extra); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "extra", extra, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (extra); gtk_box_pack_start (GTK_BOX (hbox1), extra, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (extra), 3); parameters = gtk_entry_new (); gtk_widget_set_name (parameters, "parameters"); gtk_widget_ref (parameters); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "parameters", parameters, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (parameters); gtk_box_pack_start (GTK_BOX (hbox1), parameters, TRUE, TRUE, 0); gtk_widget_set_sensitive (parameters, FALSE); if (op_text) gtk_entry_set_text (GTK_ENTRY (parameters), op_text); if (strlen (gtk_entry_get_text (GTK_ENTRY (parameters)))) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (extra), TRUE); gtk_widget_set_sensitive (parameters, TRUE); } hseparator1 = gtk_hseparator_new (); gtk_widget_set_name (hseparator1, "hseparator1"); gtk_widget_ref (hseparator1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "hseparator1", hseparator1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hseparator1); gtk_box_pack_start (GTK_BOX (vbox2), hseparator1, FALSE, TRUE, 5); entry1 = gtk_entry_new (); gtk_widget_set_name (entry1, "entry1"); gtk_widget_ref (entry1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "entry1", entry1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (entry1); gtk_box_pack_start (GTK_BOX (vbox2), entry1, FALSE, FALSE, 0); gtk_entry_set_editable (GTK_ENTRY (entry1), FALSE); if (tm_globs->printer) gtk_entry_set_text (GTK_ENTRY (entry1), tm_globs->printer); hbuttonbox1 = gtk_hbutton_box_new (); gtk_widget_set_name (hbuttonbox1, "hbuttonbox1"); gtk_widget_ref (hbuttonbox1); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "hbuttonbox1", hbuttonbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbuttonbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbuttonbox1, FALSE, TRUE, 0); done = gtk_button_new_with_label ("Done"); gtk_widget_set_name (done, "done"); gtk_widget_ref (done); gtk_object_set_data_full (GTK_OBJECT (psetup_window), "done", done, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (done); gtk_container_add (GTK_CONTAINER (hbuttonbox1), done); GTK_WIDGET_SET_FLAGS (done, GTK_CAN_DEFAULT); gtk_signal_connect (GTK_OBJECT (psetup_window), "delete_event", GTK_SIGNAL_FUNC (gtk_false), NULL); gtk_signal_connect (GTK_OBJECT (psetup_window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); gtk_signal_connect (GTK_OBJECT (printer), "changed", GTK_SIGNAL_FUNC (update_printer_text), NULL); gtk_signal_connect (GTK_OBJECT (extra), "toggled", GTK_SIGNAL_FUNC (on_extra_toggled), NULL); gtk_signal_connect (GTK_OBJECT (parameters), "changed", GTK_SIGNAL_FUNC (update_printer_text), NULL); gtk_signal_connect (GTK_OBJECT (done), "clicked", GTK_SIGNAL_FUNC (on_done_clicked), NULL); gtk_widget_show (psetup_window);}voidupdate_printer_text (GtkWidget *widget){ char *buf; GtkWidget *printer = lookup_widget (widget, "printer"); GtkWidget *extra = lookup_widget (widget, "extra"); GtkWidget *parameters = lookup_widget (widget, "parameters"); GtkWidget *text = lookup_widget (widget, "entry1"); char *pr = gtk_entry_get_text (GTK_ENTRY (printer)); int ex = 0; char *op = gtk_entry_get_text (GTK_ENTRY (parameters)); if ((GTK_TOGGLE_BUTTON (extra)->active)&&(strlen(op))) ex = 1; buf = (char *)malloc (1024 * sizeof (char)); if (ex) /* we have parameters */ { if (strcmp (pr, "(default)")) snprintf (buf, 1024, "lpr -P%s %s", pr, op); else snprintf (buf, 1024, "lpr %s", op); } else /* no parameters */ { if (strcmp (pr, "(default)")) snprintf (buf, 1024, "lpr -P%s", pr); else snprintf (buf, 1024, "lpr"); } gtk_entry_set_text (GTK_ENTRY (text), buf); if (buf) free (buf);}GList *get_printers (void){ GList *pr = NULL; FILE *fp; char *buf, *bufptr; int i; pr = g_list_append (pr, "(default)"); fp = fopen ("/etc/printcap", "r"); if (fp) /* file found, and opened */ { buf = (char *)malloc (255 * sizeof (char)); bufptr = buf; for (;;) { fgets (buf, 255, fp); if (feof (fp)) break; if (isalnum (*buf)) /* printer line */ { for (i = 1; i; i++) { if (!isalnum(*(buf+i))) { *(buf+i) = '\0'; break; } } pr = g_list_append (pr, strdup (buf)); } } free (bufptr); } return pr;}char *get_printer (char *text){ char *pr = strdup (text); int i; pr = strstr (pr, "-P"); if (pr) { pr += 2; for (i=1;*(pr+i);i++) { if (*(pr+i)==' ') *(pr+i) = '\0'; } } return pr;}char *get_printer_opts (char *text){ char *op = strdup (text); char *printer = get_printer (text); if (printer) { op = strstr (op, printer); op += strlen (printer); if (*op == ' ') op += 1; } else /* no printer, base offset from "lpr " */ { op += 3; if (*op == ' ') op += 1; } if (printer) free (printer); return op;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -