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

📄 abook-callbacks.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 3 页
字号:
/* TradeClient <http://tradeclient.sourceforge.net> * $Id: abook-callbacks.c,v 1.21 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 "abook-main.h"GtkWidget *abook_widget;Abook *current_abook=NULL;GtkCTreeNode *current_node=NULL;Abook_rd *selection=NULL;GtkCTreeNode *all_entries=NULL;Abook *abook_get_current () {	return current_abook;}void abook_widget_rehash_abook_clist (Abook *abook, GtkCTree *ctree) {	GList *seek, *seek2;	Abook *abook2;	Abook_entry *entry;	Abook_group *group;		Abook_rd *rd;	GtkCTreeNode *node, *tnode;	GtkStyle *bold, *blue;	gchar *ct_data[2];	static GdkFont *bold_font=NULL;/*	g_return_if_fail (abook != NULL); */		g_return_if_fail (ctree != NULL);	if (!bold_font) 		bold_font=gdk_font_load ("-*-helvetica-bold-r-*--*-*-*-*-*-*-*-1");	gtk_clist_freeze (GTK_CLIST (GTK_WIDGET (ctree)));	gtk_clist_clear (GTK_CLIST (GTK_WIDGET (ctree)));		for (seek=abook_first();seek;seek=seek->next) {		abook2=(Abook *)seek->data;		for (seek2=abook2->entrys;seek2;seek2=seek2->next) {			entry=(Abook_entry *)seek2->data;			g_list_free (entry->nodes);			entry->nodes=NULL;		}	}	bold=gtk_style_copy (GTK_WIDGET (ctree)->style);	bold->font=bold_font;	bold->base[GTK_STATE_NORMAL].red=(0xe0 << 8);	bold->base[GTK_STATE_NORMAL].green=(0xe0 << 8);	bold->base[GTK_STATE_NORMAL].blue=(0xe0 << 8);	blue=gtk_style_copy (GTK_WIDGET (ctree)->style);	blue->font=bold_font;	blue->base[GTK_STATE_NORMAL].red=(0xe0 << 8);	blue->base[GTK_STATE_NORMAL].green=(0xe0 << 8);	if(abook!=NULL){	for (seek=abook->groups;seek;seek=seek->next) {		group=(Abook_group *)seek->data;		ct_data[0]=group->name;		ct_data[1]=NULL;		rd=(Abook_rd *)calloc (1, sizeof (Abook_rd));		rd->type=ABOOK_GROUP;		rd->group=group;		group->node=gtk_ctree_insert_node (ctree, NULL, NULL, ct_data, 0, NULL,		                                   NULL, NULL, NULL, 0, TRUE);		gtk_ctree_node_set_row_style (ctree, group->node, bold);		gtk_ctree_node_set_row_data_full (ctree, group->node, (gpointer)rd, 		                                 (GtkDestroyNotify)abook_widget_destroy_row);	}	}	if(abook!=NULL){	ct_data[0]=(char *)calloc (1024, sizeof (char));	for (seek=abook->entrys;seek;seek=seek->next) {		entry=(Abook_entry *)seek->data;		for (seek2=entry->groups;seek2;seek2=seek2->next) {			group=(Abook_group *)seek2->data;			rd=(Abook_rd *)calloc (1, sizeof (Abook_rd));			rd->type=ABOOK_ENTRY;			rd->entry=entry;#if 0			format_name (ct_data[0], entry->first, entry->last);#else			format_name( 1024, ct_data[0], entry->first, entry->last, entry->def_email ) ;#endif			ct_data[1]=entry->def_email;			node=gtk_ctree_insert_node (ctree, group->node, NULL, ct_data, 0, 			                            NULL, NULL, NULL, NULL, 0, TRUE);			entry->nodes=g_list_append (entry->nodes, node);						gtk_ctree_node_set_row_data_full (ctree, node, (gpointer)rd, 			                                 (GtkDestroyNotify)abook_widget_destroy_row);		}	}	free (ct_data[0]);	}	ct_data[0]=strdup ("All Entries");	ct_data[1]=NULL;	node=gtk_ctree_insert_node (ctree, NULL, NULL, ct_data, 0, NULL,	                            NULL, NULL, NULL, 0, TRUE);	all_entries=node;	gtk_ctree_node_set_row_style (ctree, node, blue);	free (ct_data[0]);		if(abook!=NULL){	ct_data[0]=(char *)calloc (1024, sizeof (char));	for (seek=abook->entrys;seek;seek=seek->next) {		entry=(Abook_entry *)seek->data;#if 0		format_name (ct_data[0], entry->first, entry->last);#else		format_name (1024, ct_data[0], entry->first, entry->last, NULL ) ;#endif		ct_data[1]=entry->def_email;		rd=(Abook_rd *)calloc (1, sizeof (Abook_rd));		rd->type=ABOOK_ENTRY;		rd->entry=entry;		tnode=gtk_ctree_insert_node (ctree, node, NULL, ct_data, 0, NULL,	                               NULL, NULL, NULL, 0, TRUE);		gtk_ctree_node_set_row_data_full (ctree, tnode, (gpointer)rd, 		                                 (GtkDestroyNotify)abook_widget_destroy_row);		entry->nodes=g_list_append (entry->nodes, tnode);	}	free (ct_data[0]);	}	gtk_clist_thaw (GTK_CLIST (GTK_WIDGET (ctree)));	current_abook=abook;}void abook_widget_rehash_abook (Abook *abook) {	GtkCTree *ctree;	/*if (!abook)		return;*/	if (!abook_widget)		return;	ctree=GTK_CTREE (lw (abook_widget, "entry_ctree"));	abook_widget_rehash_abook_clist (abook, ctree);}void abook_widget_rehash_optionmenu (GtkOptionMenu *omenu, GtkSignalFunc func) {	GtkWidget *abook_om;	GtkWidget *menuitem;	GList *seek;	Abook *abook;	abook_om=gtk_menu_new ();	gtk_widget_show (abook_om);	for (seek=abook_first();seek;seek=seek->next) {		abook=(Abook *)seek->data;	  menuitem = gtk_menu_item_new_with_label (abook->name);  	gtk_widget_show (menuitem);		gtk_signal_connect (GTK_OBJECT (menuitem), "activate",		                    func, (gpointer)abook);  	gtk_menu_append (GTK_MENU (abook_om), menuitem);	}	if (abook_om) gtk_option_menu_set_menu (omenu, abook_om);}void abook_widget_rehash () {	Abook *abook;	GList *seek;		if (!abook_widget)		return;	g_return_if_fail (GTK_IS_WIDGET (abook_widget));	if (!abook_first()) {		gtk_widget_set_sensitive (lw (abook_widget, "add_entry"), FALSE);		gtk_widget_set_sensitive (lw (abook_widget, "add_group"), FALSE);	} else {		gtk_widget_set_sensitive (lw (abook_widget, "add_entry"), TRUE);		gtk_widget_set_sensitive (lw (abook_widget, "add_group"), TRUE);	}/*	seek=abook_first ();  	if (!seek){	abook_widget_rehash_optionmenu (GTK_OPTION_MENU (lw (abook_widget, "abook_optionmenu")),					                  GTK_SIGNAL_FUNC (abook_widget_changed_abook));   	  return;}	abook=seek->data;	abook_widget_rehash_optionmenu (GTK_OPTION_MENU (lw (abook_widget, "abook_optionmenu")), 	                                GTK_SIGNAL_FUNC (abook_widget_changed_abook));	abook_widget_rehash_abook (abook);*/	if ((seek=abook_first())) abook=seek->data; 	else abook=NULL;	 abook_widget_rehash_optionmenu (GTK_OPTION_MENU (lw (abook_widget, "abook_optionmenu")),					                  GTK_SIGNAL_FUNC (abook_widget_changed_abook));    abook_widget_rehash_abook (abook); 	return;}void abook_widget_show (GtkSignalFunc kill_func) {	if (!GTK_IS_WIDGET (abook_widget)) {		abook_create_main (kill_func);		abook_widget_rehash ();	}	gtk_widget_show (abook_widget);}void abook_widget_set (GtkWidget *widget) {	if (!GTK_IS_WIDGET (abook_widget)) {		abook_widget=widget;	}	}void abook_widget_unset () {	if (GTK_IS_WIDGET (abook_widget)) {		gtk_widget_destroy (abook_widget);	}	abook_widget=NULL;}GtkWidget *abook_widget_get () {	return abook_widget;}void abook_widget_hide () {	if (GTK_IS_WIDGET (abook_widget)) {		abooks_save_all ();		gtk_widget_hide (abook_widget);	}}void abook_widget_changed_abook (GtkMenuItem *item, gpointer data) {	abook_widget_rehash_abook (data);	current_abook=data;	selection=NULL;}void abook_widget_select_row (GtkCTree *ctree, GtkCTreeNode *node, gint column) {	Abook_rd *rd=gtk_ctree_node_get_row_data (ctree, node);	if (rd) {		if (rd->type==ABOOK_GROUP) {			gtk_label_set_text (GTK_LABEL (GTK_BIN (lw (abook_widget, "delete_entry"))->child), 			                    "Remove Group");			gtk_label_set_text (GTK_LABEL (GTK_BIN (lw (abook_widget, "edit_entry"))->child), 			                    "Edit Group");		} else {			gtk_label_set_text (GTK_LABEL (GTK_BIN (lw (abook_widget, "delete_entry"))->child), 			                    "Remove Entry");			gtk_label_set_text (GTK_LABEL (GTK_BIN (lw (abook_widget, "edit_entry"))->child), 			                    "Edit Entry");		}		gtk_widget_set_sensitive (lw (abook_widget, "edit_entry"), TRUE);		gtk_widget_set_sensitive (lw (abook_widget, "delete_entry"), TRUE);	}	current_node=node;}void abook_widget_unselect_row (GtkCTree *ctree, GtkCTreeNode *node, gint column) {	gtk_label_set_text (GTK_LABEL (GTK_BIN (lw (abook_widget, "delete_entry"))->child), "Remove Entry");	gtk_widget_set_sensitive (lw (abook_widget, "edit_entry"), FALSE);	gtk_widget_set_sensitive (lw (abook_widget, "delete_entry"), FALSE);	current_node=NULL;}void abook_widget_destroy_row (gpointer data) {	if (data) free (data);}void abook_widget_add_entry (GtkWidget *widget, gpointer data) {	if (current_abook) {		Abook_entry *entry=abook_entry_new (current_abook);		abook_entry_create (entry, entry);	} }void abook_widget_add_group (GtkWidget *widget, gpointer data) {	if (current_abook) {		Abook_group *group=abook_group_new (current_abook);		abook_create_group_editor (group, current_abook);	} }void abook_widget_edit_entry (GtkWidget *widget, gpointer data) {	if (current_abook && current_node) {		Abook_rd *rd=gtk_ctree_node_get_row_data(GTK_CTREE (lw (widget, "entry_ctree")), current_node);		if (!rd)			return;		switch (rd->type) {			case ABOOK_GROUP:				abook_create_group_editor (rd->group, current_abook);				break;			case ABOOK_ENTRY:				abook_entry_create (rd->entry, NULL);				break;		}	} }void abook_widget_delete_entry () {	GtkCTree *ctree=GTK_CTREE (lw (abook_widget, "entry_ctree"));	Abook_rd *rd;	Abook_entry *entry;	GList *seek;	/* This this is valid, we'll simply return when it happens */	if( current_node == NULL ) return ;	if( (rd=gtk_ctree_node_get_row_data (ctree, current_node)) == NULL ) return ;	/* Otherwise, we know we have a value to switch on */	switch (rd->type) {		case ABOOK_ENTRY:		  abook_entry_destroy (current_abook, rd->entry);		  abook_widget_rehash_abook (current_abook);		  current_node = NULL ;		  break;		case ABOOK_GROUP:		  for (seek=current_abook->entrys;seek;seek=seek->next) {		    entry=seek->data;		    if (g_list_find (entry->groups, rd->group)) {		      entry->groups=g_list_remove (entry->groups, rd->group);		    }		  }		  abook_group_destroy (current_abook, rd->group);		  abook_widget_rehash_abook (current_abook);		  current_node = NULL ;		  break;	}}void abook_widget_new_abook (GtkWidget *widget, gpointer data) {	abook_create_new_abook ();}void abook_widget_delete_abook_final (GtkWidget *widget, gpointer data) {	char *filename;	gtk_widget_destroy (lw (widget, "yesno"));	filename=(char *)calloc (1024, sizeof (char));	snprintf (filename, 1023, "$(HOME)/.tradeclient/Addressbooks/%s", current_abook->name);	env_srch_rep (filename);	unlink (filename);	abook_destroy (current_abook);	abook_widget_rehash ();	free (filename);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -