?? add_buddy_dialog.c
字號:
/* * Evolution integration plugin for Purple * * Copyright (C) 2003 Christian Hammond. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 * General Public License for more details. * * You should have received a copy of the GNU 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 "internal.h"#include "gtkblist.h"#include "pidgin.h"#include "gtkutils.h"#include "debug.h"#include "gevolution.h"#include <stdlib.h>enum{ COLUMN_NAME, COLUMN_PRPL_ICON, COLUMN_USERNAME, COLUMN_DATA, NUM_COLUMNS};static gintdelete_win_cb(GtkWidget *w, GdkEvent *event, GevoAddBuddyDialog *dialog){ gtk_widget_destroy(dialog->win); if (dialog->contacts != NULL) { g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); g_list_free(dialog->contacts); } if (dialog->book != NULL) g_object_unref(dialog->book); gevo_addrbooks_model_unref(dialog->addrbooks); if (dialog->username != NULL) g_free(dialog->username); g_free(dialog); return 0;}static voidnew_person_cb(GtkWidget *w, GevoAddBuddyDialog *dialog){ const char *group_name; group_name = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(dialog->group_combo)->entry)); gevo_new_person_dialog_show(dialog->book, NULL, dialog->account, dialog->username, (*group_name ? group_name : NULL), NULL, FALSE); delete_win_cb(NULL, NULL, dialog);}static voidcancel_cb(GtkWidget *w, GevoAddBuddyDialog *dialog){ delete_win_cb(NULL, NULL, dialog);}static voidselect_buddy_cb(GtkWidget *w, GevoAddBuddyDialog *dialog){ GtkTreeSelection *selection; GtkTreeIter iter; const char *group_name; const char *fullname; const char *username; EContact *contact; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) return; gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter, COLUMN_NAME, &fullname, COLUMN_USERNAME, &username, COLUMN_DATA, &contact, -1); group_name = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(dialog->group_combo)->entry)); if (username == NULL || *username == '\0') { gevo_new_person_dialog_show(dialog->book, NULL, dialog->account, dialog->username, (*group_name ? group_name : NULL), NULL, FALSE); } else { gevo_add_buddy(dialog->account, group_name, username, fullname); } delete_win_cb(NULL, NULL, dialog);}static voidadd_columns(GevoAddBuddyDialog *dialog){ GtkCellRenderer *renderer; GtkTreeViewColumn *column; /* Name column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("Name")); gtk_tree_view_insert_column(GTK_TREE_VIEW(dialog->treeview), column, -1); gtk_tree_view_column_set_sort_column_id(column, COLUMN_NAME); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_NAME); /* Account column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("Instant Messaging")); gtk_tree_view_insert_column(GTK_TREE_VIEW(dialog->treeview), column, -1); gtk_tree_view_column_set_sort_column_id(column, COLUMN_USERNAME); /* Protocol icon */ renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", COLUMN_PRPL_ICON); /* Account name */ renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_USERNAME);}static voidadd_ims(GevoAddBuddyDialog *dialog, EContact *contact, const char *name, GList *list, const char *id){ PurpleAccount *account = NULL; GList *l; GtkTreeIter iter; GdkPixbuf *pixbuf; if (list == NULL) return; for (l = purple_connections_get_all(); l != NULL; l = l->next) { PurpleConnection *gc = (PurpleConnection *)l->data; account = purple_connection_get_account(gc); if (!strcmp(purple_account_get_protocol_id(account), id)) break; account = NULL; } if (account == NULL) return; pixbuf = pidgin_create_prpl_icon(account, 0.5); for (l = list; l != NULL; l = l->next) { char *account_name = (char *)l->data; if (account_name == NULL) continue; if (purple_find_buddy(dialog->account, account_name) != NULL) continue; gtk_list_store_append(dialog->model, &iter); gtk_list_store_set(dialog->model, &iter, COLUMN_NAME, name, COLUMN_PRPL_ICON, pixbuf, COLUMN_USERNAME, account_name, COLUMN_DATA, contact, -1); if (!strcmp(purple_account_get_protocol_id(account), purple_account_get_protocol_id(dialog->account)) && dialog->username != NULL && !strcmp(account_name, dialog->username)) { GtkTreeSelection *selection; /* This is it. Select it. */ selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(dialog->treeview)); gtk_tree_selection_select_iter(selection, &iter); } } if (pixbuf != NULL) g_object_unref(G_OBJECT(pixbuf)); g_list_foreach(list, (GFunc)g_free, NULL); g_list_free(list);}static voidpopulate_treeview(GevoAddBuddyDialog *dialog, const gchar *uri){ EBookQuery *query; EBook *book; gboolean status; GList *cards, *c; if (dialog->book != NULL) { g_object_unref(dialog->book); dialog->book = NULL; } if (dialog->contacts != NULL) { g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); g_list_free(dialog->contacts); dialog->contacts = NULL; } gtk_list_store_clear(dialog->model); if (!gevo_load_addressbook(uri, &book, NULL)) { purple_debug_error("evolution", "Error retrieving default addressbook\n"); return; } query = e_book_query_field_exists(E_CONTACT_FULL_NAME); if (query == NULL) { purple_debug_error("evolution", "Error in creating query\n"); g_object_unref(book); return; } status = e_book_get_contacts(book, query, &cards, NULL); e_book_query_unref(query); if (!status) { purple_debug_error("evolution", "Error %d in getting card list\n", status); g_object_unref(book); return; } for (c = cards; c != NULL; c = c->next) { EContact *contact = E_CONTACT(c->data); const char *name; GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells; name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); aims = e_contact_get(contact, E_CONTACT_IM_AIM); jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); msns = e_contact_get(contact, E_CONTACT_IM_MSN); icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); if (aims == NULL && jabbers == NULL && yahoos == NULL && msns == NULL && icqs == NULL && novells == NULL) { GtkTreeIter iter; gtk_list_store_append(dialog->model, &iter); gtk_list_store_set(dialog->model, &iter, COLUMN_NAME, name, COLUMN_DATA, contact, -1); } else { add_ims(dialog, contact, name, aims, "prpl-oscar"); add_ims(dialog, contact, name, jabbers, "prpl-jabber"); add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); add_ims(dialog, contact, name, msns, "prpl-msn");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -