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