Mercurial > pidgin
comparison src/request.c @ 7909:5be22af4ebfc
[gaim-migrate @ 8569]
Reworked the list field API a bit. Items now have data associated with them
(which is not automatically freed by the API).
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sun, 21 Dec 2003 20:51:05 +0000 |
| parents | 1d0bc32f8038 |
| children | cc77bd88cd72 |
comparison
equal
deleted
inserted
replaced
| 7908:ad4841411ada | 7909:5be22af4ebfc |
|---|---|
| 297 if (field->u.list.selected != NULL) | 297 if (field->u.list.selected != NULL) |
| 298 { | 298 { |
| 299 g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); | 299 g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); |
| 300 g_list_free(field->u.list.selected); | 300 g_list_free(field->u.list.selected); |
| 301 } | 301 } |
| 302 | |
| 303 g_hash_table_destroy(field->u.list.item_data); | |
| 302 } | 304 } |
| 303 | 305 |
| 304 g_free(field); | 306 g_free(field); |
| 305 } | 307 } |
| 306 | 308 |
| 647 | 649 |
| 648 return field->u.choice.labels; | 650 return field->u.choice.labels; |
| 649 } | 651 } |
| 650 | 652 |
| 651 GaimRequestField * | 653 GaimRequestField * |
| 652 gaim_request_field_list_new(const char *id, const char *text, GList *items) | 654 gaim_request_field_list_new(const char *id, const char *text) |
| 653 { | 655 { |
| 654 GaimRequestField *field; | 656 GaimRequestField *field; |
| 655 | 657 |
| 656 g_return_val_if_fail(id != NULL, NULL); | 658 g_return_val_if_fail(id != NULL, NULL); |
| 657 g_return_val_if_fail(items != NULL, NULL); | 659 g_return_val_if_fail(text != NULL, NULL); |
| 658 | 660 |
| 659 field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_LIST); | 661 field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_LIST); |
| 660 | 662 |
| 661 gaim_request_field_list_set_items(field, items); | 663 field->u.list.item_data = g_hash_table_new_full(g_str_hash, g_str_equal, |
| 664 g_free, NULL); | |
| 662 | 665 |
| 663 return field; | 666 return field; |
| 664 } | 667 } |
| 665 | 668 |
| 666 void | 669 void |
| 667 gaim_request_field_list_set_items(GaimRequestField *field, GList *items) | 670 gaim_request_field_list_set_multi_select(GaimRequestField *field, |
| 668 { | 671 gboolean multi_select) |
| 669 g_return_if_fail(field != NULL); | 672 { |
| 670 g_return_if_fail(items != NULL); | 673 g_return_if_fail(field != NULL); |
| 674 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 675 | |
| 676 field->u.list.multiple_selection = multi_select; | |
| 677 } | |
| 678 | |
| 679 gboolean | |
| 680 gaim_request_field_list_get_multi_select(const GaimRequestField *field) | |
| 681 { | |
| 682 g_return_val_if_fail(field != NULL, FALSE); | |
| 683 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_LIST, FALSE); | |
| 684 | |
| 685 return field->u.list.multiple_selection; | |
| 686 } | |
| 687 | |
| 688 void * | |
| 689 gaim_request_field_list_get_data(const GaimRequestField *field, | |
| 690 const char *text) | |
| 691 { | |
| 692 g_return_val_if_fail(field != NULL, NULL); | |
| 693 g_return_val_if_fail(text != NULL, NULL); | |
| 694 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_LIST, NULL); | |
| 695 | |
| 696 return g_hash_table_lookup(field->u.list.item_data, text); | |
| 697 } | |
| 698 | |
| 699 void | |
| 700 gaim_request_field_list_add(GaimRequestField *field, const char *item, | |
| 701 void *data) | |
| 702 { | |
| 703 g_return_if_fail(field != NULL); | |
| 704 g_return_if_fail(item != NULL); | |
| 705 g_return_if_fail(data != NULL); | |
| 706 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 707 | |
| 708 field->u.list.items = g_list_append(field->u.list.items, g_strdup(item)); | |
| 709 | |
| 710 g_hash_table_insert(field->u.list.item_data, g_strdup(item), data); | |
| 711 } | |
| 712 | |
| 713 void | |
| 714 gaim_request_field_list_add_selected(GaimRequestField *field, const char *item) | |
| 715 { | |
| 716 g_return_if_fail(field != NULL); | |
| 717 g_return_if_fail(item != NULL); | |
| 718 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 719 | |
| 720 field->u.list.selected = g_list_append(field->u.list.selected, | |
| 721 g_strdup(item)); | |
| 722 } | |
| 723 | |
| 724 void | |
| 725 gaim_request_field_list_clear_selected(GaimRequestField *field) | |
| 726 { | |
| 727 g_return_if_fail(field != NULL); | |
| 671 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | 728 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); |
| 672 | 729 |
| 673 if (field->u.list.items != NULL) | 730 if (field->u.list.items != NULL) |
| 674 { | 731 { |
| 675 g_list_foreach(field->u.list.items, (GFunc)g_free, NULL); | 732 g_list_foreach(field->u.list.items, (GFunc)g_free, NULL); |
| 676 g_list_free(field->u.list.items); | 733 g_list_free(field->u.list.items); |
| 677 } | 734 field->u.list.items = NULL; |
| 678 | 735 } |
| 679 field->u.list.items = items; | 736 |
| 680 } | 737 g_hash_table_destroy(field->u.list.item_data); |
| 681 | 738 |
| 682 void | 739 field->u.list.item_data = g_hash_table_new_full(g_str_hash, g_str_equal, |
| 683 gaim_request_field_list_set_multi_select(GaimRequestField *field, | 740 g_free, NULL); |
| 684 gboolean multi_select) | |
| 685 { | |
| 686 g_return_if_fail(field != NULL); | |
| 687 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 688 | |
| 689 field->u.list.multiple_selection = multi_select; | |
| 690 } | |
| 691 | |
| 692 gboolean | |
| 693 gaim_request_field_list_get_multi_select(const GaimRequestField *field) | |
| 694 { | |
| 695 g_return_val_if_fail(field != NULL, FALSE); | |
| 696 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_LIST, FALSE); | |
| 697 | |
| 698 return field->u.list.multiple_selection; | |
| 699 } | |
| 700 | |
| 701 void | |
| 702 gaim_request_field_list_add(GaimRequestField *field, const char *item) | |
| 703 { | |
| 704 g_return_if_fail(field != NULL); | |
| 705 g_return_if_fail(item != NULL); | |
| 706 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 707 | |
| 708 field->u.list.items = g_list_append(field->u.list.items, g_strdup(item)); | |
| 709 } | |
| 710 | |
| 711 void | |
| 712 gaim_request_field_list_add_selected(GaimRequestField *field, const char *item) | |
| 713 { | |
| 714 g_return_if_fail(field != NULL); | |
| 715 g_return_if_fail(item != NULL); | |
| 716 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 717 | |
| 718 field->u.list.selected = | |
| 719 g_list_append(field->u.list.selected, g_strdup(item)); | |
| 720 } | |
| 721 | |
| 722 void | |
| 723 gaim_request_field_list_clear_selected(GaimRequestField *field) | |
| 724 { | |
| 725 g_return_if_fail(field != NULL); | |
| 726 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); | |
| 727 | |
| 728 gaim_request_field_list_set_selected(field, NULL); | |
| 729 } | 741 } |
| 730 | 742 |
| 731 void | 743 void |
| 732 gaim_request_field_list_set_selected(GaimRequestField *field, GList *items) | 744 gaim_request_field_list_set_selected(GaimRequestField *field, GList *items) |
| 733 { | 745 { |
| 737 | 749 |
| 738 if (field->u.list.selected != NULL) | 750 if (field->u.list.selected != NULL) |
| 739 { | 751 { |
| 740 g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); | 752 g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); |
| 741 g_list_free(field->u.list.selected); | 753 g_list_free(field->u.list.selected); |
| 754 field->u.list.selected = NULL; | |
| 742 } | 755 } |
| 743 | 756 |
| 744 field->u.list.selected = items; | 757 field->u.list.selected = items; |
| 745 } | 758 } |
| 746 | 759 |
