📄 abook-callbacks.c
字号:
/* 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 + -