Mercurial > pidgin
comparison src/gtksavedstatuses.c @ 10419:c9b1f3fac753
[gaim-migrate @ 11670]
Added some GaimStatusPrimitive<-->text mapping functions
Renamed the GaimStatusSaved data types to GaimSavedStatus
Modifying a status will now bring up an editor thing with the
correct values set
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 26 Dec 2004 02:03:14 +0000 |
parents | bed2c96bc1fb |
children | 854c972ea863 |
comparison
equal
deleted
inserted
replaced
10418:bed2c96bc1fb | 10419:c9b1f3fac753 |
---|---|
96 status_editor_save_cb(GtkButton *button, gpointer user_data) | 96 status_editor_save_cb(GtkButton *button, gpointer user_data) |
97 { | 97 { |
98 /* TODO: Save the status */ | 98 /* TODO: Save the status */ |
99 } | 99 } |
100 | 100 |
101 /* TODO: Can this menu be created more automatically? */ | |
102 static GtkWidget * | 101 static GtkWidget * |
103 create_status_type_menu() | 102 create_status_type_menu(GaimStatusPrimitive type) |
104 { | 103 { |
104 int i; | |
105 GtkWidget *dropdown; | 105 GtkWidget *dropdown; |
106 GtkWidget *menu; | 106 GtkWidget *menu; |
107 GtkWidget *item; | 107 GtkWidget *item; |
108 | 108 |
109 dropdown = gtk_option_menu_new(); | 109 dropdown = gtk_option_menu_new(); |
110 menu = gtk_menu_new(); | 110 menu = gtk_menu_new(); |
111 | 111 |
112 /* GAIM_STATUS_AVAILABLE */ | 112 for (i = 0; i < GAIM_STATUS_NUM_PRIMITIVES; i++) |
113 item = gtk_menu_item_new_with_label(_("Available")); | 113 { |
114 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | 114 item = gtk_menu_item_new_with_label(gaim_primitive_get_name_from_type(i)); |
115 gtk_widget_show(item); | 115 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
116 | 116 gtk_widget_show(item); |
117 /* GAIM_STATUS_UNAVAILABLE */ | 117 } |
118 item = gtk_menu_item_new_with_label(_("Unavailable")); | 118 |
119 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | 119 gtk_menu_set_active(GTK_MENU(menu), type); |
120 gtk_widget_show(item); | |
121 | |
122 /* GAIM_STATUS_HIDDEN */ | |
123 item = gtk_menu_item_new_with_label(_("Hidden")); | |
124 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
125 gtk_widget_show(item); | |
126 | |
127 /* GAIM_STATUS_AWAY */ | |
128 item = gtk_menu_item_new_with_label(_("Away")); | |
129 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
130 gtk_widget_show(item); | |
131 | |
132 /* GAIM_STATUS_EXTENDED_AWAY */ | |
133 item = gtk_menu_item_new_with_label(_("Extended Away")); | |
134 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
135 gtk_widget_show(item); | |
136 | |
137 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); | 120 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); |
138 gtk_widget_show(menu); | 121 gtk_widget_show(menu); |
139 | 122 |
140 return dropdown; | 123 return dropdown; |
141 } | 124 } |
232 for (l = gaim_accounts_get_all(); l != NULL; l = l->next) | 215 for (l = gaim_accounts_get_all(); l != NULL; l = l->next) |
233 status_editor_add_account(dialog, (GaimAccount *)l->data); | 216 status_editor_add_account(dialog, (GaimAccount *)l->data); |
234 } | 217 } |
235 | 218 |
236 void | 219 void |
237 gaim_gtk_status_editor_show(void) | 220 gaim_gtk_status_editor_show(GaimSavedStatus *status) |
238 { | 221 { |
239 StatusEditor *dialog; | 222 StatusEditor *dialog; |
240 GtkSizeGroup *sg; | 223 GtkSizeGroup *sg; |
241 GtkWidget *bbox; | 224 GtkWidget *bbox; |
242 GtkWidget *button; | 225 GtkWidget *button; |
282 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 265 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
283 gtk_widget_show(label); | 266 gtk_widget_show(label); |
284 gtk_size_group_add_widget(sg, label); | 267 gtk_size_group_add_widget(sg, label); |
285 | 268 |
286 entry = gtk_entry_new(); | 269 entry = gtk_entry_new(); |
287 gtk_entry_set_text(GTK_ENTRY(entry), _("Out of the office")); | 270 if (status != NULL) |
271 gtk_entry_set_text(GTK_ENTRY(entry), gaim_savedstatus_get_title(status)); | |
272 else | |
273 gtk_entry_set_text(GTK_ENTRY(entry), _("Out of the office")); | |
288 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); | 274 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); |
289 gtk_widget_show(entry); | 275 gtk_widget_show(entry); |
290 | 276 |
291 /* Status type */ | 277 /* Status type */ |
292 hbox = gtk_hbox_new(FALSE, 6); | 278 hbox = gtk_hbox_new(FALSE, 6); |
297 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 283 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
298 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 284 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
299 gtk_widget_show(label); | 285 gtk_widget_show(label); |
300 gtk_size_group_add_widget(sg, label); | 286 gtk_size_group_add_widget(sg, label); |
301 | 287 |
302 dropdown = create_status_type_menu(); | 288 if (status != NULL) |
289 dropdown = create_status_type_menu(gaim_savedstatus_get_type(status)); | |
290 else | |
291 dropdown = create_status_type_menu(GAIM_STATUS_AWAY); | |
303 gtk_box_pack_start(GTK_BOX(hbox), dropdown, TRUE, TRUE, 0); | 292 gtk_box_pack_start(GTK_BOX(hbox), dropdown, TRUE, TRUE, 0); |
304 gtk_widget_show(dropdown); | 293 gtk_widget_show(dropdown); |
305 | 294 |
306 /* Status message */ | 295 /* Status message */ |
307 hbox = gtk_hbox_new(FALSE, 6); | 296 hbox = gtk_hbox_new(FALSE, 6); |
315 gtk_size_group_add_widget(sg, label); | 304 gtk_size_group_add_widget(sg, label); |
316 | 305 |
317 frame = gaim_gtk_create_imhtml(TRUE, &text, &toolbar); | 306 frame = gaim_gtk_create_imhtml(TRUE, &text, &toolbar); |
318 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); | 307 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); |
319 gtk_widget_show(frame); | 308 gtk_widget_show(frame); |
309 | |
310 if (status != NULL) | |
311 gtk_imhtml_append_text(GTK_IMHTML(text), | |
312 gaim_savedstatus_get_message(status), 0); | |
320 | 313 |
321 /* Custom status message disclosure */ | 314 /* Custom status message disclosure */ |
322 disclosure = gaim_disclosure_new(_("Use a different status for some accounts"), | 315 disclosure = gaim_disclosure_new(_("Use a different status for some accounts"), |
323 _("Use a different status for some accounts")); | 316 _("Use a different status for some accounts")); |
324 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); | 317 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); |
424 } | 417 } |
425 | 418 |
426 static void | 419 static void |
427 status_window_add_cb(GtkButton *button, gpointer user_data) | 420 status_window_add_cb(GtkButton *button, gpointer user_data) |
428 { | 421 { |
429 gaim_gtk_status_editor_show(); | 422 gaim_gtk_status_editor_show(NULL); |
430 } | 423 } |
431 | 424 |
432 static void | 425 static void |
433 status_window_modify_foreach(GtkTreeModel *model, GtkTreePath *path, | 426 status_window_modify_foreach(GtkTreeModel *model, GtkTreePath *path, |
434 GtkTreeIter *iter, gpointer user_data) | 427 GtkTreeIter *iter, gpointer user_data) |
435 { | 428 { |
436 const char *title; | 429 const char *title; |
437 GaimStatusSaved *status; | 430 GaimSavedStatus *status; |
438 | 431 |
439 gtk_tree_model_get(model, iter, STATUS_WINDOW_COLUMN_TITLE, &title, -1); | 432 gtk_tree_model_get(model, iter, STATUS_WINDOW_COLUMN_TITLE, &title, -1); |
440 | 433 |
441 status = gaim_savedstatuses_find(title); | 434 status = gaim_savedstatus_find(title); |
442 /* TODO: Need to show a status editor pre-populated with this status */ | 435 gaim_gtk_status_editor_show(status); |
443 } | 436 } |
444 | 437 |
445 static void | 438 static void |
446 status_window_modify_cb(GtkButton *button, gpointer user_data) | 439 status_window_modify_cb(GtkButton *button, gpointer user_data) |
447 { | 440 { |
459 GtkTreeIter iter; | 452 GtkTreeIter iter; |
460 | 453 |
461 if (status_window_find_savedstatus(&iter, title)) | 454 if (status_window_find_savedstatus(&iter, title)) |
462 gtk_list_store_remove(status_window->model, &iter); | 455 gtk_list_store_remove(status_window->model, &iter); |
463 | 456 |
464 gaim_savedstatuses_delete(title); | 457 gaim_savedstatus_delete(title); |
465 | 458 |
466 g_free(title); | 459 g_free(title); |
467 } | 460 } |
468 | 461 |
469 static void | 462 static void |
518 static void | 511 static void |
519 populate_saved_status_list(StatusWindow *dialog) | 512 populate_saved_status_list(StatusWindow *dialog) |
520 { | 513 { |
521 GtkTreeIter iter; | 514 GtkTreeIter iter; |
522 const GList *saved_statuses; | 515 const GList *saved_statuses; |
523 GaimStatusSaved *saved_status; | 516 GaimSavedStatus *saved_status; |
524 char *message; | 517 char *message; |
525 | 518 |
526 gtk_list_store_clear(dialog->model); | 519 gtk_list_store_clear(dialog->model); |
527 | 520 |
528 for (saved_statuses = gaim_savedstatuses_get_all(); saved_statuses != NULL; | 521 for (saved_statuses = gaim_savedstatuses_get_all(); saved_statuses != NULL; |
529 saved_statuses = g_list_next(saved_statuses)) | 522 saved_statuses = g_list_next(saved_statuses)) |
530 { | 523 { |
531 saved_status = (GaimStatusSaved *)saved_statuses->data; | 524 saved_status = (GaimSavedStatus *)saved_statuses->data; |
532 message = gaim_markup_strip_html(gaim_savedstatuses_get_message(saved_status)); | 525 message = gaim_markup_strip_html(gaim_savedstatus_get_message(saved_status)); |
533 if (strlen(message) > 70) | 526 if (strlen(message) > 70) |
534 strcpy(&message[68], "..."); | 527 strcpy(&message[68], "..."); |
535 | 528 |
536 gtk_list_store_append(dialog->model, &iter); | 529 gtk_list_store_append(dialog->model, &iter); |
537 gtk_list_store_set(dialog->model, &iter, | 530 gtk_list_store_set(dialog->model, &iter, |
538 STATUS_WINDOW_COLUMN_TITLE, gaim_savedstatuses_get_title(saved_status), | 531 STATUS_WINDOW_COLUMN_TITLE, gaim_savedstatus_get_title(saved_status), |
539 STATUS_WINDOW_COLUMN_MESSAGE, message, | 532 STATUS_WINDOW_COLUMN_MESSAGE, message, |
540 -1); | 533 -1); |
541 free(message); | 534 free(message); |
542 } | 535 } |
543 } | 536 } |