Mercurial > pidgin
annotate plugins/gevolution/assoc-buddy.c @ 11851:3bfb2cffcef2
[gaim-migrate @ 14142]
inspired by Richard Stellingwerff's patch 1339606, this workaround for
annoying visible borders on tab close buttons is no longer required with
at least gtk 2.6 (if someone can confirm if it was fixed in 2.4 we could
remove it there too)
committer: Tailor Script <tailor@pidgin.im>
| author | Stu Tomlinson <stu@nosnilmot.com> |
|---|---|
| date | Thu, 27 Oct 2005 15:15:52 +0000 |
| parents | 1f70f265cf27 |
| children |
| rev | line source |
|---|---|
| 8089 | 1 /* |
| 2 * Evolution integration plugin for Gaim | |
| 3 * | |
| 4 * Copyright (C) 2003 Christian Hammond. | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or | |
| 7 * modify it under the terms of the GNU General Public License as | |
| 8 * published by the Free Software Foundation; either version 2 of the | |
| 9 * License, or (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, but | |
| 12 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 * General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
| 19 * 02111-1307, USA. | |
| 20 */ | |
|
9825
c00def44d76a
[gaim-migrate @ 10696]
Christian Hammond <chipx86@chipx86.com>
parents:
9824
diff
changeset
|
21 #include "internal.h" |
| 8089 | 22 #include "gtkblist.h" |
| 11735 | 23 #include "gtkexpander.h" |
| 9824 | 24 #include "gtkgaim.h" |
| 8089 | 25 #include "gtkutils.h" |
| 26 #include "gtkimhtml.h" | |
| 27 | |
| 28 #include "debug.h" | |
| 29 | |
| 30 #include "gevolution.h" | |
| 31 | |
| 32 #include <stdlib.h> | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
33 #include <gtk/gtk.h> |
| 8089 | 34 |
| 35 enum | |
| 36 { | |
| 37 COLUMN_NAME, | |
| 38 COLUMN_DATA, | |
| 39 NUM_COLUMNS | |
| 40 }; | |
| 41 | |
| 42 static gint | |
| 43 delete_win_cb(GtkWidget *w, GdkEvent *event, GevoAssociateBuddyDialog *dialog) | |
| 44 { | |
| 45 gtk_widget_destroy(dialog->win); | |
| 46 | |
| 47 if (dialog->contacts != NULL) | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
48 { |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
49 g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); |
| 8089 | 50 g_list_free(dialog->contacts); |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
51 } |
| 8089 | 52 |
| 53 g_object_unref(dialog->book); | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
54 gevo_addrbooks_model_unref(dialog->addrbooks); |
| 8089 | 55 |
| 56 g_free(dialog); | |
| 57 | |
| 58 return 0; | |
| 59 } | |
| 60 | |
| 61 static void | |
| 62 search_changed_cb(GtkEntry *entry, GevoAssociateBuddyDialog *dialog) | |
| 63 { | |
| 64 const char *text = gtk_entry_get_text(entry); | |
| 65 GList *l; | |
| 66 | |
| 67 gtk_list_store_clear(dialog->model); | |
| 68 | |
| 69 for (l = dialog->contacts; l != NULL; l = l->next) | |
| 70 { | |
| 71 EContact *contact = E_CONTACT(l->data); | |
| 72 const char *name; | |
| 73 GtkTreeIter iter; | |
| 74 | |
| 75 name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); | |
| 76 | |
| 77 if (text != NULL && *text != '\0' && name != NULL && | |
| 78 g_ascii_strncasecmp(name, text, strlen(text))) | |
| 79 { | |
| 80 continue; | |
| 81 } | |
| 82 | |
| 83 gtk_list_store_append(dialog->model, &iter); | |
| 84 | |
| 85 gtk_list_store_set(dialog->model, &iter, | |
| 86 COLUMN_NAME, name, | |
| 87 COLUMN_DATA, contact, | |
| 88 -1); | |
| 89 } | |
| 90 } | |
| 91 | |
| 92 static void | |
| 93 clear_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) | |
| 94 { | |
| 95 static gboolean lock = FALSE; | |
| 96 | |
| 97 if (lock) | |
| 98 return; | |
| 99 | |
| 100 lock = TRUE; | |
| 101 gtk_entry_set_text(GTK_ENTRY(dialog->search_field), ""); | |
| 102 lock = FALSE; | |
| 103 } | |
| 104 | |
| 105 static void | |
| 106 selected_cb(GtkTreeSelection *sel, GevoAssociateBuddyDialog *dialog) | |
| 107 { | |
| 108 gtk_widget_set_sensitive(dialog->assoc_button, TRUE); | |
| 109 } | |
| 110 | |
| 111 static void | |
| 112 add_columns(GevoAssociateBuddyDialog *dialog) | |
| 113 { | |
| 114 GtkCellRenderer *renderer; | |
| 115 GtkTreeViewColumn *column; | |
| 116 | |
| 117 /* Name column */ | |
| 118 column = gtk_tree_view_column_new(); | |
| 119 gtk_tree_view_column_set_title(column, _("Name")); | |
| 120 gtk_tree_view_insert_column(GTK_TREE_VIEW(dialog->treeview), column, -1); | |
| 121 gtk_tree_view_column_set_sort_column_id(column, COLUMN_NAME); | |
| 122 | |
| 123 renderer = gtk_cell_renderer_text_new(); | |
| 124 gtk_tree_view_column_pack_start(column, renderer, TRUE); | |
| 125 gtk_tree_view_column_add_attribute(column, renderer, | |
| 126 "text", COLUMN_NAME); | |
| 127 } | |
| 128 | |
| 129 static void | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
130 populate_treeview(GevoAssociateBuddyDialog *dialog, const gchar *uri) |
| 8089 | 131 { |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
132 EBook *book; |
| 8089 | 133 EBookQuery *query; |
| 134 const char *prpl_id; | |
| 135 gboolean status; | |
| 136 GList *cards, *c; | |
| 137 | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
138 if (dialog->book != NULL) |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
139 { |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
140 g_object_unref(dialog->book); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
141 dialog->book = NULL; |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
142 } |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
143 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
144 if (dialog->contacts != NULL) |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
145 { |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
146 g_list_foreach(dialog->contacts, (GFunc) g_object_unref, NULL); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
147 g_list_free(dialog->contacts); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
148 dialog->contacts = NULL; |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
149 } |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
150 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
151 gtk_list_store_clear(dialog->model); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
152 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
153 if (!gevo_load_addressbook(uri, &book, NULL)) |
| 8089 | 154 { |
| 155 gaim_debug_error("evolution", | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
156 "Error retrieving addressbook\n"); |
| 8089 | 157 |
| 158 return; | |
| 159 } | |
| 160 | |
| 161 query = e_book_query_field_exists(E_CONTACT_FULL_NAME); | |
| 162 | |
| 163 if (query == NULL) | |
| 164 { | |
| 165 gaim_debug_error("evolution", "Error in creating query\n"); | |
| 166 | |
| 167 g_object_unref(book); | |
| 168 | |
| 169 return; | |
| 170 } | |
| 171 | |
| 172 status = e_book_get_contacts(book, query, &cards, NULL); | |
| 173 | |
| 174 e_book_query_unref(query); | |
| 175 | |
| 176 if (!status) | |
| 177 { | |
| 178 gaim_debug_error("evolution", "Error %d in getting card list\n", | |
| 179 status); | |
| 180 | |
| 181 g_object_unref(book); | |
| 182 | |
| 183 return; | |
| 184 } | |
| 185 | |
| 186 prpl_id = gaim_account_get_protocol_id(dialog->buddy->account); | |
| 187 | |
| 188 for (c = cards; c != NULL; c = c->next) | |
| 189 { | |
| 190 EContact *contact = E_CONTACT(c->data); | |
| 191 const char *name; | |
| 192 GtkTreeIter iter; | |
| 193 EContactField protocol_field = 0; | |
| 194 | |
| 195 name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); | |
| 196 | |
| 197 gtk_list_store_append(dialog->model, &iter); | |
| 198 | |
| 199 gtk_list_store_set(dialog->model, &iter, | |
| 200 COLUMN_NAME, name, | |
| 201 COLUMN_DATA, contact, | |
| 202 -1); | |
| 203 | |
| 204 /* See if this user has the buddy in its list. */ | |
| 205 protocol_field = gevo_prpl_get_field(dialog->buddy->account, | |
| 206 dialog->buddy); | |
| 207 | |
| 208 if (protocol_field > 0) | |
| 209 { | |
| 210 GList *ims, *l; | |
| 211 | |
| 212 ims = e_contact_get(contact, protocol_field); | |
| 213 | |
| 214 for (l = ims; l != NULL; l = l->next) | |
| 215 { | |
| 216 if (!strcmp(l->data, dialog->buddy->name)) | |
| 217 { | |
| 218 GtkTreeSelection *selection; | |
| 219 | |
| 220 /* This is it. Select it. */ | |
| 221 selection = gtk_tree_view_get_selection( | |
| 222 GTK_TREE_VIEW(dialog->treeview)); | |
| 223 | |
| 224 gtk_tree_selection_select_iter(selection, &iter); | |
| 225 break; | |
| 226 } | |
| 227 } | |
| 228 } | |
| 229 } | |
| 230 | |
| 231 dialog->contacts = cards; | |
| 232 dialog->book = book; | |
| 233 } | |
| 234 | |
| 235 static void | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
236 addrbook_change_cb(GtkComboBox *combo, GevoAssociateBuddyDialog *dialog) |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
237 { |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
238 GtkTreeIter iter; |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
239 const char *esource_uri; |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
240 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
241 if (!gtk_combo_box_get_active_iter(combo, &iter)) |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
242 return; |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
243 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
244 gtk_tree_model_get(GTK_TREE_MODEL(dialog->addrbooks), &iter, |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
245 ADDRBOOK_COLUMN_URI, &esource_uri, |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
246 -1); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
247 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
248 populate_treeview(dialog, esource_uri); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
249 } |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
250 |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
251 static void |
| 8089 | 252 new_person_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) |
| 253 { | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
254 gevo_new_person_dialog_show(dialog->book, NULL, dialog->buddy->account, |
| 8089 | 255 dialog->buddy->name, NULL, dialog->buddy, |
| 256 TRUE); | |
| 257 | |
| 258 delete_win_cb(NULL, NULL, dialog); | |
| 259 } | |
| 260 | |
| 261 static void | |
| 262 cancel_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) | |
| 263 { | |
| 264 delete_win_cb(NULL, NULL, dialog); | |
| 265 } | |
| 266 | |
| 267 static void | |
| 268 assoc_buddy_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog) | |
| 269 { | |
| 270 GtkTreeSelection *selection; | |
| 271 GtkTreeIter iter; | |
|
9566
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
272 GList *list; |
| 8089 | 273 const char *fullname; |
| 274 EContactField protocol_field; | |
| 275 EContact *contact; | |
| 276 | |
| 277 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); | |
| 278 | |
| 279 gtk_tree_selection_get_selected(selection, NULL, &iter); | |
| 280 | |
| 281 gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter, | |
| 282 COLUMN_NAME, &fullname, | |
| 283 COLUMN_DATA, &contact, | |
| 284 -1); | |
| 285 | |
| 286 protocol_field = gevo_prpl_get_field(dialog->buddy->account, dialog->buddy); | |
| 287 | |
| 288 if (protocol_field == 0) | |
| 289 return; /* XXX */ | |
| 290 | |
| 291 list = e_contact_get(contact, protocol_field); | |
|
9566
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
292 list = g_list_append(list, g_strdup(dialog->buddy->name)); |
| 8089 | 293 |
|
9566
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
294 e_contact_set(contact, protocol_field, list); |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
295 |
|
9566
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
296 if (!e_book_commit_contact(dialog->book, contact, NULL)) |
|
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
297 gaim_debug_error("evolution", "Error adding contact to book\n"); |
| 8089 | 298 |
| 299 /* Free the list. */ | |
|
9566
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
300 g_list_foreach(list, (GFunc)g_free, NULL); |
|
7a149eac59a3
[gaim-migrate @ 10409]
Christian Hammond <chipx86@chipx86.com>
parents:
9354
diff
changeset
|
301 g_list_free(list); |
| 8089 | 302 |
| 303 delete_win_cb(NULL, NULL, dialog); | |
| 304 } | |
| 305 | |
| 306 GevoAssociateBuddyDialog * | |
| 307 gevo_associate_buddy_dialog_new(GaimBuddy *buddy) | |
| 308 { | |
| 309 GevoAssociateBuddyDialog *dialog; | |
| 310 GtkWidget *button; | |
| 311 GtkWidget *sw; | |
| 312 GtkWidget *label; | |
| 313 GtkWidget *vbox; | |
| 314 GtkWidget *hbox; | |
| 315 GtkWidget *bbox; | |
| 316 GtkWidget *sep; | |
| 11735 | 317 GtkWidget *expander; |
| 8089 | 318 GtkTreeSelection *selection; |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
319 GtkCellRenderer *cell; |
| 8089 | 320 |
| 321 g_return_val_if_fail(buddy != NULL, NULL); | |
| 322 | |
| 323 dialog = g_new0(GevoAssociateBuddyDialog, 1); | |
| 324 | |
| 325 dialog->buddy = buddy; | |
| 326 | |
| 327 dialog->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
| 328 gtk_window_set_role(GTK_WINDOW(dialog->win), "assoc_buddy"); | |
| 329 gtk_container_set_border_width(GTK_CONTAINER(dialog->win), 12); | |
| 330 | |
| 331 g_signal_connect(G_OBJECT(dialog->win), "delete_event", | |
| 332 G_CALLBACK(delete_win_cb), dialog); | |
| 333 | |
| 334 /* Setup the vbox */ | |
| 335 vbox = gtk_vbox_new(FALSE, 12); | |
| 336 gtk_container_add(GTK_CONTAINER(dialog->win), vbox); | |
| 337 gtk_widget_show(vbox); | |
| 338 | |
| 339 /* Add the label. */ | |
| 340 label = gtk_label_new(_("Select a person from your address book to " | |
| 341 "add this buddy to, or create a new person.")); | |
| 342 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 343 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 344 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); | |
| 345 gtk_widget_show(label); | |
| 346 | |
| 347 /* Add the search hbox */ | |
| 348 hbox = gtk_hbox_new(FALSE, 6); | |
| 349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); | |
| 350 gtk_widget_show(hbox); | |
| 351 | |
| 352 /* "Search" */ | |
| 353 label = gtk_label_new(_("Search")); | |
| 354 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
| 355 gtk_widget_show(label); | |
| 356 | |
| 357 /* Addressbooks */ | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
358 dialog->addrbooks = gevo_addrbooks_model_new(); |
| 8089 | 359 |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
360 dialog->addrbooks_combo = gtk_combo_box_new_with_model(dialog->addrbooks); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
361 cell = gtk_cell_renderer_text_new(); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
362 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo), |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
363 cell, TRUE); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
364 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo), |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
365 cell, |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
366 "text", ADDRBOOK_COLUMN_NAME, |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
367 NULL); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
368 gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, FALSE, 0); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
369 gtk_widget_show(dialog->addrbooks_combo); |
| 8089 | 370 |
| 371 | |
| 372 /* Search field */ | |
| 373 dialog->search_field = gtk_entry_new(); | |
| 374 gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0); | |
| 375 gtk_widget_show(dialog->search_field); | |
| 376 | |
| 377 g_signal_connect(G_OBJECT(dialog->search_field), "changed", | |
| 378 G_CALLBACK(search_changed_cb), dialog); | |
| 379 | |
| 380 /* Clear button */ | |
| 381 button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); | |
| 382 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 383 gtk_widget_show(button); | |
| 384 | |
| 385 g_signal_connect(G_OBJECT(button), "clicked", | |
| 386 G_CALLBACK(clear_cb), dialog); | |
| 387 | |
| 388 /* Scrolled Window */ | |
| 389 sw = gtk_scrolled_window_new(0, 0); | |
| 390 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
| 391 GTK_POLICY_AUTOMATIC, | |
| 392 GTK_POLICY_ALWAYS); | |
| 393 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), | |
| 394 GTK_SHADOW_IN); | |
| 395 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | |
| 396 gtk_widget_show(sw); | |
| 397 | |
| 398 /* Create the list model for the treeview. */ | |
| 399 dialog->model = gtk_list_store_new(NUM_COLUMNS, | |
| 400 G_TYPE_STRING, G_TYPE_POINTER); | |
| 401 | |
| 402 /* Now for the treeview */ | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
403 dialog->treeview = gtk_tree_view_new_with_model( |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
404 GTK_TREE_MODEL(dialog->model)); |
| 8089 | 405 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE); |
| 406 gtk_container_add(GTK_CONTAINER(sw), dialog->treeview); | |
| 407 gtk_widget_show(dialog->treeview); | |
| 408 | |
| 409 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); | |
| 410 | |
| 411 gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); | |
| 412 | |
| 413 g_signal_connect(G_OBJECT(selection), "changed", | |
| 414 G_CALLBACK(selected_cb), dialog); | |
| 415 | |
| 416 add_columns(dialog); | |
| 417 | |
|
10081
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
418 /* |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
419 * Catch addressbook selection and populate treeview with the first |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
420 * addressbook |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
421 */ |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
422 gevo_addrbooks_model_populate( dialog->addrbooks ); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
423 g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed", |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
424 G_CALLBACK(addrbook_change_cb), dialog); |
|
ff4be2d1401d
[gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents:
9825
diff
changeset
|
425 gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0); |
| 8089 | 426 |
| 11735 | 427 /* Add the expander */ |
| 428 expander = gtk_expander_new_with_mnemonic(_("User _details")); | |
| 429 gtk_box_pack_start(GTK_BOX(vbox), expander, FALSE, FALSE, 0); | |
| 430 gtk_widget_show(expander); | |
| 8089 | 431 |
| 432 /* | |
| 433 * User details | |
| 434 */ | |
| 435 | |
| 436 /* Scrolled Window */ | |
| 437 sw = gtk_scrolled_window_new(0, 0); | |
| 438 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
| 439 GTK_POLICY_NEVER, | |
| 440 GTK_POLICY_ALWAYS); | |
| 441 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), | |
| 442 GTK_SHADOW_IN); | |
| 11735 | 443 gtk_container_add(GTK_CONTAINER(expander), sw); |
| 444 gtk_widget_show(sw); | |
| 8089 | 445 |
| 446 /* Textview */ | |
| 447 dialog->imhtml = gtk_imhtml_new(NULL, NULL); | |
| 448 gtk_container_add(GTK_CONTAINER(sw), dialog->imhtml); | |
| 449 gtk_widget_show(dialog->imhtml); | |
| 450 | |
| 451 /* Separator. */ | |
| 452 sep = gtk_hseparator_new(); | |
| 453 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); | |
| 454 gtk_widget_show(sep); | |
| 455 | |
| 456 /* Button box */ | |
| 457 bbox = gtk_hbutton_box_new(); | |
| 458 gtk_box_set_spacing(GTK_BOX(bbox), 6); | |
| 459 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); | |
| 460 gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); | |
| 461 gtk_widget_show(bbox); | |
| 462 | |
| 463 /* "New Person" button */ | |
| 464 button = gaim_pixbuf_button_from_stock(_("New Person"), GTK_STOCK_NEW, | |
| 465 GAIM_BUTTON_HORIZONTAL); | |
| 466 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
| 467 gtk_widget_show(button); | |
| 468 | |
| 469 g_signal_connect(G_OBJECT(button), "clicked", | |
| 470 G_CALLBACK(new_person_cb), dialog); | |
| 471 | |
| 472 /* "Cancel" button */ | |
| 473 button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); | |
| 474 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
| 475 gtk_widget_show(button); | |
| 476 | |
| 477 g_signal_connect(G_OBJECT(button), "clicked", | |
| 478 G_CALLBACK(cancel_cb), dialog); | |
| 479 | |
| 480 /* "Associate Buddy" button */ | |
| 481 button = gaim_pixbuf_button_from_stock(_("_Associate Buddy"), | |
| 482 GTK_STOCK_APPLY, | |
| 483 GAIM_BUTTON_HORIZONTAL); | |
| 484 dialog->assoc_button = button; | |
| 485 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
| 486 gtk_widget_set_sensitive(button, FALSE); | |
| 487 gtk_widget_show(button); | |
| 488 | |
| 489 g_signal_connect(G_OBJECT(button), "clicked", | |
| 490 G_CALLBACK(assoc_buddy_cb), dialog); | |
| 491 | |
| 492 /* Show it. */ | |
| 493 gtk_widget_show(dialog->win); | |
| 494 | |
| 495 return dialog; | |
| 496 } |
