⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print.c

📁 一个功能全面的电子邮件客户端
💻 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 + -