Mercurial > pidgin
comparison plugins/gevolution/assoc-buddy.c @ 10081:ff4be2d1401d
[gaim-migrate @ 11071]
Merge the gevolution changes back to HEAD.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 06 Oct 2004 03:17:24 +0000 |
parents | c00def44d76a |
children | 455c0830d108 |
comparison
equal
deleted
inserted
replaced
10080:8e6329b8dcc1 | 10081:ff4be2d1401d |
---|---|
29 | 29 |
30 #include "gevolution.h" | 30 #include "gevolution.h" |
31 | 31 |
32 #include <stdlib.h> | 32 #include <stdlib.h> |
33 #include <bonobo/bonobo-main.h> | 33 #include <bonobo/bonobo-main.h> |
34 #include <gtk/gtk.h> | |
34 | 35 |
35 enum | 36 enum |
36 { | 37 { |
37 COLUMN_NAME, | 38 COLUMN_NAME, |
38 COLUMN_DATA, | 39 COLUMN_DATA, |
42 static gint | 43 static gint |
43 delete_win_cb(GtkWidget *w, GdkEvent *event, GevoAssociateBuddyDialog *dialog) | 44 delete_win_cb(GtkWidget *w, GdkEvent *event, GevoAssociateBuddyDialog *dialog) |
44 { | 45 { |
45 gtk_widget_destroy(dialog->win); | 46 gtk_widget_destroy(dialog->win); |
46 | 47 |
47 g_list_foreach(dialog->contacts, (GFunc)g_free, NULL); | |
48 | |
49 if (dialog->contacts != NULL) | 48 if (dialog->contacts != NULL) |
49 { | |
50 g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); | |
50 g_list_free(dialog->contacts); | 51 g_list_free(dialog->contacts); |
52 } | |
51 | 53 |
52 g_object_unref(dialog->book); | 54 g_object_unref(dialog->book); |
55 gevo_addrbooks_model_unref(dialog->addrbooks); | |
53 | 56 |
54 g_free(dialog); | 57 g_free(dialog); |
55 | 58 |
56 return 0; | 59 return 0; |
57 } | |
58 | |
59 static void | |
60 populate_address_books(GevoAssociateBuddyDialog *dialog) | |
61 { | |
62 GtkWidget *item; | |
63 GtkWidget *menu; | |
64 #if notyet | |
65 ESourceList *addressbooks; | |
66 GSList *groups, *g; | |
67 #endif | |
68 | |
69 menu = | |
70 gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->addressbooks_menu)); | |
71 | |
72 item = gtk_menu_item_new_with_label(_("Local Addressbook")); | |
73 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
74 gtk_widget_show(item); | |
75 | |
76 #if notyet | |
77 if (!e_book_get_addressbooks(&addressbooks, NULL)) | |
78 { | |
79 gaim_debug_error("evolution", | |
80 "Unable to fetch list of address books.\n"); | |
81 | |
82 item = gtk_menu_item_new_with_label(_("None")); | |
83 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
84 gtk_widget_show(item); | |
85 | |
86 return; | |
87 } | |
88 | |
89 groups = e_source_list_peek_groups(addressbooks); | |
90 | |
91 if (groups == NULL) | |
92 { | |
93 item = gtk_menu_item_new_with_label(_("None")); | |
94 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
95 gtk_widget_show(item); | |
96 | |
97 return; | |
98 } | |
99 | |
100 for (g = groups; g != NULL; g = g->next) | |
101 { | |
102 GSList *sources, *s; | |
103 | |
104 sources = e_source_group_peek_sources(g->data); | |
105 | |
106 for (s = sources; s != NULL; s = s->next) | |
107 { | |
108 ESource *source = E_SOURCE(s->data); | |
109 | |
110 item = gtk_menu_item_new_with_label(e_source_peek_name(source)); | |
111 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
112 gtk_widget_show(item); | |
113 } | |
114 } | |
115 #endif | |
116 } | 60 } |
117 | 61 |
118 static void | 62 static void |
119 search_changed_cb(GtkEntry *entry, GevoAssociateBuddyDialog *dialog) | 63 search_changed_cb(GtkEntry *entry, GevoAssociateBuddyDialog *dialog) |
120 { | 64 { |
182 gtk_tree_view_column_add_attribute(column, renderer, | 126 gtk_tree_view_column_add_attribute(column, renderer, |
183 "text", COLUMN_NAME); | 127 "text", COLUMN_NAME); |
184 } | 128 } |
185 | 129 |
186 static void | 130 static void |
187 populate_treeview(GevoAssociateBuddyDialog *dialog) | 131 populate_treeview(GevoAssociateBuddyDialog *dialog, const gchar *uri) |
188 { | 132 { |
133 EBook *book; | |
189 EBookQuery *query; | 134 EBookQuery *query; |
190 EBook *book; | |
191 const char *prpl_id; | 135 const char *prpl_id; |
192 gboolean status; | 136 gboolean status; |
193 GList *cards, *c; | 137 GList *cards, *c; |
194 | 138 |
195 if (!gevo_load_addressbook(&book, NULL)) | 139 if (dialog->book != NULL) |
140 { | |
141 g_object_unref(dialog->book); | |
142 dialog->book = NULL; | |
143 } | |
144 | |
145 if (dialog->contacts != NULL) | |
146 { | |
147 g_list_foreach(dialog->contacts, (GFunc) g_object_unref, NULL); | |
148 g_list_free(dialog->contacts); | |
149 dialog->contacts = NULL; | |
150 } | |
151 | |
152 gtk_list_store_clear(dialog->model); | |
153 | |
154 if (!gevo_load_addressbook(uri, &book, NULL)) | |
196 { | 155 { |
197 gaim_debug_error("evolution", | 156 gaim_debug_error("evolution", |
198 "Error retrieving default addressbook\n"); | 157 "Error retrieving addressbook\n"); |
199 | 158 |
200 return; | 159 return; |
201 } | 160 } |
202 | 161 |
203 query = e_book_query_field_exists(E_CONTACT_FULL_NAME); | 162 query = e_book_query_field_exists(E_CONTACT_FULL_NAME); |
273 dialog->contacts = cards; | 232 dialog->contacts = cards; |
274 dialog->book = book; | 233 dialog->book = book; |
275 } | 234 } |
276 | 235 |
277 static void | 236 static void |
237 addrbook_change_cb(GtkComboBox *combo, GevoAssociateBuddyDialog *dialog) | |
238 { | |
239 GtkTreeIter iter; | |
240 const char *esource_uri; | |
241 | |
242 if (!gtk_combo_box_get_active_iter(combo, &iter)) | |
243 return; | |
244 | |
245 gtk_tree_model_get(GTK_TREE_MODEL(dialog->addrbooks), &iter, | |
246 ADDRBOOK_COLUMN_URI, &esource_uri, | |
247 -1); | |
248 | |
249 populate_treeview(dialog, esource_uri); | |
250 } | |
251 | |
252 static void | |
278 new_person_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) | 253 new_person_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) |
279 { | 254 { |
280 gevo_new_person_dialog_show(NULL, dialog->buddy->account, | 255 gevo_new_person_dialog_show(dialog->book, NULL, dialog->buddy->account, |
281 dialog->buddy->name, NULL, dialog->buddy, | 256 dialog->buddy->name, NULL, dialog->buddy, |
282 TRUE); | 257 TRUE); |
283 | 258 |
284 delete_win_cb(NULL, NULL, dialog); | 259 delete_win_cb(NULL, NULL, dialog); |
285 } | 260 } |
313 | 288 |
314 if (protocol_field == 0) | 289 if (protocol_field == 0) |
315 return; /* XXX */ | 290 return; /* XXX */ |
316 | 291 |
317 list = e_contact_get(contact, protocol_field); | 292 list = e_contact_get(contact, protocol_field); |
318 | |
319 list = g_list_append(list, g_strdup(dialog->buddy->name)); | 293 list = g_list_append(list, g_strdup(dialog->buddy->name)); |
320 | 294 |
321 e_contact_set(contact, protocol_field, list); | 295 e_contact_set(contact, protocol_field, list); |
296 | |
322 if (!e_book_commit_contact(dialog->book, contact, NULL)) | 297 if (!e_book_commit_contact(dialog->book, contact, NULL)) |
323 { | |
324 gaim_debug_error("evolution", "Error adding contact to book\n"); | 298 gaim_debug_error("evolution", "Error adding contact to book\n"); |
325 } | |
326 | 299 |
327 /* Free the list. */ | 300 /* Free the list. */ |
328 g_list_foreach(list, (GFunc)g_free, NULL); | 301 g_list_foreach(list, (GFunc)g_free, NULL); |
329 g_list_free(list); | 302 g_list_free(list); |
330 | 303 |
339 GtkWidget *sw; | 312 GtkWidget *sw; |
340 GtkWidget *label; | 313 GtkWidget *label; |
341 GtkWidget *vbox; | 314 GtkWidget *vbox; |
342 GtkWidget *hbox; | 315 GtkWidget *hbox; |
343 GtkWidget *bbox; | 316 GtkWidget *bbox; |
344 GtkWidget *menu; | |
345 GtkWidget *sep; | 317 GtkWidget *sep; |
346 GtkWidget *disclosure; | 318 GtkWidget *disclosure; |
347 GtkTreeSelection *selection; | 319 GtkTreeSelection *selection; |
320 GtkCellRenderer *cell; | |
348 | 321 |
349 g_return_val_if_fail(buddy != NULL, NULL); | 322 g_return_val_if_fail(buddy != NULL, NULL); |
350 | 323 |
351 dialog = g_new0(GevoAssociateBuddyDialog, 1); | 324 dialog = g_new0(GevoAssociateBuddyDialog, 1); |
352 | 325 |
381 label = gtk_label_new(_("Search")); | 354 label = gtk_label_new(_("Search")); |
382 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 355 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
383 gtk_widget_show(label); | 356 gtk_widget_show(label); |
384 | 357 |
385 /* Addressbooks */ | 358 /* Addressbooks */ |
386 dialog->addressbooks_menu = gtk_option_menu_new(); | 359 dialog->addrbooks = gevo_addrbooks_model_new(); |
387 menu = gtk_menu_new(); | 360 |
388 gtk_option_menu_set_menu(GTK_OPTION_MENU(dialog->addressbooks_menu), menu); | 361 dialog->addrbooks_combo = gtk_combo_box_new_with_model(dialog->addrbooks); |
389 | 362 cell = gtk_cell_renderer_text_new(); |
390 populate_address_books(dialog); | 363 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo), |
391 | 364 cell, TRUE); |
392 gtk_option_menu_set_history(GTK_OPTION_MENU(dialog->addressbooks_menu), 0); | 365 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo), |
393 | 366 cell, |
394 gtk_box_pack_start(GTK_BOX(hbox), dialog->addressbooks_menu, | 367 "text", ADDRBOOK_COLUMN_NAME, |
395 FALSE, FALSE, 0); | 368 NULL); |
396 gtk_widget_show(dialog->addressbooks_menu); | 369 gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, FALSE, 0); |
370 gtk_widget_show(dialog->addrbooks_combo); | |
371 | |
397 | 372 |
398 /* Search field */ | 373 /* Search field */ |
399 dialog->search_field = gtk_entry_new(); | 374 dialog->search_field = gtk_entry_new(); |
400 gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0); | 375 gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0); |
401 gtk_widget_show(dialog->search_field); | 376 gtk_widget_show(dialog->search_field); |
424 /* Create the list model for the treeview. */ | 399 /* Create the list model for the treeview. */ |
425 dialog->model = gtk_list_store_new(NUM_COLUMNS, | 400 dialog->model = gtk_list_store_new(NUM_COLUMNS, |
426 G_TYPE_STRING, G_TYPE_POINTER); | 401 G_TYPE_STRING, G_TYPE_POINTER); |
427 | 402 |
428 /* Now for the treeview */ | 403 /* Now for the treeview */ |
429 dialog->treeview = | 404 dialog->treeview = gtk_tree_view_new_with_model( |
430 gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->model)); | 405 GTK_TREE_MODEL(dialog->model)); |
431 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE); | 406 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE); |
432 gtk_container_add(GTK_CONTAINER(sw), dialog->treeview); | 407 gtk_container_add(GTK_CONTAINER(sw), dialog->treeview); |
433 gtk_widget_show(dialog->treeview); | 408 gtk_widget_show(dialog->treeview); |
434 | 409 |
435 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); | 410 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); |
439 g_signal_connect(G_OBJECT(selection), "changed", | 414 g_signal_connect(G_OBJECT(selection), "changed", |
440 G_CALLBACK(selected_cb), dialog); | 415 G_CALLBACK(selected_cb), dialog); |
441 | 416 |
442 add_columns(dialog); | 417 add_columns(dialog); |
443 | 418 |
444 populate_treeview(dialog); | 419 /* |
420 * Catch addressbook selection and populate treeview with the first | |
421 * addressbook | |
422 */ | |
423 gevo_addrbooks_model_populate( dialog->addrbooks ); | |
424 g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed", | |
425 G_CALLBACK(addrbook_change_cb), dialog); | |
426 gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0); | |
445 | 427 |
446 /* Add the disclosure */ | 428 /* Add the disclosure */ |
447 disclosure = gaim_disclosure_new(_("Show user details"), | 429 disclosure = gaim_disclosure_new(_("Show user details"), |
448 _("Hide user details")); | 430 _("Hide user details")); |
449 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); | 431 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); |