gee
oldstatus
2005-09-19, Nathan Walp
* Evolution integration plugin for Gaim * 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 add_pref_box(GtkSizeGroup *sg, GtkWidget *parent, const char *text, hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(parent), hbox, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic(text); gtk_size_group_add_widget(sg, label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); delete_win_cb(GtkWidget *w, GdkEvent *event, GevoNewPersonDialog *dialog) gtk_widget_destroy(dialog->win); g_object_unref(dialog->book); cancel_cb(GtkWidget *w, GevoNewPersonDialog *dialog) delete_win_cb(NULL, NULL, dialog); screenname_changed_cb(GtkEntry *entry, GevoNewPersonDialog *dialog) gtk_widget_set_sensitive(dialog->add_button, *gtk_entry_get_text(entry) != '\0'); person_info_changed_cb(GtkEntry *entry, GevoNewPersonDialog *dialog) gtk_widget_set_sensitive(dialog->add_button, (*gtk_entry_get_text(GTK_ENTRY(dialog->firstname)) != '\0' || *gtk_entry_get_text(GTK_ENTRY(dialog->lastname)) != '\0')); add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) EContact *contact = NULL; gboolean new_contact = FALSE; EContactName *name = NULL; screenname = dialog->buddy->name; screenname = gtk_entry_get_text(GTK_ENTRY(dialog->screenname)); firstname = gtk_entry_get_text(GTK_ENTRY(dialog->firstname)); lastname = gtk_entry_get_text(GTK_ENTRY(dialog->lastname)); email = gtk_entry_get_text(GTK_ENTRY(dialog->email)); if (*firstname || *lastname) if (dialog->contact == NULL) dialog->contact = e_contact_new(); if (lastname != NULL && firstname != NULL) file_as = g_strdup_printf("%s, %s", lastname, firstname); else if (lastname != NULL) file_as = g_strdup(lastname); file_as = g_strdup(firstname); e_contact_set(dialog->contact, E_CONTACT_FILE_AS, file_as); contact = dialog->contact; name = e_contact_name_new(); name->given = g_strdup(firstname); name->family = g_strdup(lastname); full_name = e_contact_name_to_string(name); e_contact_set(contact, E_CONTACT_FULL_NAME, full_name); im_service = gaim_account_get_protocol_id(dialog->account); e_contact_set(contact, E_CONTACT_EMAIL_1, (gpointer)email); if (!strcmp(im_service, "prpl-oscar")) if (isdigit(*screenname)) field = E_CONTACT_IM_ICQ; field = E_CONTACT_IM_AIM; else if (!strcmp(im_service, "prpl-yahoo")) field = E_CONTACT_IM_YAHOO; else if (!strcmp(im_service, "prpl-jabber")) field = E_CONTACT_IM_JABBER; else if (!strcmp(im_service, "prpl-msn")) field = E_CONTACT_IM_MSN; GList *list = g_list_append(NULL, g_strdup(screenname)); e_contact_set(contact, field, list); if (!e_book_add_contact(dialog->book, contact, NULL)) gaim_debug_error("evolution", "Error adding contact to book\n"); delete_win_cb(NULL, NULL, dialog); if (!e_book_commit_contact(dialog->book, contact, NULL)) gaim_debug_error("evolution", "Error adding contact to book\n"); delete_win_cb(NULL, NULL, dialog); if (!dialog->person_only) GtkWidget *entry = GTK_COMBO(dialog->group_combo)->entry; group_name = gtk_entry_get_text(GTK_ENTRY(entry)); gevo_add_buddy(dialog->account, group_name, screenname, full_name); e_contact_name_free(name); delete_win_cb(NULL, NULL, dialog); select_account_cb(GObject *w, GaimAccount *account, GevoNewPersonDialog *dialog) dialog->account = account; gevo_new_person_dialog_show(EBook *book, EContact *contact, GaimAccount *account, const char *username, const char *group, GaimBuddy *buddy, GevoNewPersonDialog *dialog; g_return_if_fail(!person_only || (person_only && buddy)); dialog = g_new0(GevoNewPersonDialog, 1); dialog->account = account; dialog->person_only = person_only; dialog->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_role(GTK_WINDOW(dialog->win), "new_person"); gtk_window_set_resizable(GTK_WINDOW(dialog->win), FALSE); gtk_container_set_border_width(GTK_CONTAINER(dialog->win), 12); g_signal_connect(G_OBJECT(dialog->win), "delete_event", G_CALLBACK(delete_win_cb), dialog); vbox = gtk_vbox_new(FALSE, 12); gtk_container_add(GTK_CONTAINER(dialog->win), vbox); _("Please enter the person's information below.")); label = gtk_label_new(_("Please enter the buddy's screen name and " gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); /* Setup the size groups */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); sg2 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* Add the account type stuff. */ gaim_gtk_account_option_menu_new(account, FALSE, G_CALLBACK(select_account_cb), add_pref_box(sg, vbox, _("Account type:"), dialog->accounts_menu); dialog->screenname = gtk_entry_new(); add_pref_box(sg, vbox, _("Screenname:"), dialog->screenname); gtk_entry_set_text(GTK_ENTRY(dialog->screenname), username); g_signal_connect(G_OBJECT(dialog->screenname), "changed", G_CALLBACK(screenname_changed_cb), dialog); dialog->group_combo = gtk_combo_new(); gtk_combo_set_popdown_strings(GTK_COMBO(dialog->group_combo), add_pref_box(sg, vbox, _("Group:"), dialog->group_combo); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); /* Optional Information section */ label = gtk_label_new(_("Optional information:")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); /* Create the parent hbox for this whole thing. */ hbox = gtk_hbox_new(FALSE, 12); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); /* Now the left side of the hbox */ vbox2 = gtk_vbox_new(FALSE, 12); gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); button = gtk_button_new_from_stock(GTK_STOCK_OPEN); gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); label = gtk_label_new(_("Buddy Icon")); gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); /* Now the right side. */ vbox2 = gtk_vbox_new(FALSE, 12); gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0); dialog->firstname = gtk_entry_new(); add_pref_box(sg2, vbox2, _("First name:"), dialog->firstname); str = e_contact_get_const(contact, E_CONTACT_GIVEN_NAME); gtk_entry_set_text(GTK_ENTRY(dialog->firstname), str); dialog->lastname = gtk_entry_new(); add_pref_box(sg2, vbox2, _("Last name:"), dialog->lastname); str = e_contact_get_const(contact, E_CONTACT_FAMILY_NAME); gtk_entry_set_text(GTK_ENTRY(dialog->lastname), str); g_signal_connect(G_OBJECT(dialog->firstname), "changed", G_CALLBACK(person_info_changed_cb), dialog); g_signal_connect(G_OBJECT(dialog->lastname), "changed", G_CALLBACK(person_info_changed_cb), dialog); /* E-Mail address field */ dialog->email = gtk_entry_new(); add_pref_box(sg2, vbox2, _("E-mail:"), dialog->email); str = e_contact_get_const(contact, E_CONTACT_EMAIL_1); gtk_entry_set_text(GTK_ENTRY(dialog->email), str); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); bbox = gtk_hbutton_box_new(); gtk_box_set_spacing(GTK_BOX(bbox), 6); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cancel_cb), dialog); button = gtk_button_new_from_stock(GTK_STOCK_ADD); dialog->add_button = button; gtk_widget_set_sensitive(button, FALSE); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(add_cb), dialog); gtk_widget_show(dialog->win);